@aztec/protocol-contracts 0.38.0 → 0.39.0

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.29.0+9edb7f5a94a9b0e3a0a108728fe04cd51e5d0db2", "name": "MultiCallEntrypoint", "functions": [{ "name": "compute_note_hash_and_nullifier", "is_unconstrained": true, "custom_attributes": [], "abi": { "error_types": {}, "param_witnesses": { "contract_address": [{ "end": 1, "start": 0 }], "nonce": [{ "end": 2, "start": 1 }], "note_type_id": [{ "end": 4, "start": 3 }], "serialized_note": [], "storage_slot": [{ "end": 3, "start": 2 }] }, "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": "serialized_note", "type": { "kind": "array", "length": 0, "type": { "kind": "field" } }, "visibility": "private" }], "return_type": { "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } }, "visibility": "public" }, "return_witnesses": [4, 5, 6, 7] }, "bytecode": "H4sIAAAAAAAA/+2byW7bMBCGJa9yVC+SZXlf4uTSm+w6tnPzy7Rv3XuBvkPRjMKpx8QkoNARIQImYGhMUfy/+blECRjfey/tt4+v4qZ2pQXbXNQ1+7+yE+wrK5PTd4Sz5ghnXZDTZzjh2lAxXGEut7zbef6vXAQnCRWlUDAwdVL3EdzNQ1BaKgg04IsE9CE7twgNhYYSKnB6MySJ+KQOn62ROtxB6o1rDi35HA4BMU+s37cBDb2r7y3iCcZ4D7RnpK5RUo5N+RzL8i5flehPU/XbJt/Rq46KBXfYHdX21adDND01RhhPSVtsh37UyBhD6XrX8e988lxDe65H2rSY/C+ebP5tjaetMTcVE5QIeLU9oKSxyaDfB/l+b8a8oY3JA8mpK+73/gx7QujdFv2nzIXEXcLzRZwn25WT5/vY9Qi7TL8vB/Cqr3kVal71SBvK0C/BP5/oYt/4vc9oy3lxPIP2wMCLAcMzsOzFgNEW9OIVtCMDLyKGJ7LsRcRoy3lx+gbasYEXMcMTW/YiZrTlvNjn7xZDAy+GDM/QshdDRltwjeTzIjHwImF4EsteJIy2oBc/QHtk4MWI4RlZ9mLEaAt68R20UwMvUoYntexFymgL7p35+8XYwIsxwzO27MWY0Rb0Yg/aEwMvJgzPxLIXE0ZbcI3k2lMDL6YMz9SyF/R31CLMQweZUweZ4wowB1oso33M98+ZgRczhmdm2QvUK8qcVIA50GIZ7eMLaM8NvJgzPHPLXqBeUebIQebYQeaRg8yJg8ypg8xVmM+BFston/I9dGHgxYLhWVj2AvWKMkcOMs8cZI4rwBxosYz2Kf/b3NLAiyXDs7TsBeoVZR47yDyoAHOgxTLapyNorwy8WDE8K8teoF5R5omDzKmDzDMHmWMHmUcOMicOMt/XoB3mqALM9EzT71J59q+hxoOeeRqjpzGGJKbnYNbijFlGx2dNtDbyWjtuvuD3Tana+zP0u5XPKX+Xf1J94Rm+LZPTs4qlz3M9kX59ooP1DRL/Im2xHfqB6xbZYd49qvj5k+dW2nM90uaRyf/iyea/1Xi2GjOMyU/CsRHn2J9N5vXAu67lr4SnhH3wQM/kYjHZd0raY3Yl5ZnRM3x/PNk1vdG8CjSveqQN3aM3JfhnMr/uzHfmj5jp+0RA6vD+mtTVtFzo/zJgezgz/BdsuDj5FjUAAA==", "debug_symbols": "ndpBattQGIXRvWgciu8v6ekpWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl+q/Xl7ftse7y/Ol+37ZXgcKw/D7vhyf2qfD8Pr/rC7P9fnt4f7aJFRl9EKo3Ejo8ioZDTKaJLRLCMpYpQiRililCImKWKSIiYpYpIiJilikiImKWKSIiYpYpIiZililiJmKWKWImYpYpYiZililiJmKWKWIpoU0aSIJkU0KaJJEU2KaFJEkyKaFNGkiEWKWKSIRYpYpIhFilikiEWKWKSIRYpYpIguRXQpoksRXYroUkSXIroU0aWILkV0KWKVIlYpYpUiVililSJWKWKVIlYpYpUiVikimw2tQqui1UiriVYzrRqtFlp1WlEboTZCbYTaCLURaiPURqiNUBuhNkJtFLVR1EZRG0VtFLVR1AZxZsgzQ6AZEs0QaYZMM4SaIdUMsWbINUOwGZLNEG2GbDOEmyHdDPFmyDdDwBkSzhBxhowzhJwh5QwxZ8g5Q9AZks4QdYasM4SdIe0McWfIO0PgGRLPEHmGzDOEniH1DLFnyD1D8BmSzxB9huwzhJ8h/QzxZ8g/QwAaEtAQgYYMNISgIQUNMWjIQUMQGpLQEIWGLDSEoSENDXFoyENDIBoS0RCJhkw0hKIhFQ2xaMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEXLrnnaPU+76EkuWuSiRS5a5KJFLlr/7aK308/t+377dNjdb/beP34cn/9d9L0dL7/e/n65/fsb" }, { "name": "entrypoint", "is_unconstrained": false, "custom_attributes": ["aztec(private)"], "abi": { "error_types": {}, "param_witnesses": { "app_payload": [{ "end": 55, "start": 38 }], "inputs": [{ "end": 38, "start": 0 }] }, "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" } }, { "name": "side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "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": "tx_tree_height", "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": "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" } }], "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" } }], "kind": "struct", "path": "authwit::entrypoint::function_call::FunctionCall" } } }, { "name": "nonce", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::entrypoint::app::AppPayload" }, "visibility": "public" }], "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" } }, { "name": "side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "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": "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": 32, "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": 2, "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_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "fields": [{ "name": "master_nullifier_public_key", "type": { "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint" } }, { "name": "app_nullifier_secret_key", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest" } } }, { "name": "new_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": "new_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_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "field" } } }, { "name": "public_teardown_function_hash", "type": { "kind": "field" } }, { "name": "new_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" } }], "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": "encrypted_logs_hashes", "type": { "kind": "array", "length": 4, "type": { "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect" } } }, { "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 } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "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": "tx_tree_height", "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": "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" } }], "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" }, "return_witnesses": [1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871] }, "bytecode": "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", "debug_symbols": "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roODD2iXS1W5Dg7+/9n7oy3ncWRXF32hPfYQpZBEPVy/+8l9+redf0+zRJchMSKAi7XGvHBnCV9UiQAzjbhALpWrWlwXB18gl8pVLa6Lgy+QS+Wqlsm45FK5qsV1cfAFcqlc1eK6OPgCuVyuynVx8AVyuVyV6+LgC+RyuSrXxcEXyOVyVa6Lgy+Qy+WqXBcHXyCXy1W5Lg6+QC6Xq3JdHHyBXC5X5bo4+AK5XK7KdXHwBXK5XJXr4uAL5HK5KtfFwRfI5XJVrouDL5DL5apcFwdfIJfLVbkuDr5ALperWrhc1cLlqly3YF8gl8tVGZerMi5X5brn/AK5XK7Kddf5BXK5XJXrvvML5HK5Kted5xfI5XJVrnvPL5DL5apcd59fIJfLVbnuP79ALper4upWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61ReubvWFq1t94epWX7i61Y2rW924utWNq1vduLrVbTIuuVSuyri61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3bi61Y2rW924utWNq1vduLrVjatb3fLUUdf5obbOf//kl9g0x1CP2DSvqbo8nrna9l5snqriHrFpXlE9YtPEvh6xaUJfj1hjEpvnnO0Qm+ec7RCbJuz1iE0T9XrEMjmoPLXEPWKDOqiXgKCu6CXAsdOppTwFlN1O/nX7ucv98+EfY974182YxDp2Onixjp0OXqxjp4MX69jp4MU6djposavnqmC8WMdOBy/WsSvCiyVyUOtkTGKJHNTquR4YL5bIQa2eq4HxYpkclOdaYLxYJgfluRIY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mN8P0806Tw3z+2G6WYSqYX4/TDcrZDXMr4d56AYo0TB1AxRkmDYffz5rZo1h6gYo0TB1A5RomKZh5hmmboCiDLO8hrk2hqkboETD1A1QomHqBijRMHUDlGaYx6QboETD1A1QlGFOj5lY2RrD1A1QomHqBijRME3DzDNM3QAlGqZugBINUzdAiYapG6BEw9QNUJ5hFt0AJRqmboASDVM3QImGqRugRMM0DTPPMHUDlGiYugFKNEzdACUapm6AEg1TN0B5hjnrBijRMHUDlGiYugFKNEzdACUapmmYeYapG6BEw9QNUKJh6gYo0TB1A5RomLoByjPMRTdAiYapG6BEw9QNUKJh6gYo0TBNw8wzTN0AJRqmboASDVM3QImGqRugRMPUDVCeYZpyJniYpT6HuRpwmOdN0IcpZyYapmmYeYapnJlomMqZiYapnJlomMqZiYapnJlnmKv+0iDRMPWXBomGqRugRMPUDVCQYZ4vqTlW0zDzDFM3QImGqRugRMPUDVCUYZ6vwlh1A5RomLoByjPMTTdAiYapG6BEw9QNUKJh6gYoyjDP/zpvMw0zzzB1A5RomLoBSjRM3QAlGqZugBINUzdAeYa56wYo0TB1A5RomLoBSjRM3QAlGqZpmHmGqRugRMPUDVCiYeoGKNEwdQOUaJi6AcozzKoboETD1A1QomHqBijRMHUDlGiYpmHmGaZugBINUzdAiYapG6BEw9QNUKJh6gYozzAP3QAlGqZugBINUzdAiYapG6BEwzQNM88wdQOUaJi6AUo0TN0AJRqmboASDVM3QFmGuU6TboASDVM3QImGaRomdJhznZ7D/AX9hibon2EqZyYapnJmomEqZyYapnJmomEqZ+YZZlHOTDRM5cxEw9RfGiQapv7SINEwTcPMM0zdAAUZ5umSmp9h6gYo0TB1A5RomLoBSjRM3QBFGebZKox1mnUDlGiYugFKNEzdACUapm6AEg3TNMw8w9QNUJRhnv913qwboETD1A1QomHqBijRMHUDlGeYi26AEg1TN0CJhqkboETD1A1QomGahplnmLoBSjRM3QAlGqZugBINUzdAiYapG6A8wzTdACUapm6AEg1TN0CJhqkboETDNA0zzzB1A5RomLoBSjRM3QAlGqZugBINUzdAeYa56gYo0TB1A5RomLoBSjRM3QAlGqZpmHmGqRugRMPUDVCi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PnN1q89c3eozV7f6zNWtPnN1q89c3eozV7f6zNWtPnN1q89c3eozV7f6zNWtPnN1q89c3epznjrqOpc/H67z3z/5JTbNMdQjNs1rqi6PZ662NcSmeUn1iE3ziuoRmyb29YhNE/p6xKaJfB1i8xQU94jNc852iE0T9nrEpol6PWKNSSyTg4paSvwSENQVvQR4djrHPj/+DZr2chazl+WRxcpi0+tn1/WXXM9eBy/XdXHwBXI9+50L5Hp2PBfI9ex5LpBrXHI9+54L5Hp2PhfI9eyTLpDL5apcFwfj5bouDr5ALpercl0cfIFcLlflujj4Arlcrsp1cfAFcrlclevi4Avkcrkq18XBF8jlclWui4MvkMvlqlwXB18gl8tVuS4OvkAul6tyXRx8gVwuV+W6OPgCuVyuynVx8AVyuVyV6+LgC+RyuSrXxcEXyOVyVa6Lgy+QS+WqFtfFwRfIpXJVi+vi4AvkUrmqZTIuuVSuanFdHHyBXCpXtbguDr5ALpercl0cfIFcLlflujj4Arlcrsp1cfAFcrlclevi4Avkcrkq18XBF8jlclWui4MvkMvlqlwXB18gl8tVuS4OvkAul6tyXRx8gVwuV+W6OPgCuVyuynVx8AVyuVyV6+LgC+RyuSrXxcEXyOVyVa6Lgy+Qy+WqFi5XtXC5Ktct2BfI5XJVxuWqjMtVue45v0Aul6ty3XV+gVwuV+W67/wCuVyuynXn+QVyuVyV697zC+RyuSrX3ecXyOVyVa77zy+Qy+WquLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65u9YWrW33h6lZfuLrVF65udePqVjeubnXj6lY3rm51m4xLLpWrMq5udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pWN65udePqVjeubnXj6lY3rm514+pW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stzdVJa7m8pyd1NZ7m4qy91NZbm7qSx3N5Xl7qay3N1UlrubynJ3U1nubirL3U1lubupLHc3leXuprLc3VSWu5vKcndTWe5uKsvdTWW5u6ksdzeV5e6mstzdVJa7m8pyd1NZ7m4qy91NZbm7qdbc3VRr7m6qNXc31Zq7m2qdUp+6a+5uqjV3N9Wau5tqzd1Ntebuplpzd1Otubup1tzdVGvubqo1dzfVmrubas3dTbXm7qZac3dTrbm7qdbc3VRr7m6qNXc31Zq7m2rN3U215u6mWnN3U625u6nW3N1Ua+5uqjV3N9Wau5tqzd1Ntebuplpzd1Otubup1tzdVGvubqo1dzfVmrubas3dTbXm7qZac3dTrbm7qdbc3VRr7m6qNXc31Zq7m2rN3U215u6mWnN3U625u6nW3N1Ua+5uqjV3N9Wau5tqzd1Ntebuplpzd1Otubup1tzdVGvubqo1dzfVmrubas3dTbXm7qZac3dTrbm7qdbc3VRr7m6qNXc31Zq7m2rN3U215u6mWnN3U625u6nW3N1Ua+5uqjV3N9Wau5tqzd1Ntebuplpzd1Otubup1tzdVGvubqo1dzfVmrubas3dTbXm7qZac3dTrbm7qdbc3VRr7m6qNXc31Zq7m2rN3U215u6mWnN3U625u6m23N1UW+5uqi13N9WWu5tqm1KfulvubqotdzfVlrubasvdTbXl7qbacndTbbm7qbbc3VRb7m6qLXc31Za7m2rL3U215e6m2nJ3U225u6m23N1UW+5uqi13N9WWu5tqy91NteXuptpyd1NtubupttzdVFvubqotdzfVlrubasvdTbXl7qbacndTbbm7qbbc3VRb7m6qLXc31Za7m2rL3U215e6m2nJ3U225u6m23N1UW+5uqi13N9WWu5tqy91NteXuptpyd1NtubupttzdVFvubqotdzfVlrubasvdTbXl7qbacndTbbm7qbbc3VRb7m6qLXc31Za7m2rL3U215e6m2nJ3U225u6m23N1UW+5uqi13N9WWu5tqy91NteXuptpyd1NtubupttzdVFvubqotdzfVlrubasvdTbXl7qbacndTbbm7qbbc3VRb7m6qLXc31Za7m2rL3U215e6m2nJ3U225u6m23N1UW+5uqi13N9WWu5tqy91NteXuptpyd1Ntubup9tzdVHvubqo9dzfVnrubap9Sn7p77m6qPXc31Z67m2rP3U215+6m2nN3U+25u6n23N1Ue+5uqj13N9Weu5tqz91Ntefuptpzd1Ptubup9tzdVHvubqo9dzfVnrubas/dTbXn7qbac3dT7bm7qfbc3VR77m6qPXc31Z67m2rP3U215+6m2nN3U+25u6n23N1Ue+5uqj13N9Weu5tqz91Ntefuptpzd1Ptubup9tzdVHvubqo9dzfVnrubas/dTbXn7qbac3dT7bm7qfbc3VR77m6qPXc31Z67m2rP3U215+6m2nN3U+25u6n23N1Ue+5uqj13N9Weu5tqz91Ntefuptpzd1Ptubup9tzdVHvubqo9dzfVnrubas/dTbXn7qbac3dT7bm7qfbc3VR77m6qPXc31Z67m2rP3U215+6m2nN3U+25u6n23N1Ue+5uqj13N9Weu5tqz91Ntefuptpzd1Ptubup9tzdVHvubqo9dzfVnrubas/dTbXn7qbac3dT7bm7qY7c3VRH7m6qI3c31ZG7m+qYUp+6R+5uqiN3N9WRu5vqyN1NdeTupjpyd1MdubupjtzdVEfubqojdzfVkbub6sjdTXXk7qY6cndTHbm7qY7c3VRH7m6qI3c31ZG7m+rI3U115O6mOnJ3Ux25u6mO3N1UR+5uqiN3N9WRu5vqyN1NdeTupjpyd1MdubupjtzdVEfubqojdzfVkbub6sjdTXXk7qY6cndTHbm7qY7c3VRH7m6qI3c31ZG7m+rI3U115O6mOnJ3Ux25u6mO3N1UR+5uqiN3N9WRu5vqyN1NdeTupjpyd1MdubupjtzdVEfubqojdzfVkbub6sjdTXXk7qY6cndTHbm7qY7c3VRH7m6qI3c31ZG7m+rI3U115O6mOnJ3Ux25u6mO3N1UR+5uqiN3N9WRu5vqyN1NdeTupjpyd1MdubupjtzdVEfubqojdzfVkbub6sjdTXXk7qY6cndTHbm7qY7c3VRH7m6qI3c31ZG7m+rI3U115O6mOnJ3Ux25u6nO3N1UZ+5uqjN3N9WZu5vqnFKfumfubqozdzfVmbub6szdTXXm7qY6c3dTnbm7qc7c3VRn7m6qM3c31Zm7m+rM3U115u6mOnN3U525u6nO3N1UZ+5uqjN3N9WZu5vqzN1Ndebupjpzd1OdubupztzdVGfubqozdzfVmbub6szdTXXm7qY6c3dTnbm7qc7c3VRn7m6qM3c31Zm7m+rM3U115u6mOnN3U525u6nO3N1UZ+5uqjN3N9WZu5vqzN1Ndebupjpzd1OdubupztzdVGfubqozdzfVmbub6szdTXXm7qY6c3dTnbm7qc7c3VRn7m6qM3c31Zm7m+rM3U115u6mOnN3U525u6nO3N1UZ+5uqjN3N9WZu5vqzN1Ndebupjpzd1OdubupztzdVGfubqozdzfVmbub6szdTXXm7qY6c3dTnbm7qc7c3VRn7m6qM3c31Zm7m+rM3U115u6mOnN3U525u6nO3N1UZ+5uqjN3N9WZu5vqzN1Ndebupjpzd1Odubup2pS7nOpr/anP3a/1pz54v9af+uT9Wn/qo/dr/anP3q/1pz58v9af+vT9Wn/q4/dr/cnP39w1VV/rT37+5i6q+lp/8vM3d1XV1/qTn7+5y6q+1p/8/M1dV/W1/uTnb+7Cqq/VJT9/c1dWfa0u+fmbu7Tqa3XJz9/ctVVfq0t+/uYurvpaXfLzN3d11df6k5+/ucurvtaf/PzNXV/1tf7k52/uAquv9Sc/f3NXWH2tP/n5m7vE6mv9yc/f3DVWX+tPfv7mLrL6Wn/y8zd3ldXX+pOfv7nLrL7Wn/z8zV1n9bX+5Odv7kKrr/UnP39zV1p9rT/5+Zu71Opr/cnP39y1Vl/rT37+5i62+lp/8vM3d7XV1/qTn7+5y62+1p/8/M1db/W1/uTnb+6Cq6/1Jz9/c1dcfa0/+fmbu+Tqa/3Jz9/cNVdf609+/uYuuvpaf/LzN3fV1df6k5+/ucuuvtaf/PzNXXf1tf7k52/uwquv9Sc/f3NXXn2tP/n5m7v06mv9yc/f3LVXX+tPfv7mLr76Wn/y8zd39dXX+pOfv7nLr77Wn/z8zV1/9bX+3OdvS95/1ZL3X7Xk/Vctef9Vm3Kfvy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/VkvdfteT9Vy15/1VL3n/Vkvdfzcn7r+bk/Vdz8v6rOXn/1TzlPn/n5P1Xc/L+qzl5/9WcvP9qTt5/NSfvv5qT91/Nyfuv5uT9V3Py/qs5ef/VnLz/ak7efzUn77+ak/dfzcn7r+bk/Vdz8v6rOXn/1Zy8/2pO3n81J++/mpP3X83J+6/m5P1Xc/L+qzl5/9WcvP9qTt5/NSfvv5qT91/Nyfuv5uT9V3Py/qs5ef/VnLz/ak7efzUn77+ak/dfzcn7r+bk/Vdz8v6rOXn/1Zy8/2pO3n81J++/mpP3X83J+6/m5P1Xc/L+qzl5/9WcvP9qTt5/NSfvv5qT91/Nyfuv5uT9V3Py/qs5ef/VnLz/ak7efzUn77+ak/dfzcn7r+bk/Vdz8v6rOXn/1Zy8/2pO3n81J++/mpP3X83J+6/m5P1Xc/L+qzl5/9WcvP9qTt5/NSfvv5qT91/Nyfuv5uT9V3Py/qs5ef/VnLz/ak7efzUn77+ak/dfzcn7r+bk/Vdz8v6rOXn/1Zy8/2pO3n81J++/mpP3Xy3J+6+W5P1XS/L+qyV5/9Uy5T5/l+T9V0vy/qslef/Vkrz/aknef7Uk779akvdfLcn7r5bk/VdL8v6rJXn/1ZK8/2pJ3n+1JO+/WpL3Xy3J+6+W5P1XS/L+qyV5/9WSvP9qSd5/tSTvv1qS918tyfuvluT9V0vy/qslef/Vkrz/aknef7Uk779akvdfLcn7r5bk/VdL8v6rJXL/0nK2P88uZ3f9gd//rvUHfv/Y9FiFta23/sDvH9f6A79/XOsP/P5xrT+w//esP3L/j2v9gd//tq2P9R+tt/7A73/X+gP7f9f6Lfn6I5+/nvVHPn896498/nrWH/n89aw/8vnrWH/k/h/X+pOfv5H7f1zrT37+Ru7/ca0/+fkbuf/Htf7k52/k/h/X+j99/nbvBH959lwfP3k7958EObd/qvbjbUFj1TYqtTOV2iWn2icFll7Bml7Bll7Bnl7BkV5BUg/xo+BI6gueFCQ9658UJD2/nxQEPpP3aZn/PLxPlw6kfcttq3UcyMebj8aqDXzWv6YW/RccR2APMZhMYG8ymExgzzOYTGAvNZbMGdijDSYT2PsNJhPYUw4mU8arwsmYyHTIyAP3yMgD98jIA/fIyAP3yMgD/07GJnngHhl54B4ZeeAeGXngHhkTmQ4ZeeAeGXngHhl54B4ZeeAeGXngDpkmD9wjIw/cIyMP3CMjD9wjYyLTISMP3CMjD9wjIw/cIyMP3CMjD9whM8sD98jIA/fIyAP3yMgD98iYyHTIyAP3yMgD98jIA/fIyAP3yMgDd8gslH7G0eloC6WfcZGhPJscPXy2UJ5NLjKUZ5OLDOXZ5CFjlPczLjKU9zMuMpR+xtF1YkbpZ1xkTGQ6ZCjvZ1xkOD2whwynB/aQ4fTAHjKcHthBZuX0wB4ynB7YQ0YeuEdGHrhHxsqQeeEnt2Ozh8Dj2J9+cvtN4frgOO9djnUc81iOdfz1WI513PhYjnW8O4jjE5s67h3OZqvj3/Fs6jh4PJs6Hh7Ppo6Lx7MxsemykTfvs+H02+c2PQSe+/If/94n7ueDxjGdPz/5OJ45cvptPEdOv/0Sx3n+FmhrJ7dEnkyTiWPkmTepOHJ6fjxHznyA58iZJfAcTRwhHDkzymscHfe1kWcypeJImWfmaTkfa56e1vzP80zk+VSpOFLmmdc4es6ZyLO6UnGkzDM3cKTMMzdwpMwzN3A0cYRwpMwzN3CkzDMvcnTkmULT5MZy5MwzrX2jaU8C/3meKTSpbijHQnPtbuPoOWcKTcEby5Ezz+A5cuYZPEcTRwhHzjyD58iZZ/AcOfPMaxwdeabQHMGxHEl/P3NsPxzP9/PMWmhG4ViOpL+fgXMkzTNb++a4G4IjaZ6BczRxvOLo8I9roUmMYzmS5hk4R9I8A+dImmfgHEl/P4PmWGje5FiOpL+feYnj9T3FWmiW5ViOyjPH339P8cTGxKbLRrmjz4YzS3zdVH2veV7/4/07gkLTMsdy5MwSL3F0eTfOLAHnWGhu51iOnFkCz5EzS+A5cmYJPEcTRwhHzozyGkfHHUGhWaZjOSrPLEsnMxeafYpno9zRZbOQZont+F7z00yAf35HsJBmCThH0izxCkePdys0vXcsRxNHCEfSLAHnSJol4BxJswScI2nugHMkzSgvcXTcERSamT2Wo/IMhqPyDIaj8gyGo4kjhKPyDIaj8gyGo/LM8ff3209slFH6bJQ7umwKzR7v/uQntQSO/0ltZF/epsdfSe+tGUJtZPeMV2tV1HpujkJP3MarjewX8Wojuzq82sg+Da82svOCqw09B/o1tY40FnqyM15tGS/lUlvGS7nUGpXaOl7Koza0l7LvxPd1VgJSQejJxHi1ob3UK2pd7iK0l0KrDT2LF682tJeCqw3tpeBqQ3spuForo9bhLkJPcsWrLeOlXGrLeCmX2jpeyqO2jpdyqA09B3SeHgL2uR2AVBB6WidebWQv9ZJaj7sIPfkSr9ao1Eb2Uni1kb0UXm1kL4VXG9lLvabW4y4ieym42tAzCPFqy3gpl9o6Xsqjto6X8qg1KrVZvNT8d759UpDFH/UVZPE8fQWhfcz6WMa+TFe/KT7mx5XKYT8/eZ6nZ7WhfQxY7RZ69thLarfl+P7J7eInO25UttDTxMaSCe2PhpIJ7aWGkjGR6ZAJ7dGGkgnt/YaSCe0ph5Ip41XhZMr4WjSZ0POqxpKRB+6RkQfukZEH7pExkemQkQfukZEH7pGRB+6RkQfukZEH7pAJPWdpLBl54B4ZeeAeGXngHhkTmQ4ZeeAeGXngHhl54B4ZeeAOmdDTW24js5yPQoHl7JKh9DMuMpRnk02PH2xt65GhPJtcZCjPJhcZyrPJRYbyfsZDJvSsh7FkKP2MbY8/3LWj9chQ+hkXGcr7GRcZE5kOGU4P7CHD6YE9ZDg9sIcMpwf2kOH0wA4yoWcUjCUjD9wjIw/cIyMP3CNjZci88pP3709Bn6fE/PW1YOj5C2PJ1PHAaDJ1PDCaTB0PjCZTxwODyYSeLTGWTB0P/M/InFuPTB0PjCZTxwOjyRgjmafGjGXtkaH0wC4ylB7YRYbSA7vIUHpgFxlKD+whE3omyFgylB7Y03MVetbIWDKUHthFxuqTeVJL4Guf1Eb2qos9fvJul5MfWmvfi27L8vS0PeuN7EDv0BvZV96hN7JbvEFv6Fkmd+iN7Ozu0BvZr92hN7ILu0OvkemN7K7u0Evmr0JPNrlDL5m/Cj3d5Aa9oeeb3KGXzF+FnnFyh14yfxV6zskdesn8Vei5KHfoJfNXoWeu3KGXy1/toeeu3KGXy1/toWek3KGXy1/tk5Hp5fJXe+jZI3fo5fJXe+g5IXfoJfNXoWd63KGXzF+Fnr9xh14yfxV6VsYdesn8Vei5FnfoJfNXoWdQ3KGXzF+Fnhdxh14yfxV6tsMdesn8Veg5DHfoJfNXoWcm3KGXzF+Fnm9wh14yf7WQ+avQUynu0EvmrxYyf7UYmV4yfxV67scdesn8VegZHXfoJfNXoedp3KGXzF+Fnn1xh14yfxV6TsUdesn8VeiZEnfoJfNXoec/3KGXzF+FntVwh14yfxV6rsIdesn8VegZCHfoJfNXoecV3KGXzF+Fni1wh14yfxV6DsAdesn8VejO/jv0kvmr0P36d+gl81ehu/Dv0Evmr0L31t+hl8xfhe6Yv0Mvmb8K3Qd/h14yfxW6u/0OvWT+iqy/fSfrb9/J+tt3sv72nay/fSfrb9/J+tt3sv72nay/fSfrb9/J+tt3sv72nay/fSfrb9/J+tt3sv72nay/fSfrb9/J+tt3sv72nay/fSfrb9/J+tt3sv72g6y//SDrbz/I+tsPsv72YzIyvVz+6iDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+tsPsv72g6y//SDrbz/I+ttPsv72k6y//STrbz/J+tvPycj0cvmrk6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y//STrbz/J+ttPsv72k6y/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" }], "outputs": { "globals": {}, "structs": { "functions": [{ "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" } }], "kind": "struct", "path": "authwit::entrypoint::function_call::FunctionCall" } } }, { "name": "nonce", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::entrypoint::app::AppPayload" } }], "kind": "struct", "path": "MultiCallEntrypoint::entrypoint_parameters" } }], "kind": "struct", "path": "MultiCallEntrypoint::entrypoint_abi" }] } }, "file_map": { "102": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr", "source": "use dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, public_call_stack_item::PublicCallStackItem,\n function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_context::CallContext, read_request::ReadRequest, note_hash::NoteHash, nullifier::Nullifier,\n side_effect::SideEffect, global_variables::GlobalVariables, gas::Gas\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n messaging::l2_to_l1_message::L2ToL1Message, header::Header, address::AztecAddress,\n utils::reader::Reader,\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH\n}\n};\n\n#[oracle(enqueuePublicFunctionCall)]\nfn 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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\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)]\nfn 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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\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\npub fn parse_public_call_stack_item_from_oracle(fields: [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH]) -> PublicCallStackItem {\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: 0,\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0,\n end_side_effect_counter: 0,\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0\n },\n is_execution_request: true\n };\n reader.finish();\n\n item\n}\n" }, "130": { "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\n},\n traits::Hash, hash::{pedersen_hash, poseidon2_hash, silo_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_encrypted_log_hash<N, M, L>(\n encrypted_log: [Field; M]\n) -> Field where [Field; N]: LensForEncryptedLog<N, M, L> {\n let mut bytes = [0; L];\n // Note that bytes.append(encrypted_log[i].to_be_bytes(31)) results in bound error\n for i in 0..M-1 {\n let to_add = encrypted_log[i].to_be_bytes(31);\n for j in 0..31 {\n bytes[i*31 + j] = to_add[j];\n }\n }\n // can't assign as L - not in scope error for: L-31*(M-1)\n let num_bytes = bytes.len() as u32 - 31*(M-1);\n let to_add_final = encrypted_log[M-1].to_be_bytes(num_bytes);\n for j in 0..num_bytes {\n bytes[(M-1)*31 + j] = to_add_final[j];\n }\n sha256_to_field(bytes)\n}\n\npub fn compute_unencrypted_log_hash<T, N, M>(\n contract_address: AztecAddress,\n event_selector: Field,\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 event_bytes = event_selector.to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[32 + i] = event_bytes[i];\n }\n let len_bytes = (n as Field).to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[36 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[40 + 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 = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\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 pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub fn compute_siloed_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n silo_nullifier(address, nullifier)\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<N>(&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<N>(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() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH);\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] = pedersen_hash(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] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(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..800 {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x05a1023fef839ac88731f49ae983e172c1b600a3c8f3393ad0ac25d819ac0f0f);\n}\n\n#[test]\nfn compute_enc_log_hash_304() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x0021a0d4aa9989656b592187cf6da1965df53ab2ff2277421e663465cf20d3e9,\n 0x00c3969cc350f3474f8187a33ac1317181961f5f94043b07ce888d85a5d20cb5,\n 0x0058198041ed1547b056955b5141a5a8a1551b0c8d094255ec9daaf3604d9348,\n 0x00247ad96df2e4d984cf795ed7316234743a681f824a45c46253de8bfde48850,\n 0x007fc251f4ce44f4e9aba3dbf6567228be28fac85660156f2825ddb0b0577457,\n 0x009315851323c6bc2aaa42e23fe5f3be97208f2d8167eafdfc5742d94f2f4dd4,\n 0x00b938289e563b0fe01982cd9b8d9e33e3069046768ad01c0fb05e429e7b7909,\n 0x00fbcc257a3211f705b471eee763b0f43876a2b2178fab6d2b09bd2b7e086584,\n 0x000000000000008c3289b5793b7448f4d45ecde039d004b6f037cad10b5c2336\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x001e3c013994947fe28957a876bf1b2c3a69ac69cc92909efd4f2ae9b972f893);\n}\n\n#[test]\nfn compute_enc_log_hash_368() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x002190697d2a50e229a7a077e0951073f7d51e46679f10466153c308b63b1ea9,\n 0x00543e346facc6799b94514c9d461bcc836c04b083b13c2e4544a39130473c1e,\n 0x000df76d59526f8f953bcc7d9f77cdaefd36435931f0d7348f794bc275b42ded,\n 0x00a6d390ee1723af7f7ac1ae4fc81a266b2370fe07040a36d06dbe242e02413e,\n 0x00acbce15b6af1fbe94bd0f7b70f11768265dff77bfe63398f2a053efdfdf26d,\n 0x00b8b131b9f42c689beb095ba4f4a836d4d15c9068d0422e9add6ca82b786329,\n 0x00661a6a654b38f0f97d404ef5553e0efea9ed670561ae86685b31bbb2824fac,\n 0x00113a6b58edfaec0065b365f66ba8d8aa68254b8690035e8d671a17a843f0a1,\n 0x0023f2d2eae8c4449bac8f268a3e62a3faace1fe1401f0efdc8b0ccfbc8fb271,\n 0x00cf6603f8c61993dd2f662c719671c61727a2f4e925fb988b23d31feccd77d9,\n 0x0000000000a402a84b7294671799c38dd805f6a827a3a12633fdf91a57debe1f\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x00a0d651ac0cbc01b72430fa6a05d91738595af6e0229347b4c9968223387aeb);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00846d6969c8c2f61d39cd2762efcb0abb14f88d59c2675910251ef2bcffe9a7);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00880a801230ea08c98a802a11b4786cba474513875f0fc69a615e81c5f9f21c);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00a78b5347813624ecfd26e5b8bc6146f418b0cfcc8296b5112d09b8ebba9496);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x001f3390ea242afee7ce46dafdbdc4bd4f1cf20cd63850d12d60ff9956712c4f);\n}\n" }, "135": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr", "source": "use crate::{\n abis::append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n constants::{PARTIAL_STATE_REFERENCE_LENGTH, STATE_REFERENCE_LENGTH},\n partial_state_reference::PartialStateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice\n};\n\nstruct StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot,\n partial: PartialStateReference,\n}\n\nimpl Eq for StateReference {\n fn eq(self, other: StateReference) -> bool {\n self.l1_to_l2_message_tree.eq(other.l1_to_l2_message_tree) &\n self.partial.eq(other.partial)\n }\n}\n\nimpl Serialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn serialize(self) -> [Field; STATE_REFERENCE_LENGTH] {\n let mut fields: BoundedVec<Field, STATE_REFERENCE_LENGTH> = BoundedVec::new();\n\n fields.extend_from_array(self.l1_to_l2_message_tree.serialize());\n fields.extend_from_array(self.partial.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn deserialize(serialized: [Field; STATE_REFERENCE_LENGTH]) -> StateReference {\n let mut offset = 0;\n\n let l1_to_l2_message_tree_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let partial_fields = arr_copy_slice(serialized, [0; PARTIAL_STATE_REFERENCE_LENGTH], offset);\n\n StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::deserialize(l1_to_l2_message_tree_fields),\n partial: PartialStateReference::deserialize(partial_fields),\n }\n }\n}\n\nimpl Empty for StateReference {\n fn empty() -> Self {\n Self {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::zero(),\n partial: PartialStateReference::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let state = StateReference::empty();\n let _serialized = state.serialize();\n let _deserialized = StateReference::deserialize(_serialized);\n}\n" }, "152": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr", "source": "use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, 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(\n [pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1]\n )\n )\n }\n\n pub fn compute_from_public_keys_and_partial_address(\n nullifier_public_key: GrumpkinPoint,\n incoming_public_key: GrumpkinPoint,\n outgoing_public_key: GrumpkinPoint,\n tagging_public_key: GrumpkinPoint,\n partial_address: PartialAddress,\n ) -> AztecAddress {\n let public_keys_hash = PublicKeysHash::compute_new(\n nullifier_public_key,\n incoming_public_key,\n outgoing_public_key,\n tagging_public_key,\n );\n\n let computed_address = AztecAddress::compute(public_keys_hash, partial_address);\n\n computed_address\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_pubkey() {\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 = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\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" }, "155": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr", "source": "use crate::{\n constants::ETH_ADDRESS_LENGTH, hash::pedersen_hash,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_LENGTH] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n EthAddress::from_field(fields[0])\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n field.assert_max_bit_size(160);\n Self { inner: field }\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" }, "156": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr", "source": "use crate::{\n constants::{GENERATOR_INDEX__TX_CONTEXT, TX_CONTEXT_LENGTH}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader,\n abis::gas_settings::GasSettings\n};\n\n// docs:start:tx-context\nstruct TxContext {\n chain_id : Field,\n version : Field,\n gas_settings: GasSettings,\n}\n// docs:end:tx-context\n\nimpl TxContext {\n pub fn new(chain_id: Field, version: Field, gas_settings: GasSettings) -> Self {\n TxContext { chain_id, version, gas_settings }\n }\n}\n\nimpl Eq for TxContext {\n fn eq(self, other: Self) -> bool {\n (self.chain_id == other.chain_id) &\n (self.version == other.version) &\n (self.gas_settings.eq(other.gas_settings))\n }\n}\n\nimpl Empty for TxContext {\n fn empty() -> Self {\n TxContext {\n chain_id: 0,\n version: 0,\n gas_settings: GasSettings::empty(),\n }\n }\n}\n\nimpl Serialize<TX_CONTEXT_LENGTH> for TxContext {\n fn serialize(self) -> [Field; TX_CONTEXT_LENGTH] {\n let mut fields: BoundedVec<Field, TX_CONTEXT_LENGTH> = BoundedVec::new();\n\n fields.push(self.chain_id);\n fields.push(self.version);\n fields.extend_from_array(self.gas_settings.serialize());\n\n assert_eq(fields.len(), TX_CONTEXT_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<TX_CONTEXT_LENGTH> for TxContext {\n fn deserialize(serialized: [Field; TX_CONTEXT_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n\n let context = Self {\n chain_id: reader.read(),\n version: reader.read(),\n gas_settings: reader.read_struct(GasSettings::deserialize),\n };\n\n reader.finish();\n context\n }\n}\n\nimpl Hash for TxContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__TX_CONTEXT)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let context = TxContext::empty();\n let serialized = context.serialize();\n let deserialized = TxContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let context = TxContext::empty();\n let hash = context.hash();\n\n // Value from tx_context.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x17e4357684c5a4349b4587c95b0b6161dcb4a3c5b02d4eb2ecc3b02c80193261;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "160": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr", "source": "use crate::{\n abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot, constants::PARTIAL_STATE_REFERENCE_LENGTH,\n traits::{Deserialize, Empty, Hash, Serialize}\n};\n\nstruct PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot,\n nullifier_tree: AppendOnlyTreeSnapshot,\n public_data_tree: AppendOnlyTreeSnapshot,\n}\n\nimpl Eq for PartialStateReference {\n fn eq(self, other: PartialStateReference) -> bool {\n self.note_hash_tree.eq(other.note_hash_tree) &\n self.nullifier_tree.eq(other.nullifier_tree) &\n self.public_data_tree.eq(other.public_data_tree)\n }\n}\n\nimpl Serialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn serialize(self) -> [Field; PARTIAL_STATE_REFERENCE_LENGTH] {\n let serialized_note_hash_tree = self.note_hash_tree.serialize();\n let serialized_nullifier_tree = self.nullifier_tree.serialize();\n let serialized_public_data_tree = self.public_data_tree.serialize();\n\n [\n serialized_note_hash_tree[0], \n serialized_note_hash_tree[1],\n serialized_nullifier_tree[0],\n serialized_nullifier_tree[1],\n serialized_public_data_tree[0],\n serialized_public_data_tree[1],\n ]\n }\n}\n\nimpl Deserialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn deserialize(serialized: [Field; PARTIAL_STATE_REFERENCE_LENGTH]) -> PartialStateReference {\n PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[0], serialized[1]]\n ),\n nullifier_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[2], serialized[3]]\n ),\n public_data_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[4], serialized[5]]\n ),\n }\n }\n}\n\nimpl Empty for PartialStateReference {\n fn empty() -> Self {\n Self {\n note_hash_tree: AppendOnlyTreeSnapshot::zero(),\n nullifier_tree: AppendOnlyTreeSnapshot::zero(),\n public_data_tree: AppendOnlyTreeSnapshot::zero(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let partial = PartialStateReference::empty();\n let _serialized = partial.serialize();\n let _deserialized = PartialStateReference::deserialize(_serialized);\n}\n" }, "163": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr", "source": "use dep::std::cmp::Eq;\nuse 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, N>(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<N> 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<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> 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<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n" }, "164": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/header.nr", "source": "use crate::{\n abis::{\n append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n global_variables::{GlobalVariables, GLOBAL_VARIABLES_LENGTH}\n},\n constants::{GENERATOR_INDEX__BLOCK_HASH, HEADER_LENGTH, STATE_REFERENCE_LENGTH, CONTENT_COMMITMENT_LENGTH},\n hash::pedersen_hash, state_reference::StateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice, content_commitment::ContentCommitment\n};\n\n// docs:start:header\nstruct Header {\n last_archive: AppendOnlyTreeSnapshot,\n content_commitment: ContentCommitment,\n state: StateReference,\n global_variables: GlobalVariables,\n}\n// docs:end:header\n\nimpl Eq for Header {\n fn eq(self, other: Self) -> bool {\n self.last_archive.eq(other.last_archive) &\n self.content_commitment.eq(other.content_commitment) &\n self.state.eq(other.state) &\n self.global_variables.eq(other.global_variables)\n }\n}\n\nimpl Serialize<HEADER_LENGTH> for Header {\n fn serialize(self) -> [Field; HEADER_LENGTH] {\n let mut fields: BoundedVec<Field, HEADER_LENGTH> = BoundedVec::new();\n\n fields.extend_from_array(self.last_archive.serialize());\n fields.extend_from_array(self.content_commitment.serialize());\n fields.extend_from_array(self.state.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<HEADER_LENGTH> for Header {\n fn deserialize(serialized: [Field; HEADER_LENGTH]) -> Self {\n let mut offset = 0;\n\n let last_archive_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let content_commitment_fields = arr_copy_slice(serialized, [0; CONTENT_COMMITMENT_LENGTH], offset);\n offset = offset + CONTENT_COMMITMENT_LENGTH;\n\n let state_fields = arr_copy_slice(serialized, [0; STATE_REFERENCE_LENGTH], offset);\n offset = offset + STATE_REFERENCE_LENGTH;\n\n let global_variables_fields = arr_copy_slice(serialized, [0; GLOBAL_VARIABLES_LENGTH], offset);\n\n Header {\n last_archive: AppendOnlyTreeSnapshot::deserialize(last_archive_fields),\n content_commitment: ContentCommitment::deserialize(content_commitment_fields),\n state: StateReference::deserialize(state_fields),\n global_variables: GlobalVariables::deserialize(global_variables_fields),\n }\n }\n}\n\nimpl Empty for Header {\n fn empty() -> Self {\n Self {\n last_archive: AppendOnlyTreeSnapshot::zero(),\n content_commitment: ContentCommitment::empty(),\n state: StateReference::empty(),\n global_variables: GlobalVariables::empty(),\n }\n }\n}\n\nimpl Hash for Header {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__BLOCK_HASH)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let header = Header::empty();\n let serialized = header.serialize();\n let deserialized = Header::deserialize(serialized);\n assert(header.eq(deserialized));\n}\n\n#[test]\nfn hash_smoke() {\n let header = Header::empty();\n let _hashed = header.hash();\n}\n\n#[test]\nfn empty_hash_is_zero() {\n let header = Header::empty();\n let hash = header.hash();\n\n // Value from new_contract_data.test.ts \"computes empty hash\" test\n let test_data_empty_hash = 0x2b2525fb1ae91c903827b8055b9ffaf8444ddf4c2b4dce4a79a3cba426bfbd73;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "167": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr", "source": "struct Reader<N> {\n data: [Field; N],\n offset: u64,\n}\n\nimpl<N> 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_array<K>(&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, K>(&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, K, C>(&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" }, "183": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{GAS_LENGTH, FIXED_DA_GAS}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered, utils::reader::Reader,\n abis::gas_fees::GasFees\n};\nuse dep::std::ops::{Add, Sub};\n\nstruct Gas {\n da_gas: u32,\n l2_gas: u32,\n}\n\nimpl Gas {\n pub fn new(da_gas: u32, l2_gas: u32) -> Self {\n Self { da_gas, l2_gas }\n }\n\n pub fn tx_overhead() -> Self {\n Self { da_gas: FIXED_DA_GAS, l2_gas: 0 }\n }\n\n pub fn compute_fee(self, fees: GasFees) -> Field {\n (self.da_gas as Field) * fees.fee_per_da_gas + (self.l2_gas as Field) * fees.fee_per_l2_gas\n }\n\n pub fn is_empty(self) -> bool {\n (self.da_gas == 0) & (self.l2_gas == 0)\n }\n\n pub fn within(self, limits: Gas) -> bool {\n (self.da_gas <= limits.da_gas) & (self.l2_gas <= limits.l2_gas)\n }\n}\n\nimpl Add for Gas {\n fn add(self, other: Gas) -> Self {\n Gas::new(self.da_gas + other.da_gas, self.l2_gas + other.l2_gas)\n }\n}\n\nimpl Sub for Gas {\n fn sub(self, other: Gas) -> Self {\n Gas::new(self.da_gas - other.da_gas, self.l2_gas - other.l2_gas)\n }\n}\n\nimpl Serialize<GAS_LENGTH> for Gas {\n fn serialize(self) -> [Field; GAS_LENGTH] {\n [self.da_gas as Field, self.l2_gas as Field]\n }\n}\n\nimpl Deserialize<GAS_LENGTH> for Gas {\n fn deserialize(serialized: [Field; GAS_LENGTH]) -> Gas {\n Gas::new(serialized[0] as u32, serialized[1] as u32)\n }\n}\n\nimpl Eq for Gas {\n fn eq(self, other : Gas) -> bool {\n (self.da_gas == other.da_gas) & (self.l2_gas == other.l2_gas)\n }\n}\n\nimpl Empty for Gas {\n fn empty() -> Self {\n Gas::new(0, 0)\n }\n}\n\n" }, "185": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr", "source": "use crate::{\n abis::{side_effect::{Ordered, OrderedValue, Readable}, read_request::ReadRequestContext},\n address::AztecAddress, constants::NULLIFIER_LENGTH, hash::silo_nullifier,\n traits::{Empty, Hash, Serialize, Deserialize}\n};\n\nstruct Nullifier {\n value: Field,\n counter: u32,\n note_hash: Field,\n}\n\nimpl Ordered for Nullifier {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl OrderedValue<Field> for Nullifier {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for Nullifier {\n fn eq(self, other: Nullifier) -> bool {\n (self.value == other.value)\n & (self.counter == other.counter)\n & (self.note_hash == other.note_hash) \n }\n}\n\nimpl Empty for Nullifier {\n fn empty() -> Self {\n Nullifier {\n value: 0,\n counter: 0,\n note_hash: 0,\n }\n }\n}\n\nimpl Serialize<NULLIFIER_LENGTH> for Nullifier {\n fn serialize(self) -> [Field; NULLIFIER_LENGTH] {\n [self.value, self.counter as Field, self.note_hash]\n }\n}\n\nimpl Deserialize<NULLIFIER_LENGTH> for Nullifier {\n fn deserialize(values: [Field; NULLIFIER_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n note_hash: values[2],\n }\n }\n}\n\nimpl Readable for Nullifier {\n fn assert_match_read_request(self, read_request: ReadRequestContext) {\n let siloed_value = silo_nullifier(read_request.contract_address, read_request.value);\n assert_eq(self.value, siloed_value, \"Value of the nullifier does not match read request\");\n assert(\n read_request.counter > self.counter, \"Read request counter must be greater than the counter of the nullifier\"\n );\n }\n}\n" }, "188": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr", "source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n" }, "195": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr", "source": "use crate::{\n abis::{function_data::FunctionData, private_circuit_public_inputs::PrivateCircuitPublicInputs},\n address::AztecAddress,\n constants::{GENERATOR_INDEX__CALL_STACK_ITEM, PRIVATE_CALL_STACK_ITEM_LENGTH}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader\n};\n\nstruct PrivateCallStackItem {\n // This is the _actual_ contract address relating to where this function's code resides in the\n // contract tree. Regardless of whether this is a call or delegatecall, this\n // `contract_address` _does not change_. Amongst other things, it's used as a lookup for\n // getting the correct code from the tree. There is a separate `storage_contract_address`\n // within a CallStackItem which varies depending on whether this is a call or delegatecall.\n contract_address: AztecAddress,\n function_data: FunctionData,\n public_inputs: PrivateCircuitPublicInputs,\n}\n\nimpl Eq for PrivateCallStackItem {\n fn eq(self, other: Self) -> bool {\n self.contract_address.eq(other.contract_address) &\n self.function_data.eq(other.function_data) &\n self.public_inputs.eq(other.public_inputs)\n }\n}\n\nimpl Serialize<PRIVATE_CALL_STACK_ITEM_LENGTH> for PrivateCallStackItem {\n fn serialize(self) -> [Field; PRIVATE_CALL_STACK_ITEM_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CALL_STACK_ITEM_LENGTH> = BoundedVec::new();\n\n fields.push(self.contract_address.to_field());\n fields.extend_from_array(self.function_data.serialize());\n fields.extend_from_array(self.public_inputs.serialize());\n\n assert_eq(fields.len(), PRIVATE_CALL_STACK_ITEM_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<PRIVATE_CALL_STACK_ITEM_LENGTH> for PrivateCallStackItem {\n fn deserialize(serialized: [Field; PRIVATE_CALL_STACK_ITEM_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n\n let item = Self {\n contract_address: reader.read_struct(AztecAddress::deserialize),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: reader.read_struct(PrivateCircuitPublicInputs::deserialize),\n };\n\n reader.finish();\n item\n }\n}\n\nimpl Hash for PrivateCallStackItem {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl Empty for PrivateCallStackItem {\n fn empty() -> Self {\n PrivateCallStackItem {\n contract_address: AztecAddress::empty(),\n function_data: FunctionData::empty(),\n public_inputs: PrivateCircuitPublicInputs::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = PrivateCallStackItem::empty();\n let serialized = item.serialize();\n let deserialized = PrivateCallStackItem::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let mut item = PrivateCallStackItem::empty();\n item.function_data.is_private = true;\n let hash = item.hash();\n\n // Value from private_call_stack_item.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x2485b8cfe671417410382ba6dfc803de70d9d45008a1b30c31b34d7c4de92106;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "197": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr", "source": "use dep::std::cmp::Eq;\nuse crate::{\n address::{AztecAddress, EthAddress}, abis::gas_fees::GasFees,\n constants::{GENERATOR_INDEX__GLOBAL_VARIABLES, GLOBAL_VARIABLES_LENGTH},\n traits::{Deserialize, Empty, Hash, Serialize}, utils::reader::Reader\n};\n\n// docs:start:global-variables\nstruct GlobalVariables {\n chain_id : Field,\n version : Field,\n block_number : Field,\n timestamp : u64,\n coinbase : EthAddress,\n fee_recipient : AztecAddress,\n gas_fees : GasFees\n}\n// docs:end:global-variables\n\nimpl GlobalVariables {\n fn is_empty(self) -> bool {\n (self.chain_id == 0)\n & (self.version == 0)\n & (self.block_number == 0)\n & (self.timestamp == 0)\n & (self.coinbase.is_zero())\n & (self.fee_recipient.is_zero())\n & (self.gas_fees.is_empty())\n }\n}\n\nimpl Serialize<GLOBAL_VARIABLES_LENGTH> for GlobalVariables {\n fn serialize(self) -> [Field; GLOBAL_VARIABLES_LENGTH] {\n let mut serialized: BoundedVec<Field, GLOBAL_VARIABLES_LENGTH> = BoundedVec::new();\n\n serialized.push(self.chain_id);\n serialized.push(self.version);\n serialized.push(self.block_number);\n serialized.push(self.timestamp as Field);\n serialized.push(self.coinbase.to_field());\n serialized.push(self.fee_recipient.to_field());\n serialized.extend_from_array(self.gas_fees.serialize());\n\n serialized.storage\n }\n}\n\nimpl Deserialize<GLOBAL_VARIABLES_LENGTH> for GlobalVariables {\n fn deserialize(serialized: [Field; GLOBAL_VARIABLES_LENGTH]) -> GlobalVariables {\n let mut reader = Reader::new(serialized);\n GlobalVariables {\n chain_id: reader.read(),\n version: reader.read(),\n block_number: reader.read(),\n timestamp: reader.read() as u64,\n coinbase: EthAddress::from_field(reader.read()),\n fee_recipient: AztecAddress::from_field(reader.read()),\n gas_fees: reader.read_struct(GasFees::deserialize)\n }\n }\n}\n\nimpl Eq for GlobalVariables {\n fn eq(self, other : GlobalVariables) -> bool {\n (self.chain_id == other.chain_id) &\n (self.version == other.version) &\n (self.block_number == other.block_number) &\n (self.timestamp == other.timestamp) &\n (self.coinbase == other.coinbase) &\n (self.fee_recipient == other.fee_recipient) &\n (self.gas_fees == other.gas_fees) \n }\n}\n\nimpl Empty for GlobalVariables {\n fn empty() -> Self {\n Self {\n chain_id: 0,\n version: 0,\n block_number: 0,\n timestamp: 0,\n coinbase: EthAddress::empty(),\n fee_recipient: AztecAddress::empty(),\n gas_fees: GasFees::empty()\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let vars = GlobalVariables::empty();\n let _serialized = vars.serialize();\n let _deserialized = GlobalVariables::deserialize(_serialized);\n}\n" }, "198": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_key_validation_request.nr", "source": "use dep::std::cmp::Eq;\nuse crate::{\n address::AztecAddress,\n constants::{NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH, NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH},\n traits::{Empty, Serialize, Deserialize}, grumpkin_point::GrumpkinPoint,\n};\n\nstruct NullifierKeyValidationRequest {\n master_nullifier_public_key: GrumpkinPoint,\n app_nullifier_secret_key: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for NullifierKeyValidationRequest {\n fn eq(self, request: NullifierKeyValidationRequest) -> bool {\n (request.master_nullifier_public_key.eq(self.master_nullifier_public_key))\n & (request.app_nullifier_secret_key.eq(self.app_nullifier_secret_key))\n }\n}\n\nimpl Empty for NullifierKeyValidationRequest {\n fn empty() -> Self {\n NullifierKeyValidationRequest {\n master_nullifier_public_key: GrumpkinPoint::zero(),\n app_nullifier_secret_key: 0,\n }\n }\n}\n\nimpl Serialize<NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for NullifierKeyValidationRequest {\n fn serialize(self) -> [Field; NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.master_nullifier_public_key.x,\n self.master_nullifier_public_key.y,\n self.app_nullifier_secret_key,\n ]\n }\n}\n\nimpl Deserialize<NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for NullifierKeyValidationRequest {\n fn deserialize(fields: [Field; NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n master_nullifier_public_key: GrumpkinPoint::new(fields[0], fields[1]),\n app_nullifier_secret_key: fields[2],\n }\n }\n}\n\nimpl NullifierKeyValidationRequest {\n pub fn to_context(self, contract_address: AztecAddress) -> NullifierKeyValidationRequestContext {\n NullifierKeyValidationRequestContext {\n master_nullifier_public_key: self.master_nullifier_public_key,\n app_nullifier_secret_key: self.app_nullifier_secret_key,\n contract_address\n }\n }\n}\n\nstruct NullifierKeyValidationRequestContext {\n master_nullifier_public_key: GrumpkinPoint,\n app_nullifier_secret_key: Field,\n contract_address: AztecAddress,\n}\n\nimpl Eq for NullifierKeyValidationRequestContext {\n fn eq(self, request: NullifierKeyValidationRequestContext) -> bool {\n (request.master_nullifier_public_key.eq(self.master_nullifier_public_key))\n & (request.app_nullifier_secret_key.eq(self.app_nullifier_secret_key))\n & (request.contract_address.eq(self.contract_address))\n }\n}\n\nimpl Empty for NullifierKeyValidationRequestContext {\n fn empty() -> Self {\n NullifierKeyValidationRequestContext {\n master_nullifier_public_key: GrumpkinPoint::zero(),\n app_nullifier_secret_key: 0,\n contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl Serialize<NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH> for NullifierKeyValidationRequestContext {\n fn serialize(self) -> [Field; NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH] {\n [\n self.master_nullifier_public_key.x,\n self.master_nullifier_public_key.y,\n self.app_nullifier_secret_key,\n self.contract_address.to_field(),\n ]\n }\n}\n\nimpl Deserialize<NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH> for NullifierKeyValidationRequestContext {\n fn deserialize(fields: [Field; NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH]) -> Self {\n Self {\n master_nullifier_public_key: GrumpkinPoint::new(fields[0], fields[1]),\n app_nullifier_secret_key: fields[2],\n contract_address: AztecAddress::from_field(fields[3]),\n }\n }\n}\n\n" }, "203": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::GAS_FEES_LENGTH, hash::pedersen_hash, traits::{Deserialize, Hash, Serialize, Empty},\n abis::side_effect::Ordered, utils::reader::Reader\n};\n\nstruct GasFees {\n fee_per_da_gas: Field,\n fee_per_l2_gas: Field,\n}\n\nimpl GasFees {\n pub fn new(fee_per_da_gas: Field, fee_per_l2_gas: Field) -> Self {\n Self { fee_per_da_gas, fee_per_l2_gas }\n }\n\n pub fn default() -> Self {\n GasFees::new(1, 1)\n }\n\n pub fn is_empty(self) -> bool {\n (self.fee_per_da_gas == 0) & (self.fee_per_l2_gas == 0)\n }\n}\n\nimpl Serialize<GAS_FEES_LENGTH> for GasFees {\n fn serialize(self) -> [Field; GAS_FEES_LENGTH] {\n [self.fee_per_da_gas, self.fee_per_l2_gas]\n }\n}\n\nimpl Deserialize<GAS_FEES_LENGTH> for GasFees {\n fn deserialize(serialized: [Field; GAS_FEES_LENGTH]) -> GasFees {\n GasFees::new(serialized[0], serialized[1])\n }\n}\n\nimpl Eq for GasFees {\n fn eq(self, other : GasFees) -> bool {\n (self.fee_per_da_gas == other.fee_per_da_gas) & (self.fee_per_l2_gas == other.fee_per_l2_gas)\n }\n}\n\nimpl Empty for GasFees {\n fn empty() -> Self {\n GasFees::new(0, 0)\n }\n}\n" }, "209": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr", "source": "use crate::{\n abis::{\n call_context::CallContext, note_hash::NoteHash, nullifier::Nullifier, read_request::ReadRequest,\n side_effect::SideEffect, gas::Gas, global_variables::GlobalVariables\n},\n address::AztecAddress,\n constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n hash::pedersen_hash, header::Header, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{Hash, Serialize, Deserialize, Empty}, utils::reader::Reader\n};\n\nstruct PublicCircuitPublicInputs {\n call_context: CallContext,\n\n args_hash: Field,\n returns_hash: Field,\n\n nullifier_read_requests: [ReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest; MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash; MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n start_side_effect_counter: u32,\n end_side_effect_counter: u32,\n\n unencrypted_logs_hashes: [SideEffect; MAX_UNENCRYPTED_LOGS_PER_CALL],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n\n // Global variables injected into this circuit\n global_variables: GlobalVariables,\n\n prover_address: AztecAddress,\n\n revert_code: u8,\n \n start_gas_left: Gas,\n end_gas_left: Gas,\n transaction_fee: Field,\n}\n\nimpl Eq for PublicCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Serialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new();\n fields.extend_from_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push(self.returns_hash);\n for i in 0..MAX_NULLIFIER_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_read_requests[i].serialize());\n }\n for i in 0..MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_non_existent_read_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.extend_from_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.extend_from_array(self.contract_storage_reads[i].serialize());\n }\n fields.extend_from_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_NOTE_HASHES_PER_CALL {\n fields.extend_from_array(self.new_note_hashes[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL {\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL {\n fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize());\n }\n\n fields.push(self.start_side_effect_counter as Field);\n fields.push(self.end_side_effect_counter as Field);\n\n for i in 0..MAX_UNENCRYPTED_LOGS_PER_CALL{\n fields.extend_from_array(self.unencrypted_logs_hashes[i].serialize());\n }\n fields.push(self.unencrypted_log_preimages_length);\n fields.extend_from_array(self.historical_header.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n fields.push(self.prover_address.to_field());\n fields.push(self.revert_code as Field);\n fields.extend_from_array(self.start_gas_left.serialize());\n fields.extend_from_array(self.end_gas_left.serialize());\n fields.push(self.transaction_fee);\n fields.storage\n }\n}\n\nimpl Deserialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn deserialize(serialized: [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: reader.read(),\n nullifier_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL]),\n nullifier_non_existent_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL]),\n contract_storage_update_requests: reader.read_struct_array(StorageUpdateRequest::deserialize, [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL]),\n contract_storage_reads: reader.read_struct_array(StorageRead::deserialize, [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_note_hashes: reader.read_struct_array(NoteHash::deserialize, [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]),\n new_nullifiers: reader.read_struct_array(Nullifier::deserialize, [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n start_side_effect_counter: reader.read() as u32,\n end_side_effect_counter: reader.read() as u32,\n unencrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL]),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n global_variables: reader.read_struct(GlobalVariables::deserialize),\n prover_address: reader.read_struct(AztecAddress::deserialize),\n revert_code: reader.read() as u8,\n start_gas_left: reader.read_struct(Gas::deserialize),\n end_gas_left: reader.read_struct(Gas::deserialize),\n transaction_fee: reader.read(),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PublicCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl Empty for PublicCircuitPublicInputs {\n fn empty() -> Self {\n PublicCircuitPublicInputs {\n call_context: CallContext::empty(),\n args_hash: 0,\n returns_hash: 0,\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0 as u32,\n end_side_effect_counter: 0 as u32,\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0 as u8,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi = PublicCircuitPublicInputs::empty();\n let serialized = pcpi.serialize();\n let deserialized = PublicCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let inputs = PublicCircuitPublicInputs::empty();\n let hash = inputs.hash();\n\n // Value from public_circuit_public_inputs.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x1a2da219bb2e3ac24519fd844365c4f656fc3ba8c58f2960706d25bceb4d1769;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "211": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{CALL_CONTEXT_LENGTH, GENERATOR_INDEX__CALL_CONTEXT}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered,\n abis::{gas_settings::GasSettings, gas::Gas}, utils::reader::Reader\n};\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n\n side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl CallContext {\n fn assert_is_zero(self) {\n let serialized: [Field; CALL_CONTEXT_LENGTH] = self.serialize();\n\n for i in 0..CALL_CONTEXT_LENGTH {\n assert(serialized[i] == 0);\n }\n }\n}\n\nimpl Eq for CallContext {\n fn eq(self, other: CallContext) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl Serialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n let mut serialized: BoundedVec<Field, CALL_CONTEXT_LENGTH> = BoundedVec::new();\n\n serialized.push(self.msg_sender.to_field());\n serialized.push(self.storage_contract_address.to_field());\n serialized.push(self.function_selector.to_field());\n serialized.push(self.is_delegate_call as Field);\n serialized.push(self.is_static_call as Field);\n serialized.push(self.side_effect_counter as Field);\n \n serialized.storage\n }\n}\n\nimpl Deserialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn deserialize(serialized: [Field; CALL_CONTEXT_LENGTH]) -> CallContext {\n let mut reader = Reader::new(serialized);\n CallContext {\n msg_sender: AztecAddress::from_field(reader.read()),\n storage_contract_address: AztecAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()),\n is_delegate_call: reader.read() as bool,\n is_static_call: reader.read() as bool,\n side_effect_counter: reader.read() as u32,\n }\n }\n}\n\nimpl Empty for CallContext {\n fn empty() -> Self {\n CallContext {\n msg_sender: AztecAddress::empty(),\n storage_contract_address: AztecAddress::empty(),\n function_selector: FunctionSelector::empty(),\n is_delegate_call: false,\n is_static_call: false,\n side_effect_counter: 0,\n }\n }\n}\n\n#[test]\nfn serialize_deserialize_of_empty() {\n let context = CallContext::empty();\n let serialized = context.serialize();\n let deserialized = CallContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn assert_is_zero() {\n let context = CallContext::empty();\n context.assert_is_zero();\n}\n\n#[test(should_fail)]\nfn not_zero_assert_is_zero() {\n let mut context = CallContext::empty();\n context.is_delegate_call = true;\n context.assert_is_zero();\n}\n\n#[test]\nfn test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = true;\n\n let address: AztecAddress = AztecAddress::from_field(69420);\n context1.msg_sender = address;\n context2.msg_sender = address;\n\n assert(context1.eq(context2));\n}\n\n#[test(should_fail)]\nfn not_eq_test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = false;\n\n let address1: AztecAddress = AztecAddress::from_field(69420);\n let address2: AztecAddress = AztecAddress::from_field(42069);\n\n context1.msg_sender = address1;\n context2.msg_sender = address2;\n\n assert(context1.eq(context2));\n}\n\n#[test]\nfn hash_smoke() {\n let context = CallContext::empty();\n let _hashed = context.hash();\n}\n" }, "213": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr", "source": "use crate::{\n abis::read_request::ReadRequestContext, address::AztecAddress,\n abis::side_effect::{Ordered, OrderedValue, Readable},\n constants::{NOTE_HASH_LENGTH, NOTE_HASH_CONTEXT_LENGTH}, hash::silo_note_hash,\n traits::{Empty, Serialize, Deserialize}\n};\nuse dep::std::cmp::Eq;\n\nstruct NoteHash {\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for NoteHash {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl OrderedValue<Field> for NoteHash {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for NoteHash {\n fn eq(self, other: NoteHash) -> bool {\n (self.value == other.value)\n & (self.counter == other.counter) \n }\n}\n\nimpl Empty for NoteHash {\n fn empty() -> Self {\n NoteHash {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Serialize<NOTE_HASH_LENGTH> for NoteHash {\n fn serialize(self) -> [Field; NOTE_HASH_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<NOTE_HASH_LENGTH> for NoteHash {\n fn deserialize(values: [Field; NOTE_HASH_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nimpl NoteHash {\n pub fn to_context(self, nullifier_counter: u32) -> NoteHashContext {\n NoteHashContext { value: self.value, counter: self.counter, nullifier_counter }\n }\n}\n\nstruct NoteHashContext {\n value: Field,\n counter: u32,\n nullifier_counter: u32,\n}\n\nimpl Ordered for NoteHashContext {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl OrderedValue<Field> for NoteHashContext {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for NoteHashContext {\n fn eq(self, other: NoteHashContext) -> bool {\n (self.value == other.value)\n & (self.counter == other.counter) \n & (self.nullifier_counter == other.nullifier_counter)\n }\n}\n\nimpl Empty for NoteHashContext {\n fn empty() -> Self {\n NoteHashContext {\n value: 0,\n counter: 0,\n nullifier_counter: 0,\n }\n }\n}\n\nimpl Serialize<NOTE_HASH_CONTEXT_LENGTH> for NoteHashContext {\n fn serialize(self) -> [Field; NOTE_HASH_CONTEXT_LENGTH] {\n [self.value, self.counter as Field, self.nullifier_counter as Field]\n }\n}\n\nimpl Deserialize<NOTE_HASH_CONTEXT_LENGTH> for NoteHashContext {\n fn deserialize(values: [Field; NOTE_HASH_CONTEXT_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n nullifier_counter: values[2] as u32,\n }\n }\n}\n\nimpl Readable for NoteHashContext {\n fn assert_match_read_request(self, read_request: ReadRequestContext) {\n // TODO(#6122)\n let siloed_value = silo_note_hash(read_request.contract_address, read_request.value);\n assert_eq(self.value, siloed_value, \"Value of the note hash does not match read request\");\n assert(\n read_request.counter > self.counter, \"Read request counter must be greater than the counter of the note hash\"\n );\n assert(\n (self.nullifier_counter == 0) | (read_request.counter < self.nullifier_counter), \"Read request counter must be less than the nullifier counter of the note hash\"\n );\n }\n}\n\nimpl NoteHashContext {\n pub fn to_note_hash(self) -> NoteHash {\n NoteHash { value: self.value, counter: self.counter }\n }\n\n pub fn expose_to_public(self) -> NoteHash {\n // Hide the actual counter when exposing it to the public kernel.\n NoteHash { value: self.value, counter: 0 }\n }\n}\n" }, "214": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr", "source": "use crate::{\n abis::side_effect::OrderedValue, traits::{Empty, Serialize, Deserialize}, address::AztecAddress,\n constants::READ_REQUEST_LENGTH\n};\nuse dep::std::cmp::Eq;\n\nglobal READ_REQUEST_CONTEXT_SERIALIZED_LEN = 3;\n\nstruct ReadRequest {\n value: Field,\n counter: u32,\n}\n\nimpl OrderedValue<Field> for ReadRequest {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for ReadRequest {\n fn eq(self, read_request: ReadRequest) -> bool {\n (self.value == read_request.value)\n & (self.counter == read_request.counter)\n }\n}\n\nimpl Empty for ReadRequest {\n fn empty() -> Self {\n ReadRequest {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Serialize<READ_REQUEST_LENGTH> for ReadRequest {\n fn serialize(self) -> [Field; READ_REQUEST_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<READ_REQUEST_LENGTH> for ReadRequest {\n fn deserialize(values: [Field; READ_REQUEST_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nimpl ReadRequest {\n pub fn to_context(self, contract_address: AztecAddress) -> ReadRequestContext {\n ReadRequestContext { value: self.value, counter: self.counter, contract_address }\n }\n}\n\nstruct ReadRequestContext {\n value: Field,\n counter: u32,\n contract_address: AztecAddress,\n}\n\nimpl OrderedValue<Field> for ReadRequestContext {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for ReadRequestContext {\n fn eq(self, read_request: ReadRequestContext) -> bool {\n (self.value == read_request.value)\n & (self.counter == read_request.counter)\n & (self.contract_address.eq(read_request.contract_address))\n }\n}\n\nimpl Empty for ReadRequestContext {\n fn empty() -> Self {\n ReadRequestContext {\n value: 0,\n counter: 0,\n contract_address: AztecAddress::empty(),\n }\n }\n}\n\nimpl Serialize<READ_REQUEST_CONTEXT_SERIALIZED_LEN> for ReadRequestContext {\n fn serialize(self) -> [Field; READ_REQUEST_CONTEXT_SERIALIZED_LEN] {\n [self.value, self.counter as Field, self.contract_address.to_field()]\n }\n}\n\nimpl Deserialize<READ_REQUEST_CONTEXT_SERIALIZED_LEN> for ReadRequestContext {\n fn deserialize(values: [Field; READ_REQUEST_CONTEXT_SERIALIZED_LEN]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n contract_address: AztecAddress::from_field(values[2]),\n }\n }\n}\n\n" }, "216": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr", "source": "use crate::abis::{function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs};\nuse crate::address::AztecAddress;\nuse crate::constants::GENERATOR_INDEX__CALL_STACK_ITEM;\nuse crate::traits::Hash;\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs = PublicCircuitPublicInputs::empty();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs\n };\n call_stack_item\n }\n}\n\nmod tests {\n use crate::{\n abis::{\n function_data::FunctionData, function_selector::FunctionSelector, note_hash::NoteHash,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem, side_effect::SideEffect\n },\n address::AztecAddress, constants::GENERATOR_INDEX__CALL_STACK_ITEM, traits::Hash\n };\n\n #[test]\n fn compute_call_stack_item_request_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item request hash\" test\n let test_data_call_stack_item_request_hash = 0x1595b195f0faa3a492109039dc807b291d0edd81a5e3a380866d5098ffd505dd;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash);\n }\n\n #[test]\n fn compute_call_stack_item_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item hash\" test\n let test_data_call_stack_item_hash = 0x1122a7d7e6174b7e5d111c8eb0233564d3a1ffd755afc7ce4b594d738e2770d7;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash);\n }\n}\n" }, "217": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr", "source": "use crate::{\n abis::{\n call_context::CallContext, max_block_number::MaxBlockNumber, gas_settings::GasSettings,\n nullifier_key_validation_request::NullifierKeyValidationRequest, note_hash::NoteHash,\n nullifier::Nullifier, read_request::ReadRequest, side_effect::SideEffect\n},\n constants::{\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n header::Header, hash::pedersen_hash, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader,\n transaction::tx_context::TxContext\n};\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n\n args_hash: Field,\n returns_hash: Field,\n\n min_revertible_side_effect_counter: u32,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: [ReadRequest; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest; MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n\n new_note_hashes: [NoteHash; MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n public_teardown_function_hash: Field,\n new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n start_side_effect_counter : u32,\n end_side_effect_counter : u32,\n encrypted_logs_hashes: [SideEffect; MAX_ENCRYPTED_LOGS_PER_CALL],\n unencrypted_logs_hashes: [SideEffect; MAX_UNENCRYPTED_LOGS_PER_CALL],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\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: The chain_id and version here are not redundant to the values in self.historical_header.global_variables because\n // they can be different in case of a protocol upgrade. In such a situation we could be using header from a block\n // before the upgrade took place but be using the updated protocol to execute and prove the transaction.\n tx_context: TxContext,\n}\n\nimpl Eq for PrivateCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.call_context.eq(other.call_context) &\n self.args_hash.eq(other.args_hash) &\n (self.returns_hash == other.returns_hash) &\n (self.max_block_number == other.max_block_number) &\n (self.note_hash_read_requests == other.note_hash_read_requests) &\n (self.nullifier_read_requests == other.nullifier_read_requests) &\n (self.nullifier_key_validation_requests == other.nullifier_key_validation_requests) &\n (self.new_note_hashes == other.new_note_hashes) &\n (self.new_nullifiers == other.new_nullifiers) &\n (self.private_call_stack_hashes == other.private_call_stack_hashes) &\n (self.public_call_stack_hashes == other.public_call_stack_hashes) &\n (self.new_l2_to_l1_msgs == other.new_l2_to_l1_msgs) &\n (self.start_side_effect_counter == other.start_side_effect_counter) &\n (self.end_side_effect_counter == other.end_side_effect_counter) &\n (self.encrypted_logs_hashes == other.encrypted_logs_hashes) &\n (self.unencrypted_logs_hashes == other.unencrypted_logs_hashes) &\n (self.encrypted_log_preimages_length == other.encrypted_log_preimages_length) &\n (self.unencrypted_log_preimages_length == other.unencrypted_log_preimages_length) &\n self.historical_header.eq(other.historical_header) &\n self.tx_context.eq(other.tx_context)\n }\n}\n\nimpl Serialize<PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new();\n fields.extend_from_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push(self.returns_hash);\n\n fields.push(self.min_revertible_side_effect_counter as Field);\n\n fields.extend_from_array(self.max_block_number.serialize());\n\n for i in 0..self.note_hash_read_requests.len() {\n fields.extend_from_array(self.note_hash_read_requests[i].serialize());\n }\n for i in 0..self.nullifier_read_requests.len() {\n fields.extend_from_array(self.nullifier_read_requests[i].serialize());\n }\n for i in 0..self.nullifier_key_validation_requests.len() {\n fields.extend_from_array(self.nullifier_key_validation_requests[i].serialize());\n }\n for i in 0..self.new_note_hashes.len() {\n fields.extend_from_array(self.new_note_hashes[i].serialize());\n }\n for i in 0..self.new_nullifiers.len() {\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n fields.extend_from_array(self.private_call_stack_hashes);\n fields.extend_from_array(self.public_call_stack_hashes);\n fields.push(self.public_teardown_function_hash);\n for i in 0..self.new_l2_to_l1_msgs.len() {\n fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize());\n }\n fields.push(self.start_side_effect_counter as Field);\n fields.push(self.end_side_effect_counter as Field);\n for i in 0..self.encrypted_logs_hashes.len() {\n fields.extend_from_array(self.encrypted_logs_hashes[i].serialize());\n }\n for i in 0..self.unencrypted_logs_hashes.len() {\n fields.extend_from_array(self.unencrypted_logs_hashes[i].serialize());\n }\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.extend_from_array(self.historical_header.serialize());\n fields.extend_from_array(self.tx_context.serialize());\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PrivateCircuitPublicInputs {\n fn deserialize(serialized: [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = Self {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: reader.read(),\n min_revertible_side_effect_counter: reader.read() as u32,\n max_block_number: reader.read_struct(MaxBlockNumber::deserialize),\n note_hash_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]),\n nullifier_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL]),\n nullifier_key_validation_requests: reader.read_struct_array(NullifierKeyValidationRequest::deserialize, [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL]),\n new_note_hashes: reader.read_struct_array(NoteHash::deserialize, [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]),\n new_nullifiers: reader.read_struct_array(Nullifier::deserialize, [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n public_teardown_function_hash: reader.read(),\n new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n start_side_effect_counter: reader.read() as u32,\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_ENCRYPTED_LOGS_PER_CALL]),\n unencrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n tx_context: reader.read_struct(TxContext::deserialize),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl Empty for PrivateCircuitPublicInputs {\n fn empty() -> Self {\n PrivateCircuitPublicInputs {\n call_context: CallContext::empty(),\n args_hash: 0,\n returns_hash: 0,\n min_revertible_side_effect_counter: 0 as u32,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter : 0 as u32,\n end_side_effect_counter : 0 as u32,\n encrypted_logs_hashes: [SideEffect::empty(); MAX_ENCRYPTED_LOGS_PER_CALL],\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n tx_context: TxContext::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi = PrivateCircuitPublicInputs::empty();\n let serialized = pcpi.serialize();\n let deserialized = PrivateCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let inputs = PrivateCircuitPublicInputs::empty();\n let hash = inputs.hash();\n // Value from private_circuit_public_inputs.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x249d46b5a3e35f6489e793cd604e375634d4bfdac762ec06b5f8f03016bb4257;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "22": { "path": "std/field.nr", "source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\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 pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\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 = exponent.to_le_bits(32);\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 fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\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 num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_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] as u8;\n let y_byte = y_bytes[num_bytes - 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\n" }, "220": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr", "source": "use crate::{constants::MAX_BLOCK_NUMBER_LENGTH, traits::{Deserialize, Serialize, Empty}};\n\nstruct MaxBlockNumber {\n _opt: Option<u32>\n}\n\nimpl Empty for MaxBlockNumber {\n fn empty() -> Self {\n Self { _opt: Option::none() }\n }\n}\n\nimpl Eq for MaxBlockNumber {\n fn eq(self, other: Self) -> bool {\n self._opt == other._opt\n }\n}\n\nimpl Serialize<MAX_BLOCK_NUMBER_LENGTH> for MaxBlockNumber {\n fn serialize(self) -> [Field; MAX_BLOCK_NUMBER_LENGTH] {\n [self._opt._is_some as Field, self._opt._value as Field]\n }\n}\n\nimpl Deserialize<MAX_BLOCK_NUMBER_LENGTH> for MaxBlockNumber {\n fn deserialize(serialized: [Field; MAX_BLOCK_NUMBER_LENGTH]) -> MaxBlockNumber {\n MaxBlockNumber {\n _opt: Option {\n _is_some: serialized[0] as bool,\n _value: serialized[1] as u32,\n }\n }\n }\n}\n\nimpl MaxBlockNumber {\n pub fn new(max_block_number: u32) -> Self {\n Self { _opt: Option::some(max_block_number) }\n }\n\n pub fn is_none(self) -> bool {\n self._opt.is_none()\n }\n\n pub fn is_some(self) -> bool {\n self._opt.is_some()\n }\n\n pub fn unwrap(self) -> u32 {\n self._opt.unwrap()\n }\n\n pub fn unwrap_unchecked(self) -> u32 {\n self._opt.unwrap_unchecked()\n }\n\n pub fn min(lhs: MaxBlockNumber, rhs: MaxBlockNumber) -> MaxBlockNumber {\n if rhs.is_none() {\n lhs // lhs might also be none, but in that case both would be\n } else {\n MaxBlockNumber::min_with_u32(lhs, rhs.unwrap_unchecked())\n }\n }\n\n pub fn min_with_u32(lhs: MaxBlockNumber, rhs: u32) -> MaxBlockNumber {\n if lhs._opt.is_none() {\n MaxBlockNumber::new(rhs)\n } else {\n let lhs_value = lhs._opt.unwrap_unchecked();\n\n MaxBlockNumber::new(if lhs_value < rhs { lhs_value } else { rhs })\n }\n }\n}\n\n#[test]\nfn zeroed_is_none() {\n // Large parts of the kernel rely on zeroed to initialize structs. This conveniently matches what `default` does,\n // and though we should eventually move everything to use `default`, it's good to check for now that both are\n // equivalent.\n let a = MaxBlockNumber::empty();\n assert(a.is_none());\n}\n\n#[test]\nfn serde_default() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::deserialize(a.serialize());\n assert(b.is_none());\n}\n\n#[test]\nfn serde_some() {\n let a = MaxBlockNumber::new(13);\n let b = MaxBlockNumber::deserialize(a.serialize());\n assert_eq(b.unwrap(), 13);\n}\n\n#[test(should_fail)]\nfn default_unwrap_panics() {\n let a = MaxBlockNumber::empty();\n let _ = a.unwrap();\n}\n\n#[test]\nfn min_default_default() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::empty();\n\n assert(MaxBlockNumber::min(a, b).is_none());\n}\n\n#[test]\nfn min_default_some() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::new(13);\n\n assert_eq(MaxBlockNumber::min(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min(b, a).unwrap(), 13);\n}\n\n#[test]\nfn min_some_some() {\n let a = MaxBlockNumber::new(13);\n let b = MaxBlockNumber::new(42);\n\n assert_eq(MaxBlockNumber::min(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min(b, a).unwrap(), 13);\n}\n\n#[test]\nfn min_with_u32_default() {\n let a = MaxBlockNumber::empty();\n let b = 42;\n\n assert_eq(MaxBlockNumber::min_with_u32(a, b).unwrap(), 42);\n}\n\n#[test]\nfn min_with_u32_some() {\n let a = MaxBlockNumber::new(13);\n let b = 42;\n let c = 8;\n\n assert_eq(MaxBlockNumber::min_with_u32(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min_with_u32(a, c).unwrap(), 8);\n}\n" }, "221": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr", "source": "use dep::std::cmp::Eq;\n\nstruct AppendOnlyTreeSnapshot {\n root : Field,\n // TODO(Alvaro) change this to a u64\n next_available_leaf_index : u32\n}\n\nglobal APPEND_ONLY_TREE_SNAPSHOT_LENGTH: u64 = 2;\n\nimpl AppendOnlyTreeSnapshot {\n pub fn serialize(self) -> [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH] {\n [self.root, self.next_available_leaf_index as Field]\n }\n\n pub fn deserialize(serialized: [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH]) -> AppendOnlyTreeSnapshot {\n AppendOnlyTreeSnapshot { root: serialized[0], next_available_leaf_index: serialized[1] as u32 }\n }\n\n pub fn zero() -> Self {\n Self { root: 0, next_available_leaf_index: 0 }\n }\n}\n\nimpl Eq for AppendOnlyTreeSnapshot {\n fn eq(self, other : AppendOnlyTreeSnapshot) -> bool {\n (self.root == other.root) & (self.next_available_leaf_index == other.next_available_leaf_index)\n }\n}" }, "222": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector,\n constants::{GENERATOR_INDEX__FUNCTION_DATA, FUNCTION_DATA_LENGTH}, hash::pedersen_hash,\n traits::{Serialize, Hash, Deserialize, Empty}\n};\n\nstruct FunctionData {\n selector : FunctionSelector,\n is_private : bool,\n}\n\nimpl Eq for FunctionData {\n fn eq(self, other: Self) -> bool {\n self.selector.eq(other.selector) &\n self.is_private == other.is_private\n }\n}\n\nimpl Serialize<FUNCTION_DATA_LENGTH> for FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn serialize(self) -> [Field; FUNCTION_DATA_LENGTH] {\n [\n self.selector.to_field(),\n self.is_private as Field,\n ]\n }\n}\n\nimpl Deserialize<FUNCTION_DATA_LENGTH> for FunctionData {\n fn deserialize(serialized: [Field; FUNCTION_DATA_LENGTH]) -> Self {\n Self {\n selector: FunctionSelector::from_field(serialized[0]),\n is_private: serialized[1] as bool,\n }\n }\n}\n\nimpl Hash for FunctionData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n\nimpl Empty for FunctionData {\n fn empty() -> Self {\n FunctionData {\n selector: FunctionSelector::empty(),\n is_private: false,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let data = FunctionData::empty();\n let serialized = data.serialize();\n let deserialized = FunctionData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let data = FunctionData::empty();\n let hash = data.hash();\n\n // Value from function_data.test.ts \"computes empty function data hash\" test\n let test_data_empty_hash = 0x27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "223": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress}, abis::gas::Gas,\n abis::gas_fees::GasFees,\n constants::{\n GAS_SETTINGS_LENGTH, DEFAULT_GAS_LIMIT, DEFAULT_TEARDOWN_GAS_LIMIT, DEFAULT_MAX_FEE_PER_GAS,\n DEFAULT_INCLUSION_FEE\n},\n hash::pedersen_hash, traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered,\n utils::reader::Reader\n};\n\nstruct GasSettings {\n gas_limits: Gas,\n teardown_gas_limits: Gas,\n max_fees_per_gas: GasFees,\n inclusion_fee: Field,\n}\n\nimpl GasSettings {\n pub fn new(\n gas_limits: Gas,\n teardown_gas_limits: Gas,\n max_fees_per_gas: GasFees,\n inclusion_fee: Field\n ) -> Self {\n Self { gas_limits, teardown_gas_limits, max_fees_per_gas, inclusion_fee }\n }\n\n pub fn default() -> Self {\n GasSettings::new(\n Gas::new(DEFAULT_GAS_LIMIT, DEFAULT_GAS_LIMIT),\n Gas::new(DEFAULT_TEARDOWN_GAS_LIMIT, DEFAULT_TEARDOWN_GAS_LIMIT),\n GasFees::new(DEFAULT_MAX_FEE_PER_GAS, DEFAULT_MAX_FEE_PER_GAS),\n DEFAULT_INCLUSION_FEE\n )\n }\n}\n\nimpl Eq for GasSettings {\n fn eq(self, other: Self) -> bool {\n (self.gas_limits == other.gas_limits) & (self.teardown_gas_limits == other.teardown_gas_limits) & (self.max_fees_per_gas == other.max_fees_per_gas) & (self.inclusion_fee == other.inclusion_fee)\n }\n}\n\nimpl Empty for GasSettings {\n fn empty() -> Self {\n GasSettings::new(\n Gas::empty(), Gas::empty(), GasFees::empty(), 0\n )\n }\n}\n\nimpl Serialize<GAS_SETTINGS_LENGTH> for GasSettings {\n fn serialize(self) -> [Field; GAS_SETTINGS_LENGTH] {\n let mut serialized: BoundedVec<Field, GAS_SETTINGS_LENGTH> = BoundedVec::new();\n\n serialized.extend_from_array(self.gas_limits.serialize());\n serialized.extend_from_array(self.teardown_gas_limits.serialize());\n serialized.extend_from_array(self.max_fees_per_gas.serialize());\n serialized.push(self.inclusion_fee);\n \n serialized.storage\n }\n}\n\nimpl Deserialize<GAS_SETTINGS_LENGTH> for GasSettings {\n fn deserialize(serialized: [Field; GAS_SETTINGS_LENGTH]) -> GasSettings {\n let mut reader = Reader::new(serialized);\n GasSettings::new(reader.read_struct(Gas::deserialize), reader.read_struct(Gas::deserialize), reader.read_struct(GasFees::deserialize), reader.read())\n }\n}\n" }, "225": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr", "source": "use crate::{\n abis::read_request::ReadRequestContext, address::AztecAddress,\n constants::{GENERATOR_INDEX__SIDE_EFFECT, SIDE_EFFECT_LENGTH},\n traits::{Empty, Hash, Serialize, Deserialize}\n};\nuse dep::std::cmp::Eq;\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\ntrait OrderedValue<T> where T: Eq {\n fn value(self) -> T;\n fn counter(self) -> u32;\n}\n\ntrait Readable {\n fn assert_match_read_request(self, read_request: ReadRequestContext);\n}\n\nstruct SideEffect {\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl OrderedValue<Field> for SideEffect {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<SIDE_EFFECT_LENGTH> for SideEffect {\n fn serialize(self) -> [Field; SIDE_EFFECT_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<SIDE_EFFECT_LENGTH> for SideEffect {\n fn deserialize(values: [Field; SIDE_EFFECT_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n" }, "229": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils.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, N, M>(src: [T; N], mut dst: [T; M], offset: u64) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n" }, "230": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr", "source": "use crate::{\n constants::CONTENT_COMMITMENT_LENGTH, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice\n};\n\nstruct ContentCommitment {\n tx_tree_height: Field,\n txs_effects_hash: Field,\n in_hash: Field,\n out_hash: Field,\n}\n\nimpl Serialize<CONTENT_COMMITMENT_LENGTH> for ContentCommitment {\n fn serialize(self) -> [Field; CONTENT_COMMITMENT_LENGTH] {\n let mut fields: BoundedVec<Field, CONTENT_COMMITMENT_LENGTH> = BoundedVec::new();\n\n fields.push(self.tx_tree_height);\n fields.push(self.txs_effects_hash);\n fields.push(self.in_hash);\n fields.push(self.out_hash);\n\n fields.storage\n }\n}\n\nimpl Deserialize<CONTENT_COMMITMENT_LENGTH> for ContentCommitment {\n fn deserialize(serialized: [Field; CONTENT_COMMITMENT_LENGTH]) -> Self {\n let tx_tree_height = serialized[0];\n\n let txs_effects_hash = serialized[1];\n\n let in_hash = serialized[2];\n\n let out_hash = serialized[3];\n\n Self {\n tx_tree_height,\n txs_effects_hash,\n in_hash,\n out_hash,\n }\n }\n}\n\nimpl Empty for ContentCommitment {\n fn empty() -> Self {\n Self {\n tx_tree_height: 0,\n txs_effects_hash: 0,\n in_hash: 0,\n out_hash: 0,\n }\n }\n}\n\nimpl Eq for ContentCommitment {\n fn eq(self, other: Self) -> bool {\n (self.tx_tree_height == other.tx_tree_height)\n & (self.txs_effects_hash == other.txs_effects_hash)\n & (self.in_hash == other.in_hash)\n & (self.out_hash == other.out_hash)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let empty = ContentCommitment::empty();\n let serialized = empty.serialize();\n let deserialized = ContentCommitment::deserialize(serialized);\n\n assert(empty.eq(deserialized));\n}\n" }, "231": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr", "source": "use crate::{address::EthAddress, constants::L2_TO_L1_MESSAGE_LENGTH, traits::{Deserialize, Empty, Serialize}};\n\n// Note: Not to be confused with L2ToL1Msg in Solidity\nstruct L2ToL1Message {\n recipient: EthAddress,\n content: Field,\n}\n\nimpl Empty for L2ToL1Message {\n fn empty() -> Self {\n Self {\n recipient: EthAddress::empty(),\n content: 0,\n }\n }\n}\n\nimpl Eq for L2ToL1Message {\n fn eq(self, other: Self) -> bool {\n (self.recipient == other.recipient) & (self.content == other.content)\n }\n}\n\nimpl Serialize<L2_TO_L1_MESSAGE_LENGTH> for L2ToL1Message {\n fn serialize(self) -> [Field; L2_TO_L1_MESSAGE_LENGTH] {\n [self.recipient.to_field(), self.content]\n }\n}\n\nimpl Deserialize<L2_TO_L1_MESSAGE_LENGTH> for L2ToL1Message {\n fn deserialize(values: [Field; L2_TO_L1_MESSAGE_LENGTH]) -> Self {\n Self {\n recipient: EthAddress::from_field(values[0]),\n content: values[1],\n }\n }\n}\n" }, "234": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr", "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::mocked::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::side_effect::SideEffect;\nuse crate::traits::is_empty;\nuse crate::utils::{uint256::U256, field::field_from_bytes_32_trunc};\nuse crate::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\n};\nuse crate::traits::Hash;\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\nuse crate::merkle_tree::root::root_from_sibling_path;\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = 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\npub fn silo_note_hash(address: AztecAddress, inner_commitment: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n inner_commitment\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\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 rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\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 = input[offset].to_be_bytes(32);\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: [SideEffect; 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 = logs[offset].value.to_be_bytes(32);\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_note_hash_nonce(first_nullifier: Field, commitment_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n commitment_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_siloed_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n siloed_note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\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 = 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), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n" }, "322": { "path": "/usr/src/noir-projects/noir-contracts/contracts/multi_call_entrypoint_contract/src/main.nr", "source": "// An entrypoint contract that allows everything to go through. Only used for testing\n// Pair this with SignerlessWallet to perform multiple actions before any account contracts are deployed (and without authentication)\ncontract MultiCallEntrypoint {\n use dep::std;\n\n use dep::aztec::prelude::AztecAddress;\n use dep::authwit::entrypoint::app::AppPayload;\n\n #[aztec(private)]\n fn entrypoint(app_payload: pub AppPayload) {\n app_payload.execute_calls(&mut context);\n }\n}\n" }, "4": { "path": "std/collections/bounded_vec.nr", "source": "use crate::{cmp::Eq, convert::From};\n\nstruct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: u64,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: u64) -> T {\n assert(index < self.len);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: u64) -> T {\n self.storage[index]\n }\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 pub fn len(self) -> u64 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u64 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&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 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 pub fn extend_from_bounded_vec<Len>(&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 pub fn from_array<Len>(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 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::unsafe::zeroed();\n elem\n }\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\nimpl<T, MaxLen> 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, MaxLen, Len> 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 // TODO: Allow imports from \"super\"\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 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" }, "53": { "path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr", "source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::pedersen_hash, traits::{Hash, Serialize}};\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 = 17;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 420;\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 pedersen_hash(\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_slice(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 false,\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 false,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n" }, "70": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr", "source": "use crate::{\n context::{inputs::PrivateContextInputs, interface::ContextInterface},\n messaging::process_l1_to_l2_message,\n hash::{hash_args_array, ArgsHasher, compute_encrypted_log_hash, compute_unencrypted_log_hash},\n oracle::{\n arguments, returns, call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, set_public_teardown_function_call_internal,\n parse_public_call_stack_item_from_oracle\n},\n header::get_header_at, logs::emit_encrypted_log,\n logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog},\n nullifier_key::{get_nullifier_keys, NullifierKeys}\n}\n};\nuse dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, side_effect::SideEffect\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_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_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL,\n MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n grumpkin_point::GrumpkinPoint, header::Header, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{is_empty, Deserialize, 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\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 nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_note_hashes: BoundedVec<NoteHash, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<Nullifier, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_function_hash: Field,\n new_l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_NEW_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 encrypted_logs_hashes: BoundedVec<SideEffect, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<SideEffect, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n nullifier_key: Option<NullifierKeys>,\n}\n\nimpl ContextInterface for PrivateContext {\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_new_note_hash(&mut self, note_hash: Field) {\n self.new_note_hashes.push(NoteHash { value: note_hash, counter: self.side_effect_counter });\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.new_nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.side_effect_counter });\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n let side_effect_counter = inputs.start_side_effect_counter;\n let mut min_revertible_side_effect_counter = 0;\n if is_empty(inputs.call_context.msg_sender) {\n min_revertible_side_effect_counter = side_effect_counter;\n }\n PrivateContext {\n inputs,\n side_effect_counter,\n min_revertible_side_effect_counter,\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 nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_stack_hashes: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n nullifier_key: Option::none()\n }\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 returns::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 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 nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n public_teardown_function_hash: self.public_teardown_function_hash,\n new_l2_to_l1_msgs: self.new_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 encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n encrypted_log_preimages_length: self.encrypted_log_preimages_length + 4,\n unencrypted_log_preimages_length: self.unencrypted_log_preimages_length + 4,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn end_setup(&mut self) {\n self.min_revertible_side_effect_counter = self.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.side_effect_counter };\n self.note_hash_read_requests.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.side_effect_counter };\n self.nullifier_read_requests.push(request);\n self.side_effect_counter = self.side_effect_counter + 1;\n }\n\n pub fn request_app_nullifier_secret_key(&mut self, account: AztecAddress) -> Field {\n let keys = if self.nullifier_key.is_none() {\n let keys = get_nullifier_keys(account);\n let request = NullifierKeyValidationRequest {\n master_nullifier_public_key: keys.master_nullifier_public_key,\n app_nullifier_secret_key: keys.app_nullifier_secret_key\n };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(keys);\n keys\n } else {\n let keys = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(keys.account == account, \"Cannot query nullifier key for more than one account per call\");\n keys\n };\n keys.app_nullifier_secret_key\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 };\n self.new_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_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n // TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n // --> might be a better approach to force devs to make a public function call that emits the log if needed then\n // it would be less easy to accidentally leak information.\n // If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\n pub fn emit_unencrypted_log<T, N, M>(&mut self, log: T) where T: ToBytesForUnencryptedLog<N, M> {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let log_slice = log.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n let side_effect = SideEffect { value: log_hash, counter: self.side_effect_counter };\n self.unencrypted_logs_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n self.unencrypted_log_preimages_length += 44 + log_slice.len().to_field();\n // call oracle\n let _void = emit_unencrypted_log_private_internal(contract_address, event_selector, log, side_effect.counter);\n }\n\n // This fn exists separately from emit_unencrypted_log because sha hashing the preimage\n // is too large to compile (16,200 fields, 518,400 bytes) => the oracle hashes it\n // It is ONLY used with contract_class_registerer_contract since we already assert correctness:\n // - Contract class -> we will commit to the packed bytecode (currently a TODO)\n // - Private function -> we provide a membership proof\n // - Unconstrained function -> we provide a membership proof\n // Ordinary logs are not protected by the above so this fn shouldn't be called by anything else\n pub fn emit_contract_class_unencrypted_log<N>(&mut self, log: [Field; N]) {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let log_hash = emit_contract_class_unencrypted_log_private_internal(contract_address, event_selector, log, self.side_effect_counter);\n let side_effect = SideEffect { value: log_hash, counter: self.side_effect_counter };\n self.unencrypted_logs_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n self.unencrypted_log_preimages_length += 44 + N*32;\n }\n\n pub fn emit_encrypted_log<N, M, L>(\n &mut self,\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n encryption_pub_key: GrumpkinPoint,\n preimage: [Field; N]\n ) where [Field; N]: LensForEncryptedLog<N, M, L> {\n // TODO(1139): perform encryption in the circuit\n // The oracle call should come last, but we require the encrypted value for now\n let encrypted_log: [Field; M] = emit_encrypted_log(\n contract_address,\n storage_slot,\n note_type_id,\n encryption_pub_key,\n preimage,\n self.side_effect_counter\n );\n let log_hash = compute_encrypted_log_hash(encrypted_log);\n let side_effect = SideEffect { value: log_hash, counter: self.side_effect_counter };\n self.encrypted_logs_hashes.push(side_effect);\n self.side_effect_counter = self.side_effect_counter + 1;\n let encrypted_log_byte_len = 112 + 32 * (N + 3);\n // + processed log len (4)\n self.encrypted_log_preimages_length += encrypted_log_byte_len + 4;\n }\n\n pub fn call_private_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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<ARGS_COUNT>(\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<RETURNS_COUNT>(\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<RETURNS_COUNT>(\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<ARGS_COUNT>(\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<RETURNS_COUNT>(\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 item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter);\n assert_eq(item.public_inputs.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.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 assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.private_call_stack_hashes.push(item.hash());\n\n PackedReturns::new(item.public_inputs.returns_hash)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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<ARGS_COUNT>(\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 mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_call_stack_hashes.push(item.hash());\n }\n\n pub fn set_public_teardown_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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 mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_teardown_function_hash = item.hash();\n }\n\n fn validate_call_stack_item_from_oracle(\n self,\n item: PublicCallStackItem,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter);\n // We increment the sideffect counter by one, to account for the call itself being a side effect.\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\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 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 nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n private_call_stack_hashes : BoundedVec::new(),\n public_call_stack_hashes : BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs : BoundedVec::new(),\n historical_header: Header::empty(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n nullifier_key: Option::none(),\n }\n }\n}\n\nstruct PackedReturns {\n packed_returns: Field,\n}\n\nimpl PackedReturns {\n pub fn new(packed_returns: Field) -> Self {\n PackedReturns { packed_returns }\n }\n\n pub fn assert_empty(self) {\n assert_eq(self.packed_returns, 0);\n }\n\n pub fn raw(self) -> Field {\n self.packed_returns\n }\n\n pub fn unpack<N>(self) -> [Field; N] {\n let unpacked: [Field; N] = returns::unpack_returns(self.packed_returns);\n assert_eq(self.packed_returns, hash_args_array(unpacked));\n unpacked\n }\n\n pub fn unpack_into<T, N>(self) -> T where T: Deserialize<N> {\n let unpacked: [Field; N] = self.unpack();\n Deserialize::deserialize(unpacked)\n }\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle_private<T>(\n _contract_address: AztecAddress,\n _event_selector: Field,\n _message: T,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, event_selector, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nfn emit_contract_class_unencrypted_log_private<N>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<N>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: [Field; N],\n counter: u32\n) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, event_selector, message, counter)\n}\n\n" }, "93": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr", "source": "use dep::protocol_types::{\n abis::{function_selector::FunctionSelector, private_call_stack_item::PrivateCallStackItem},\n address::AztecAddress, constants::PRIVATE_CALL_STACK_ITEM_LENGTH\n};\n\n#[oracle(callPrivateFunction)]\nfn 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; PRIVATE_CALL_STACK_ITEM_LENGTH] {}\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) -> PrivateCallStackItem {\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 PrivateCallStackItem::deserialize(fields)\n}\n" } } }
1
+ { "transpiled": true, "noir_version": "0.29.0+5b9b1fab51e35c2112c0136785b5b69cd8529a92", "name": "MultiCallEntrypoint", "functions": [{ "name": "compute_note_hash_and_nullifier", "is_unconstrained": true, "custom_attributes": [], "abi": { "error_types": {}, "param_witnesses": { "contract_address": [{ "end": 1, "start": 0 }], "nonce": [{ "end": 2, "start": 1 }], "note_type_id": [{ "end": 4, "start": 3 }], "serialized_note": [], "storage_slot": [{ "end": 3, "start": 2 }] }, "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": "serialized_note", "type": { "kind": "array", "length": 0, "type": { "kind": "field" } }, "visibility": "private" }], "return_type": { "abi_type": { "kind": "array", "length": 4, "type": { "kind": "field" } }, "visibility": "public" }, "return_witnesses": [4, 5, 6, 7] }, "bytecode": "H4sIAAAAAAAA/+2byW7bMBCGJa9yVC+SZXlf4uTSm+w6tnPzy7Rv3XuBvkPRjMKpx8QkoNARIQImYGhMUfy/+blECRjfey/tt4+v4qZ2pQXbXNQ1+7+yE+wrK5PTd4Sz5ghnXZDTZzjh2lAxXGEut7zbef6vXAQnCRWlUDAwdVL3EdzNQ1BaKgg04IsE9CE7twgNhYYSKnB6MySJ+KQOn62ROtxB6o1rDi35HA4BMU+s37cBDb2r7y3iCcZ4D7RnpK5RUo5N+RzL8i5flehPU/XbJt/Rq46KBXfYHdX21adDND01RhhPSVtsh37UyBhD6XrX8e988lxDe65H2rSY/C+ebP5tjaetMTcVE5QIeLU9oKSxyaDfB/l+b8a8oY3JA8mpK+73/gx7QujdFv2nzIXEXcLzRZwn25WT5/vY9Qi7TL8vB/Cqr3kVal71SBvK0C/BP5/oYt/4vc9oy3lxPIP2wMCLAcMzsOzFgNEW9OIVtCMDLyKGJ7LsRcRoy3lx+gbasYEXMcMTW/YiZrTlvNjn7xZDAy+GDM/QshdDRltwjeTzIjHwImF4EsteJIy2oBc/QHtk4MWI4RlZ9mLEaAt68R20UwMvUoYntexFymgL7p35+8XYwIsxwzO27MWY0Rb0Yg/aEwMvJgzPxLIXE0ZbcI3k2lMDL6YMz9SyF/R31CLMQweZUweZ4wowB1oso33M98+ZgRczhmdm2QvUK8qcVIA50GIZ7eMLaM8NvJgzPHPLXqBeUebIQebYQeaRg8yJg8ypg8xVmM+BFston/I9dGHgxYLhWVj2AvWKMkcOMs8cZI4rwBxosYz2Kf/b3NLAiyXDs7TsBeoVZR47yDyoAHOgxTLapyNorwy8WDE8K8teoF5R5omDzKmDzDMHmWMHmUcOMicOMt/XoB3mqALM9EzT71J59q+hxoOeeRqjpzGGJKbnYNbijFlGx2dNtDbyWjtuvuD3Tana+zP0u5XPKX+Xf1J94Rm+LZPTs4qlz3M9kX59ooP1DRL/Im2xHfqB6xbZYd49qvj5k+dW2nM90uaRyf/iyea/1Xi2GjOMyU/CsRHn2J9N5vXAu67lr4SnhH3wQM/kYjHZd0raY3Yl5ZnRM3x/PNk1vdG8CjSveqQN3aM3JfhnMr/uzHfmj5jp+0RA6vD+mtTVtFzo/zJgezgz/BdsuDj5FjUAAA==", "debug_symbols": "ndpBattQGIXRvWgciu8v6ekpWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl+q/Xl7ftse7y/Ol+37ZXgcKw/D7vhyf2qfD8Pr/rC7P/fPbw/30SKjLqMVRuNGRpFRyWiU0SSjWUZSxChFjFLEKEVMUsQkRUxSxCRFTFLEJEVMUsQkRUxSxCRFzFLELEXMUsQsRcxSxCxFzFLELEXMUsQsRTQpokkRTYpoUkSTIpoU0aSIJkU0KaJJEYsUsUgRixSxSBGLFLFIEYsUsUgRixSxSBFdiuhSRJciuhTRpYguRXQpoksRXYroUsQqRaxSxCpFrFLEKkWsUsQqRaxSxCpFrFJENhtahVZFq5FWE61mWjVaLbTqtKI2Qm2E2gi1EWoj1EaojVAboTZCbYTaKGqjqI2iNoraKGqjqA3izJBnhkAzJJoh0gyZZgg1Q6oZYs2Qa4ZgMySbIdoM2WYIN0O6GeLNkG+GgDMknCHiDBlnCDlDyhlizpBzhqAzJJ0h6gxZZwg7Q9oZ4s6Qd4bAMySeIfIMmWcIPUPqGWLPkHuG4DMknyH6DNlnCD9D+hniz5B/hgA0JKAhAg0ZaAhBQwoaYtCQg4YgNCShIQoNWWgIQ0MaGuLQkIeGQDQkoiESDZloCEVDKhpi0ZCLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYuWXfO0e5520ZNctMhFi1y0yEWLXLT+20Vvp5/b9/326bC73+y9f/w4Pv+76Hs7Xn69/f1y+/c3" }, { "name": "entrypoint", "is_unconstrained": false, "custom_attributes": ["aztec(private)"], "abi": { "error_types": {}, "param_witnesses": { "app_payload": [{ "end": 55, "start": 38 }], "inputs": [{ "end": 38, "start": 0 }] }, "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" } }, { "name": "side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "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": "tx_tree_height", "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": "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" } }], "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" } }], "kind": "struct", "path": "authwit::entrypoint::function_call::FunctionCall" } } }, { "name": "nonce", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::entrypoint::app::AppPayload" }, "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" } }, { "name": "side_effect_counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "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": 32, "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": 2, "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_key_validation_requests", "type": { "kind": "array", "length": 1, "type": { "fields": [{ "name": "master_nullifier_public_key", "type": { "fields": [{ "name": "x", "type": { "kind": "field" } }, { "name": "y", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint" } }, { "name": "app_nullifier_secret_key", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::nullifier_key_validation_request::NullifierKeyValidationRequest" } } }, { "name": "new_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": "new_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_stack_hashes", "type": { "kind": "array", "length": 4, "type": { "kind": "field" } } }, { "name": "public_call_stack_hashes", "type": { "kind": "array", "length": 16, "type": { "kind": "field" } } }, { "name": "public_teardown_function_hash", "type": { "kind": "field" } }, { "name": "new_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": "encrypted_logs_hashes", "type": { "kind": "array", "length": 4, "type": { "fields": [{ "name": "value", "type": { "kind": "field" } }, { "name": "counter", "type": { "kind": "integer", "sign": "unsigned", "width": 32 } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect" } } }, { "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 } }], "kind": "struct", "path": "authwit::aztec::protocol_types::abis::side_effect::SideEffect" } } }, { "name": "encrypted_log_preimages_length", "type": { "kind": "field" } }, { "name": "unencrypted_log_preimages_length", "type": { "kind": "field" } }, { "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": "tx_tree_height", "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": "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" } }], "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" }, "return_witnesses": [1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997] }, "bytecode": "H4sIAAAAAAAA/+1dB5gUxfKfO44DPDkTRhTPiKLozl7gEJBDDGQQEJB4x8EpiBhQUUyICTHhM+f8zOmZc87xPXPOOWf/Bvx331VxdcXM7m1P17LtznxffTXd2+FX1ak6zRZ4TU+/Dp5X3a7pvUBRG0WFisqIuw28o7uIuduy8O2YuyNzr8TcqzD3asy9pqIa4u7Cfl+fucuYewPm3oS5uzL35ky+Ldjv3dnvW7PfffZ7Ofu9Et7pg+4a4OWJqoqK6T2S0/1yvy6R7Dm1ujJRUTm1qtqv9iurK6clq8vLp1dXVPfoObVnj0RPv6J8ut9Q2bO8IdH09CBpJSI+GlsHkt6mipaA3jTfDPjmwLsB3wL4lsC7A98K+NbAE8B94Eng5cArgFcCrwLeI+bLhevyrPaa6iytF9WxfvK+XvT0msYDPYbwPs7zlu3nEtEe32JaCYp3myD8NkFLKGIbgXR7efYGJSm5e9kvIxGsmwBW24N9b89uI9BGik6zzMtuY97Mk2nMfTzHGvNmDLStdLf1crsxa7m3tV9GCZJkY2X2LOrBpk77WtRlW0in2Fv2yeWGK4mzqyM4N3UE5yaO4CwSwunZxbl00NJ8BZJ2P0XbKeqvaHtFOyjaUdFOigYoGqjj2Faa7ow2FxBSd0y4zMQf2zL083K64H18oboYBHywJ2i1oJmnM3vHa16b0pmWsTzbCBaK4YiZhBHTH+TZG30He9mxOBLRHqsyDwlIa2qiflqlP7VqWg9/el1ldX19z3LfT9ZV1VVNTVY3TJ9a6VdXVqs06+uS1Sq7ZF29Pz1RVzU9m1OFIZ79Xlc/Qz3HpgpDGGhb6Q6zWMmk5B5mv4wCsdroWDRWWx0BpmuzjIZ7dhuUHjR0mht4TWsI2Rrxt/NyesTHJ0l1MQL4zl4WRnyd2V9e84gflKntEZ8WimlFnd7Q9Izw7FX6nT03RnybMo8kafnV5clkj3Idrnpawq+YVp+sTianTa1I1Cfq6pPTe1b4PRsqkhXl9dPqp6o06/yGRENdfc+G6iZc2RzxR3oyI/4oz7ERfyQDbSvd0V5uj/ha7tH2y0hkxN8ZsNpOdxfP/iit09SNOJuj9A5eTo/SgfPyMcDHelkYpXVmdF6uMy1jedoepWmhRJ2Xj/HsVfqxnhujtE2Zx3luzsvHeTKj9K6eY6P0OAbaVrrjvdwepbXc4+2XkcgoPRaw2p6X2yyjCZ79EV+nme15+Y5eTo/4+LSYl08EPsnLwoivM6Pz8qBMbY/4tFCizssnevYq/STPjRHfpsyTPTfn5ZM9mRF/iufYiD+ZgbaVbq2X2yO+lrvWfhmJjPiTAKvtdOs8+6O0TjPb8/KdPPdG6anA670sjNI6MzpKB2Vqe5SmhRJ1lJ7q2av09Z4bo7RNmad5bo7S0zyZUXq659goPY2BtpVug5fbo7SWu8F+GYmM0vWA1Xa6u3n2R2mdZrZH6QFeTo/SgavnuwOf4WVhlNaZ0dVznWkZy9P2KE0LJerq+e6evUo/w3NjlLYp80zPzdXzmZ7MKL2H59goPZOBtpXuLC+3R2kt9yz7ZSQySs8ArLZXz22W0Z6e/RFfp7kBpGm7/PV5+74CZTVbuC4loj2NF4hmC8j9XLvcbkM1QnI/386NQd9i+fjPt8vtOj5YqKz38nJbbi3zXgJy7+3Z79t1mmWQpsTlQ4ny38eB8t9HQO59Bcp/X2/ZiaLtPm+vPCr7GUJ1fo4DdX6OgNz7CdT5/Ty5Pm8TofLf34Hy319A7gMEyv8AT77Pm5NHZb+pUJ3/X47PZQYKyf2iI3MZi+Xjv5jjc5lJUNae3XRF6mWRUL18JcfLqF5I7lcdaY8Wy8d/NcfLenuhsn4jS2WdQ+t8/hs5Ps4WCJX1Wzlex/sLyf22I/2ZxfLxXZF5E4vlPNciLon6rev2XIH6faA9jEvnjDrNMq/5E8BY7nqNW38Kdmfg+iNWB5Fwn0C4/vD79sDHAp8EvB74DOADvfgTuzGPecxjHvP84/qvFOZ5zeMoPbyofz8I+Dzgqyo62Gv52J5zbW4xrUM8e3ZUW9BT/OHbZpzxh2/t4ow/fGsVZ6IPSfNQ4IcBPxz4fOBHAF8A/EjgRwE/GvgxwI8FvhD4ccAXAT8e9F4D7hMUnajoJEUnK1qs6BRF/1J0qqLTFJ2u6AxFZyo6S9HZis5RdK6i8xSdr+gCRRcqukjRxYouUXSpossUXa7o34quUHSloqsUXa3oGkXXKrpO0fWKblB0o6KbFP1H0c2KblF0q6LbFN2u6A5Fdyq6S9Hdiu5RdK+i+xTdr+gBRQ8qekjRw4oeUfSooscUPa7oCUVPKnpK0dOgiyLQxTOKnlX0nKLnveYD9fp5QdF/Ff0P/MvA/0VFLyl6WdEril5V9Jqi1xW9oehNRW8pettrOqT/rqL3FL2v6ANFHyr6SNHHXtN88VNFnyn6XNEXir5U9JWirxV9o+hbRd8p+l7RD4AFK+uPin5S9LOiXxT9qug3Rf+n6HdFfyj602u60qfHzb+9pgT0x5QLFbVRVKSoraJiRe0UtVfUQdEKikoUraioo6JSRSspWlnRKopWVbSaok6KVle0hqI1Fa2laG1F6yjqrGhdResp6qJofUVlijZQtGFBy7LYSDk2VrSJok3ht5Xht67KsZmizRV1U7SFoi0VdVe0laKtFenJu74hkVRUrqhCUaWiKuh0ehS0HDerlaOnom0U9VLUW1EfCLst8L4Qpz3EqVGOfoq2U9Rf0faKdlC0o6KdWNgByjFQ0SBFgxUNUTRU0TBFwyH9EcB3Bj4S+Cjgo4HvAnwM8LHAxwHfFfh44BOATwQ+Cfhk4FOA1wKvAz4VeD3wacCnA28Avhvw3YHPAD4T+B7AZwHfE/hs4HsB3xvqYuNTAzwR7Wn8sPchXvNjKd2li0O64y7zmjuLw+Ed3QvY70ey349i7qNZ+IXMfRwLv4i5j2fhT2Tuk5n7FOY+lblPZ+4zmfts5j6Xuc9n7guZ+2LmvpS5L2fuK5j7Kua+hrmvY+4bmPsm5r6ZuW9l7tuZ+07mvpu572Xu+5n7QeZ+mLkfZe7HmftJ5n6auZ9l7ueZ+yXmfoW5X2PuN5j7LeZ+h7nfY+4PmPsj5v6EuT9j7i+Y+yvm/oa5v2PuH5j7J+b+lbl/Z+6/mFu/UHcb5i5m7g7MvSJzr8TcqzL36sy9FnN3Zu4uzL0Bc2/D3H2Ye1vm7svc/Zi7P3PvwNw7MfdA5h7M3EOZezhzj2LuXZl7AnNPYu4pzK0Huxrinsl+34O5ZzH3nuD2PPsTHBzLeLqRD9YW5PZmqB4TNUbbcu+b43JrmfcVkHtOgX07aI5gvd9EqPz3c6D89xOQe3+B8t+flD8+tjfIaXv9p5e9Hncl6vwBDtT5AwTknitQ5+e2os7n0Bjl2y77MJkT0R6/r8V2fqBF/UnV9wMF6vtBAvX9IMExXm8uSfR37+X4AcdDheR+35FDbxbLx38/xw91HiZU1vMcGNPnCch9sEAfd7BgH9dVqPwPcaD8DxGQ+1CB8j80C/OYeQX5U/abCtX5j3J8XD9GSO6PHRnXLZaP/3GOj+tHQll7dtMVuyAoUS8/y/EyOkpI7s8daY8Wy8f/PMfL+gihsv7KkQuCNudUXzlwQVCirL/J8To+X0jubx3pzyyWj/9tjpf1cUJlfZjl+ZM+rP8TpKfXtfQhw8OAHw58PvAjgC8AfiTwo4AfDfwY4McCX4jpFjTxReA+HvgJwE8EfhLwk4EvBn4K8H8BPxX4acBPB34G8DOBnwX8bODnAD8X+HnAzwd+AfALgV8E/GLglwC/FPhlwC8H/m/gVwC/EvhVwK8Gfg3wa4FfB/x64DcAvxH4TcD/A/xm4LcAvxX4bcBvB34H8DuB3wX8buD3AL8X+H3A7wf+APAHgT8E/GHgjwB/FPhjwB8H/gTwJ4E/Bfxp4M8Afxb4c8CfB/4C8P8C/x/wF4G/BPxl4K8AfxX4a8BfB/4G8DeBvwX8beDvAH8X+HvA3wf+AfAPgX8E/GPgnwD/FPhnwD8H/gXwL4F/Bfxr4N8A/xb4d8C/B/4D8B+B/wT8Z+C/AP8V+G/A/w/478D/AP4ncDxkjPQ3cA/abQHwQuBtgBcBbwu8GHg74O2BdwC+AvAS4CsC7wi8FPhKwFcGvgrwVYGvBrwT8NWBrwF8TeBrAV8b+DrAOwNfF/h6wLsAXx94GfANgG8IfCPgGwPfBPimwLsC3wz45sC7Ad8C+JbAuwPfCvjWwBPAfeBJ4OXAK4BXAq8C3gN4NfCewLcB3gt4b+B9gG8LvC/wGuD9gG8HvD/w7YHvAHxH4DsBHwB8IPBBwAcDHwJ8KPBhwIcDHwF8Z+AjgY8CPhr4LsDHAB8LfBzwXYGPBz4B+ETgk4BPBj4FeC3wOuBTgdcDnwZ8OvAG4LsB3x34DOAzge8BfBbwPYHPBr4X8L2x3is6XA/ann17Repy//yC3LbT9Pm8+QJ22hGW7TS9zq3TLPNkyl9qT3uBA+W/QEDuIwXK/8iCZfc52ljWh8X26tOyj6rPoxyoR0cJ1KOjBerR0YL9iD73ua0nsDcjoIdjBPUgVR+OFdDDsVnoVyyWn3+sxX5loYA+FwqP04cL1Kvjcrx/1fbpwZ59uRdZlDub/8S0pWe33uJzfEEAflugpRRxfIH9dE+w2MlIyX1CgfUyEt3ksqnTEy0OKG0hnWx8kcVmw5XEuYUjOLs5gnNhgRs4XfkiSwGRfwV4P0k5Tla0WNEpiv6l6FRFpyk6XdEZis4s8Ox/sUB3Rt0FhMzmn7aeXJDTBR/4p61ngRLOlrRa0KzXmb3jNV8bPjsL06aTo4+YS/+09SyLo+/ZBdmxOBLRHqsynxOQlgt/2npOgf1eVz/nujZV0Io4V2CqcF6OTxW03OcJTRVsz8fPBqy2OgJM12YZnS+wZqTT3MDL7t+0L87tER+fJNXFBaCEC7Mx4uvM/vKaR/ygTG2P+IstVNTpDU3PBRYr/YWOjPg2Zb6IpOVXlyeTPcp1uOppCb9iWn2yOpmcNrUiUZ+oq09O71nh92yoSFaU10+rn6rSrPMbEg119T0bqptwZXPEv0hoxL/YtRFfK+JigRH/khwf8bXclzgy4l8IWG2ne6nAKH0pWCbZHKVPdXBefhko4fJsjNKXsXn55VmYl59qcV5+mcXO5HJHRmmbMv/b0Xn5v4VG6StcG6W1Iq4QGKWvzPFRWst9pSOj9OWA1fa83GYZXSUw4l+1HOblpzk4L78alHBNNkb8q9m8/JoszMtPszgvv9pipb/GkRHfpszXOjovv1ZoxL/OtRFfK+I6gRH/+hwf8bXc1zsy4l8DWG2ne4PAKH3DcpiXn+7gKH0jKOGmbIzSN7JR+qYsjNKnWxylb7TYmdzkyChtU+b/ODpK/0dolL7ZtVFaK+JmgVH6lhwfpbXctzgySt8EWG2ne6vAKH3rchilz3Bw9fw2UMLt2Rilb2Or57dnYfX8DIur57dZ7Exud2SUtinzHY6unt8hNErf6doorRVxp8AofVeOj9Ja7rscGaVvB6y2V89tltHdAiP+3bB6LlH++rz9iQKWzz0FsnUpEe1pvEB0j4DcP+T4VwP15Q4JuX905Ot5FsvH/zHHv553tlBZ35vjbVvLfK+A3PcJ9O33FcjdcteXDyXK/34Hyv9+AbkfECj/BwImirb7vHsL8qfsbxfq8x50oM4/KCD3QwJ1/iHBPm+hUPk/7ED5Pywg9yMC5f9IFvq8Bwvyp+z15X2JOv9Ljs9lzhRq6786MpexWD7+rzk+l7kGytqzm67YP41I1Mvfc7yMbhJqj3840h4tlo//R46X9b+EynqJI/80YnMdaYkD/zQiUdZe+9yu46cI1fGC9m70ZxbLx3dF5oUW5w2PFlgsC09mzvioQP1+TGDO+BjMGbW7Ayl3vcatv+p+IXD9EavHC5rDfQLhToHf/wX8cuDXAL8J+O3AzwTew4t5zGMe85jHPH+43jt8goyjeHjxJBgXHwf+BHD9rypPFjSdStXrHzg+68e23aK/Cj+bpG+abkPLx+bJVJ97UH08BQp5uiALJ1OfgkzQ/TQxzqQKJuJkO8EMSv8pi0b50wUyFcb2AoNNmZ9xYCLyjMBEJNcPoen2skhA7mctyq07846KVob0dNp6kDAlfKT6Htu6fM6Bjd/nBOrQ8xblbgN1iD829Sqh2+cLch/jCwIYGx/bA9o9Fge0/1oc0FytnD0cwPg/qcppu7d7Ma5Q/osO9HYvuVKhXrYHNOlqhXrZgQr1iisV6lV7QMtdrVCvOlChXnOlQr1uD2iFqxXqdQcq1BuuVKg37QGtdLVCvelAhXrLlQr1tj2gVa5WqLcdqFDvuFKh3rUHtIerFepdByrUe65UqPftAa12tUK970CF+sCVCvWhPaA9Xa1QHzpQoT5ypUJ9bA9onasV6mMHKtQnrlSoT+0BnepqhfrUgQr1mSsV6nN7QOtdrVCfO1ChvnClQn1pD+g0VyvUlw5UqK9cqVBf2wM63dUK9bUDFeobVyrUt/aANrhaob51oEJ9ZxOjPkhZ6jUfpNRnY/RxBr0DrTcN9T6PXprXq6l6AUyvWehppp4ZaGNOj7+6y9S1/LsCz5MSWp/TelLgQGFRjt/21Qfp/isgd1uhm69tLOP83uIRKItl7dvUXxtog/yxhdUTapMuHET93jZG2wClToj/UGC3Akl06D8IdGw/WixwjU03TpomPoWWcXe3mNZPFsu+LZR9sbfsY7tObOnZ71AkcG7hCM5ujuBcWOAGziIhfXp2cSb6kDR/BiX8AvxX4L8B/z/gvwP/A/ifwP8CvgT436hU6AALgBcCb1PYpPcaCFak3G0VFStqp6i9og6KVlBUomhFRR0VlSpaSdHKilZRtKqi1RR1UrS6ojUUraloLUVrK1pHUWdF6ypaT1EXResrKlO0gaINFW2kaGNFmyjaVFFXRZsp2lxRN0VbKNpSUXdFWynaWpG+E+sr0v+tVq6oQlGloipFPRRVK+qpaBtFvRT1VtRH0baK+iqqUdRP0XaK+oMuikAX2yv3Dop2VLRTYfPtV/0MUO6BigaBfxn4D1buIYqGKhqmaLiiEYp2VjRS0ShFoxXtomiMorGKxinaVdF4RRMUTVQ0SdFkRVMU1SqqUzRVUb2iaYqmK2pQtJui3RXNUDQTsGBl3UO5ZynaU9FsRXsp2lvRPor2VTRH0X6K9ld0gKK5ig5UdJCieYoOVnSIokMVHabocEXzFR2haIGiIxUdpehoRccoOlbRQkXHKVqk6HhFJyg6UdFJik5WtFjRKYr+pehURacpOl3RGYrOVHSWorMVncPK4lzlPk/R+YougN9wEnyhcl+k6GJFlyi6VNFlii5X9G9FVyi6UtFViq5WdI2iaxVdp+j6wqY0bihsOW7eqNw3KfqPopsV3aLoVgh7G/DbIU57iHOHct+p6C5Fdyu6R9G9iu5TdD8L+4ByP6joIUUPK3pE0aOKHlP0OKT/BPAngT8F/GngzwB/FvhzwJ8H/gLw/wL/H/AXgb8E/GXgrwB/FfhrwF8H/gbwN4G/Bfxt4O8Afxf4e8DfB/4B8A+BfwT8Y+CfAP8U+GdaZ7YHBf0/FT+RlQ9L6S41PnXHXeY1dxa/FrS8Ov87+/0P9vufzP0XC687cuouKGwZvpC527DwbZm7HXN3YO4S5u7I3Csx9yrMvRpzr87cazL32szdmbnXY+71mXsD5t6IuTdh7q7MvTlzb8Hc3Zl7a+b2mbucuSuZuwdz92TuXszdh7n7Mnc/5u7P3Dsw907MPYS5hzH3COYeydyjmXsMc49j7vHMPZG5JzN3LXNPZe5pzN3A3Lsz90zmnsXcezH3vsy9P3MfyNwHM/dhzH0Ecx/F3Mcy9yLmPpG5FzP3qcx9BnOfzdz/Ye5bmfs25r6due9k7ruZ+17mvp+5H2Tuh5n7UeZ+nLmfZu7/MveLzP0yc7/K3HqwqyHuD9jvHzL3R8z9Mbg9z/4EB8cynm7k0xSFub3KrsfEzwvty/1FjsutZf5CQO4vC+3bQV8K1vuFQuX/lQPl/5WA3F8LlP/XpPzxKbSsD9pe/+llr8ddiTr/jQN1/hsBub8VqPPftqLO59AY5dsu+zCZE9Ee/3aL7fw7i/qTqu/fCdT37wXq+/eCY7zeXJLo79oLnyCJiu9nIdumgyPfTrdYPn6HHD8t9ItQWf/gwJj+g4DcPwr0cT8K9nF6Y1qi/H9yoPx/EpD7Z4Hy/zkL85gfCvOn7LsJ1fkVc3xcXyLU13d0ZFy3WD5+xxwf1/+Asvbspiv2P3MS9XLlHC+jP4Xa4yqOtEeL5eOvkuNl/X9CZd0pS2WdQ3Nev1OOj7M6PYmyXiPH6/hvQnV8TUf6M4vl46+Z42VdILQX8Ivl+ZP+z5efID29rqX/4+UX4L8C/w34/wH/HfgfwP8E/hfwJcD/Bq4rUmO6wAuBtwFeBLwt8GLg7YC3B94B+ArAS4CvCLwj8FLgKwFfGfgqwFcFvhrwTsBXB74G8DWBrwV8beDrAO8MfF3g6wHvAnx94GXANwC+IfCNgG8MfBPgmwLvCnwz4JsD7wZ8C+BbAu8OfCvgWwNPAPeBJ4GXA68AXgm8CngP4NXAewLfBngv4L2B9wG+LfC+wGuA9wO+HfD+wLcHvgPwHYHvBHwA8IHABwEfDHwI8KHAhwEfDnwE8J2BjwQ+Cvho4LsAHwN8LPBxwHcFPh74BOATgU8CPhn4FOC1wOuATwVeD3wa8OnAG4DvBnx34DOAzwS+B/BZwPcEPhv4XsD3Br4P8H2BzwG+H/D9gR8AfC7wA4EfBHwe8IOBHwL8UOCHAT8c+HzgRwBfAPxI4EcBPxr4McCPBb4Q+HHAFwE/HvgJwE8EfhLwk4EvBn4K8H8BPxX4acBPB34G8DOBnwX8bODnAD8X+HnAzwd+AfALgV8E/GLglwC/FPhlwC8H/m/gVwC/EvhVwK8Gfg3wa4FfB/x64DcAvxH4TcD/A/xm4LcAvxX4bcBvB34H8DuB3wX8buD3AL8X+H3A7wf+APAHgT8E/GHgjwB/FPhjwB8H/gTwJ4E/Bfxp4M8Afxb4c8CfB/4C8P8C/x/wF4G/BPxl4K8AfxX4a8BfB/4G8DeBvwX8beDvAH8X+HvA3wf+AfAPgX8E/GPgnwD/FPhnwPV/r/1amL3/XtunoDl903TZX2nVewGPYdop/3vtN3D8X2GzbiILwwHgAvRvkAm6daY1wgVTyNKN+t9rvxXaM1Kp/IkMn1QVJqLMy+C0KfPvhfbKWKLe6MnI74X5dxBVt5fjBA7g/mFRbt2Zr+0136TSaWfrv9T2EdDNnzleJ3Sd/VOgLfxlUe7Gizbeso9NvUro9q/C3Me4RABj42N7gPrc4gD1t8UBytXK6cJ/qWkL0hpGVwvKhf8oK4gLyo3//iqMC8qN/9RqY7OgtDG9jtdsVOuS001W14Y2bZoLTsK4/FXAuFwnx3e8tFH1t4DcnR35rl6RvcrrWyxrv7Pl7+qt4y372MLqCbVJFyYlRW0sY3RltaBtG7sVSKJD1xhty11sscBx5ZmmaVsP+vuCjwqUf7s2uT2w6Sv87QTKv71A+es0y4TKX+raWwcHyr+DQPmvIFD+K5Dyx6eNZX1YbK8+Lfuo+ixxoB6VCNSjFQXq0YqC/YiUHdExx8tf958dBcq/1KLcrq5ulLbJfYwr5auBv7IDDXNlgYa5iuWGKTjzFqv0qzjQMFfN14a5mgMNczWBhtkpHjH9Tg40zNVzvWHqJZGVBCpolxxf69cNc1UBudd3ZK1/DYtTYItl7a/vyG1Hm+da1rRYFvG5FjmMa8W78G6ca1k7Lig3zrWsExeUG+daOts+19LZaz7XovtV3WR1bejcprngJGy+NQRsvg1z3NbVk5A1BeTeyBFbd12L9pXFsvY3snyupbO37GMLqyfUJl2YxK+br6tr6+X46ppevFhPYvHCgX3YLhKLFwL7sOsLnueROtdU5kD5lwnIvYFA+dM08bF9nsNie/XLLJ7n2NCBerShhGEoUI82EuxHpP5veWMHxs+NBcp/E8u7U4J/hC5mNG7igGG7qQuGrUTD7OpAw+wq0DA3s9wwO3rLPjb1KqHbzRxomJvna8Ps5kDD7CbQMLeIR0x/Cwca5pYunOfYVKCCburAeY7NBeTu6sgad3eLU2CLZe13deQ8xz0F9tLaKsevA2pZuwu0lW453kfoznsricHbkT5ia4v10mJZ+1u0d8b4EdsHc8H42doF4+cHgX2whAPruAmBjs0XWMf1HVzHTTpwyyApUP7lDtT7cgG5KwTqfUUW9sEs9lN+ucV9sEoH6lGlQD2qEqhHVYL9p9T97h4CeugheL97oUrwBAE7olpAD9VED/jY7lcslp9fbbFf6Smgz56C9epEofNK21hePRY8SCg2OdmmTe5j7JXrEyipCto7vq7q93aggvbJ1wq6bdyD+ts6UEH75noF1WZjH4EKulWOr63rhtlLQO6tHVlbr7FoIlssa39rR/bfTrS4/9Yvx/ffGmUVaCvJHO8jdOfdT2KZ0pE+YjuL9dJiWfvl8T00J4yf7VywziXuE/QXWOfpL7iOeoLQLGV7AT1sn4V9CYvl529vcf1wBwF9YpqunsJ04UMsO9rsCF0tKBc+xLJTXFBufIhlQFxQbnyIZWBcUAn/dQcKalBcUAn/TQcKanBcUAn/bQcKakhcUAn/XQcKamhcUAn/fQcKalhcUAn/QwcKanhcUAn/YwcKakRcUAn/UwcKaue4oBL+5w4U1Mi4oBL+lw4U1Ki4oBL+1w4U1Oi4oBL+tw4U1C4u7PdK3JsZI7AvN0Z4v1fi/t1YAT2MzcJ+r8Xy88da3O8dJ6BPTLOt13QorsBb9rFd3xKeXTnw2bVNAH5boKUUsWsb++mOt1jppOQe38Z6GYme8LSp0wkWO5i2kE6xt+yTyw1XEufWjuDcyhGcPdu4gbNISJ+eXZxLBy3NV4D3iUrHkxRNVjRFUa2iOkVTFdUrmqZouh4rbCtNd0a+gJC6Y9J9fGGAIm3LMKlNThe8jy9UFw0wAO4mabWgmaczewcU3wYyLWN52jajJ0UfMZMwYvoNFkff3dpkx+JIRHusyrx7QFpTE/XTKv2pVdN6+NPrKqvr63uW+36yrqquamqyumH61Eq/urJapVlfl6xW2SXr6v3pibqq6dmcKuzexn6vq58Zrk0VtCJmCEwVZub4VEHLPVNoqmB7vWM3wGqrI8B0bZbRHgJrCDrNDbymNYRsjfiTc3vExydJdTEL6vGe2RjxdWZ/ec0jflCmtkf8yRYq6vSGpmeWxUq/pyMjvk2ZZ5O0/OryZLJHuQ5XPS3hV0yrT1Ynk9OmViTqE3X1yek9K/yeDRXJivL6afVTVZp1fkOioa6+Z0N1E65sjvizhUb8vVwb8bUi9hIY8ffO8RFfy723IyP+noDVdrr7CIzS+4Blks1Rus7Befm+UPfmZGOU3pfNy+dkYV5eZ3Fevq/FzmSOI6O0TZn3c3Revp/QKL2/a6O0VsT+AqP0ATk+Smu5D3BklJ4DWG3Py22W0VyBEX/ucpiXT3VwXn4g1OODsjHiH8jm5QdlYV4+1eK8/ECLlf4gR0Z8mzLPc3RePk9oxD/YtRFfK+JggRH/kBwf8bXchzgy4h8EWG2ne6jAKH3ocpiX1zs4Sh8Gde/wbIzSh7FR+vAsjNL1Fkfpwyx2Joc7MkrblHm+o6P0fKFR+gjXRmmtiCMERukFOT5Ka7kXODJKHw5Ybad7pMAofeRyGKWnObh6fhTUvaOzMUofxVbPj87C6vk0i6vnR1nsTI52ZJS2KfMxjq6eHyM0Sh/r2iitFXGswCi9MMdHaS33QkdG6aMBq+3Vc5tldJzAiH8crJ5LlL9uTBMELJ9FbWTrUiLa03iBaJGA3FXtc7sN6csdEnL3yNLfIySiPb7F8vF75PjfBOwmVNbH53jb1jIfLyD3CQJ9+wlkoiBx+VCi/E90oPxPFJD7JIHyPylgomi7zzu+Tf6U/dFCfd7JDtT5kwXkXixQ5xcL9nk9hcr/FAfK/xQBuf8lUP7/ykKfd3Kb/Cl7fXlfos5vk+NzmelCbb2XI3MZi+Xj98rxucxBUNae3XRF6mWRUHvcNsfL6HCh9tjXkfZosXz8vjle1rVCZb2dI3+zaXMdabscH2d1ehJlvX2O1/EpQnV8B0f6M4vl47sic0+L84ZT7c0bRPY8dd0+VaB+nyYwZzwN5oza3YGUu17jXuI1fVRAc/0Rq9PbNIf7BMJNgd9rgc8BfhDww4EfDXw6cP0vfjGPecxjHvOY5wvfQtEZZBzFpZeJMC6eDvwM4KsqOrNN06lUvf6B4zN9bNsvUb5C3dDysXkq1eceVBdngSLPljwgh0bTWZAJus8mCsPH9qnUceYGdIIZkv5ZFo3xs4Uqi+2FBZsyn+PABOScPDx8pv/m4NkC+3IPyPEFFf03FzsKlPdAocWFNpZxnmuxPVosa3+gA/VmJ4F6c16O9xNa7gECcp/vgNwDBeS+wAG5BwnIfaEDcg8WkPsiB+QeIiD3xQ7IPVRA7ksckHuYgNyXOiD3cAG5L3NA7hECcl/ugNw7C8j9bwfkHikg9xUOyD1KQO4rHZB7tIDcVzkg9y4Ccl9tUW69CL2eopUhPT331vM9PffR8wBtE2v7UNtK2m7QY6geT3TfqvsZ3eZ0/dNlcTUuBAjocpzQIZNrLOqyDeiSP7bSl9LtNW1yH+O1AhgbH9sL04ssLkxfZ3EhzNXK2cMBjNfbrJyuFtSLBbmP8Ya4oBL+yw4U1I1xQSX8Vx0oqJvigkr4rztQUP+JCyrhv+lAQd0cF1TCf9uBgrolLqiE/64DBXVrXFAJ/30HCuq2uKAS/ocOFNTtcUEl/I8dKKg74oJK+J86UFB3xgWV8D93oKDuigsq4X/pQEHdHRdUwv/agYK6Jy6ohP+tAwV1r82C0hvPXbzmjWe9h6KX5/XKr15U1OtVeilEz7L1BE7PDbTZqS0aPVjqflg3cV177hXceNb7eWcKbDwPyfHD5HrD9ToBuYc6cgnhPot7rxbL2repvzbQBvljC6sn1CZdOLBwXxuZer7MgYVEtCfKTcRlGs39Dtyku1+gU3vAYmHjLVSaZljZR8XtW0zrQYtl3xbKvthb9rFdJxKeTEO1jXNrR3Bu5QjOnm3cwFkkpE/PLs5EH5LmQ2CNPQz8EeCPAn8M+OPAnwD+JPCngD8N/BngzwJ/DvjzwF+APr0G8v+vcv9P0YuKXlL0sqJXFL2q6DVFryt6Q9Gbit5S9LaidxS9q+g9Re8r+kDRh4o+UvSxok8UfaroM0WfK/pC0ZeKvlL0taJvFH2r6DtF3yv6QdGPin5S9LOiXxT9qug3Rf+n6HdFfyj6U9FfipYo+lvLowq8QFGhojaKihS1VVSsqJ2i9oo6KFpBUYmiFRV1VFSqaCVFKxc16aIIdLGKellV0WqKOhU1f+VAP6sr9xqK1gT/MvBfS7nXVrSOos6K1lW0nqIuitZXVKZoA0UbKtpI0caKNlG0qaKuijZTtLmiboq2ULSlou6KtlK0tSJ97FhX7KSickUViioVVSnqAViwslYrd09F2yjqpai3oj6KtlXUV1GNon6KtlPUX9H2inZQtKOinRQNUDRQ0SBFgxUNUTRU0TBFwxWNULSzopGKRikarWgXRWMUjVU0TtGuisYrmqBooqJJiiYrmqKoVlGdoqmK6hVNUzRdUYOi3VhZ7K5eZiiaqWgP+A0nwLOUe09FsxXtpWhvRfso2lfRHEX7Kdpf0QGK5io6UNFBiuYpOhgyOKSo5bh5qHIfpuhwRfMVHaFoAYQ9EvhREKc9xDlauY9RdKyihYqOU7RI0fGKTmBhT1TukxSdrGixolMU/UvRqYpOg/RPB34G8DOBnwX8bODnAD8X+HnAzwd+AfALgV8E/GLglwC/FPhlwC8H/m/gVwC/EvhVwK8Gfg3wa4FfB/x64DcAvxH4TcD/A/xm4LcAv1XrzPagoP+L6EGy6mEp3aXGp+64y7zmzuKRNi0/kfI4+/0J9vuTzP0UC/8scz/Hwj/P3C+w8P9j7peY+xXmfo2532Dut5j7HeZ+j7k/YO6PmPsT5v6Mub9g7q+Y+xvm/o65f2Dun5j7F+b+jbl/Z+4/mXsJc+sejLoLmbuIuYuZuz1zr8DcKzJ3KXOvzNyrMncn5l6buTsz93rMvT5zb8DcGzH3Jszdlbk3Z+4tmLs7c2/N3D5zlzN3JXP3YO6ezN2bufsy93bMvQNzD2Duwcw9jLl3Zu7RzD2Wuccz9yTmrmXueuZuYO7DmXsBcx/J3Ecx9zHMvZC5FzH3Ccx9EnMvZu5/MfdpzH0Wc1/A3Bcx9yXMfRlz68GuhrhvYL/fyNw3Mfd/wO159ic4OJbxdKMuSNxWlNsr7HpMvK3Ivty357jcWubbBeS+o8i+HXSHYL3vKVT+dzpQ/ncKyH2XQPnfRcofH9sL8LS9/tPLXo+7EnX+bgfq/N0Cct8jUOfvaUWdz6Exyrdd9mEyJ6I9/lEW2/m9FvUnVd/vFajv9wnU9/sEx3hdoST6uxE5/l8oDwnZNjs78v8YFsvH3znHTwo9LFTW9zswpt8vIPcDAn3cA4J9nN6Ylij/Bx0o/wcF5H5IoPwfysI85v6i/Cn7rYTq/OgcH9efFurrd3FkXLdYPv4uOT6uPwFl7dlNV+y/RCXq5bgcL6Mnhdrjro60R4vl4++a42X9mFBZT3Tkv0RtzqkmOvBfohJlPTnH6/ijQnV8iiP9mcXy8afkeFk/J1TWD1ueP+n/9foJ0tPrWvp/vB4G/gjwR4E/Bvxx4E8AfxL4U8CfBv4M8Gcx3aIm/jy4XwD+X+D/A/4i8JeAvwz8FeCvAn8N+OvA3wD+JvC3gL8N/B3g7wJ/D/j7wD8A/iHwj4B/DPwT4J8C/wz458C/AP4l8K+Afw38G+DfAv8O+PfAfwD+I/CfgP8M/BfgvwL/Dfj/Af8d+B/A/wT+F/AlwP8G7kF5FAAvBN4GeBHwtsCLgbcD3h54B+ArAC8BviLwjsBLga8EfGXgqwBfFfhqwDsBXx34GsDXBL4W8LWBrwO8M/B1ga8HvAvw9YGXAd8A+IbANwK+MfBNgG8KvCvwzYBvDrwb8C2Abwm8O/CtgG8NPAHcB54EXg68Angl8CrgPYBXA+8JfBvgvYD3Bt4H+LbA+wKvAd4P+HbA+wPfHvgOwHcEvhPwAcAHAh8EfDDwIcCHAh8GfDjwEcB3Bj4S+Cjgo4HvAnwM8LHAxwHfFfh44BOATwQ+Cfhk4FOA1wKvAz4VeD3wacCnA28Avhvw3YHPAD4T+B7AZwHfE/hs4HsB3xv4PsD3BT4H+H7A9wd+APC5wA8EfhDwecAPBn4I8EOBHwb8cODzgR8BfAHwI4EfBfxo4McAPxb4QuDHAV8E/HjgJwA/EfhJwE8Gvhj4KcD/BfxU4KcBPx34GcDPBH4W8LOBnwP8XODnAT8f+AXALwR+EfCLgV8C/FLglwG/HPi/gV8B/ErgVwG/Gvg1wK8Ffh3w64HfAPxG4DcB/w/wm4HfAvxW4Pr/NR8pyu7/a+7Qxjwt9peJ9QFwTdNO+f+ajxY18ceKmvURNcNlAODi86OQCbp1pjUszzaChRL1/zUfLbJnnFLZExk+qSqL7cm2TZkfL7JXrp4ns5HzeFH+HUDdQWgC9oRFuXW/0Nlb9rGpVwndPlGU+xifFMDY+NjujG6z2Bk9ZbEzcrVyuvCfCk/brJyuFpQL/6nwTFxQbvynwrNxQbnxnwrP2SwoPdHb3Gu+gq77Vd1kdW14rqi54CSM6kcEjMupub4jr2R+SkDueke+m/a8RfvKYln79Za/m7a5t+xjC6sn1CZdmJQ8XyRTz61v1UZYYVqm0bzgwArJCwKd2n8tFjauLtI0betBfz/uVIGryv/L8ZUifUX7fwLl/6JA+es0y4TKX+pa00sOlP9LAnK/LFD+L5Pyx8f27oLF9uq/ZHFx6xUH6tErAvXoVYF69KpgPyK18v5avPLuv+aAkfu6bYyuVNA3LFdQwVmYWOG/4UAFfTNfK+hbcQ/qv+VABX071yuoniq+LlBBG3J8/VM3yjcF5N7NkfXPdyxODSyWtb+bI7d8bO71vxvv9Tux1/9evDPpxl7/+3FBubHX/0FcUG7s9X9oe6+/m9e816/7Vd1kdW34sKi54CRsvncEbL6ZOW7r6knIuwJy7+GIrfuRRfvKYln7e1je6+/mLfvYwuoJtUkXJvEfubDKtEhgv/djB/ZpPhbo2D4R2Kf5RHC/X+rcw6cOlP+nAnJ/JlD+n2XhNpnF9up/anGB43MH6tHnAvXoC4F69IVgPzJOaBz50vJuRRdv2cdW+p6Qbr90wND5KtcNHakK+rXlCuriX7t/7UAF/SZfK+i3cQ/qf+tABf3Ohf3erwRMndkO7Pd+IyD3Xo6sgX1vcWpgsaz9vRzZ711k8RrFDzl+jULL+r1AW9k3x/sI3Xn/ICD3HEf6iB8t1kuLZe3Pae+M8SO2Tu6C8fOjC8bP/QLW+U8OrG/9JNCx/SywvvWz8PqWxGncXxwo/18E5P5VoPx/zcI6ucX26v9icZ38Nwfq0W8C9ej/BOrR/wn2I1L3w34X0MPvgvfD9F/DjhcYT/8Q0MMfWbhvabH8/D8s9it/CujzT+F7hxME6tVflldRBQ/ciBnpfzkwkVjiwoEbiQr6d3yty//bgQqqP9xsFaMrFbSgbdyDFrTNfYyFuV5BtdmoW5HtCnpAjq8x60a5RGDqMNeRNeY29iqmb7Gs/bmO7ENNsLgPVWSxLKTaShuBPmJejvcRuvMuEpD7YEf6iLYW66XFsvYPju9rOGH8tM1140fqvHGxRcFxnYemKTFLkVg/bCegB5omPrbXDy2Wn0/xRtVnewF9YpqunkZ04YMFHWx2hK4WlAsfLFghLig3PlhQEheUGx8sWDEuqIT/ugMF1TEuqIT/pgMFVRoXVMJ/24GCWikuqIT/rgMFtXJcUAn/fQcKapW4oBL+hw4U1KpxQSX8jx0oqNXigkr4nzpQUJ3igkr4nztQUKvHBZXwv3SgoNaICyrhf+1AQa0ZF1TC/9aBglrLhf1eiXszawvsy60tuN87Tmi/dx0BPayThf1ei+Xnr2Nxv7ezgD4xTcUaD8UVeMs+tutbhWdXDnzWbRuA3xZoKUWs29Z+uutZrHRScmuMlstI9ISnTZ12sdjBoBqLvWWfXG64kjjLHcGZdATnn0Vu4CwS0qdnF+fSQUvzFeB9fdWQyxRtoGhDRRsp2ljRJoo2VdRV0WZ6rLCtNN0ZVQoIqTsmbWEUBijStgxlbXO64H18obrYHHrubpJWC5p5OrN3QPFtINMylqdtM7os+oiZhBHT39zi6NutbXYsjkS0x6rMWwSkNTVRP63Sn1o1rYc/va6yur6+Z7nvJ+uq6qqmJqsbpk+t9Ksrq1Wa9XXJapVdsq7en56oq5qezanCFm3t97r62dK1qYJWxJYCU4XuOT5V0HJ3F5oq2F7v6AZYbXUEmK7NMtpKYA1Bp7mB17SGkK0Rf4PcHvHxSVJdbA31OJGNEV9n9pfXPOIHZWp7xN/AQkWd3tD0bG2x0iccGfFtyuyTtPzq8mSyR7kOVz1NTeOn1Serk8lpUysS9Ym6+uT0nhV+z4aKZEV5/bT6qSrNOr8h0VBX37OhemlSWRvxfaERP+naiK8VkRQY8ctzfMTXcpc7MuInAKvtdCsERukKsEyyOUpv7OC8vBLqXlU2RulKNi+vysK8fGOL8/JKi51JlSOjtE2Zezg6L+8hNEpXuzZKa0VUC4zSPXN8lNZy93RklK4CrLbn5TbLaBuBEX+b5TAv38TBeXkvqMe9szHi92Lz8t5ZmJdvYnFe3stipe/tyIhvU+Y+js7L+wiN+Nu6NuJrRWwrMOL3zfERX8vd15ERvzdgtZ1ujcAoXbMc5uWbOjhK94O6t102Rul+bJTeLguj9KYWR+l+FjuT7RwZpW3K3N/RUbq/0Ci9vWujtFbE9gKj9A45PkpruXdwZJTeDrDaTndHgVF6x+UwSnd1cPV8J6h7A7IxSu/EVs8HZGH1vKvF1fOdLHYmAxwZpW3KPNDR1fOBQqP0INdGaa2IQQKj9OAcH6W13IMdGaUHAFbbq+c2y2iIwIg/BFbPJcpfn7fvImD5DG0rW5cS0Z7GC0RDBeQ+rH1utyF9uUNC7sOz9PcIiWiPb7F8/MNz/G8CugmV9bAcb9ta5mECcg8X6NuHk4mCxOVDifIf4UD5jxCQe2eB8t85YKJou88b1jZ/yn6AUJ830oE6P1JA7lECdX6UYJ+nLwhLlP9oB8p/tIDcuwiU/y5Z6PNGts2fsteX9yXq/IIcn8tsJtTXH+nIXMZi+fhH5vhcpjeUtWc3XZF6WSTUHo/J8TLaTqg9HutIe7RYPv6xOV7WGwmV9SJH/mbT5jrSohwfZ3V6EmV9Qo7X8Q2F6viJjvRnFsvHd0Vm+oGpqOU8xt68QWTPU9ftMQL1e6zAnHEszBm1uwMpd73GvUTnA1x/xGpc2+Zwn0C4DeH3jYBXAe8NfDvgA4BvBlz/i1/MYx7zmMc85vnCt1C0KxlH8fDi+jAujgO+K/BVFY1v23QqVa9/4PhMH9v2S5SvUDe0fGyeSvW5B9XFBFjDmpiNU6kTIBN0TyQKw8f2qdTO5gvvCWZI+hMsLuJPFKosthcWbMo8yYEJyKQ8PHym/+LgXIG/OVic4wsq+m8uOgiU9ylCiwttLOOcbLE9Wixr/5Qcrze6vZwn0F5Oc6C9rCDQXk53pL1MsdheLJa1f7oD7eV8gfZylgPtpUSgvZztSHuptdheLJa1f7YD7eUCgfZyngPtZUWB9nK+I+2lzmJ7sVjW/vkOtJcLBdrLRQ60l44C7eViR9rLVIvtxWJZ+xc70F4uEmgvlznQXkoF2svljrSXeovtxWJZ+5c70F4uFmgvVzrQXlYSaC9XOdJepllsLxbL2r/KgfZyiUB7udaB9rKyQHu5zpH2Mt1ie7FY1v51DrSXSwXay40OtJdVBNrLTY60lwaL7cViWfs3OdBeLhNoL7c40F5WFWgvtzrSXnaz2F4slrV/qwPt5XKB9nKHA+1lNYH2cqcj7WV3i+3FYln7dzrQXv4t0F7ucaC9dBJoL/c60l5mWGwvFsvav9eB9nKFQHt5wIH2srpAe3nQkfYy02J7sVjW/oMOtJcrBdrLIw60lzUE2sujjrSXPSy2F4tl7T/qQHu5SqC9POFAe1lToL086Uh7mWWxvVgsa/9JB9rL1QLt5RkH2staAu3lWUfay54W24vFsvZt6k9f5ttS0cqQnr7DoM9l67Om+vycPhOkzznovVu9H6XX2PW6oV4L0fM7bbPqcVj3LXuSDzhJXAaU+FjHbIt3idqALvljK30p3drUgRTGvdrK9BleoeUKNdTiBb+9LXZArlbOHg5g3Mdm5XS1oF4syH2M+8YFlfBfdqCg5sQFlfBfdaCg9osLKuG/7kBB7R8XVMJ/04GCOiAuqIT/tgMFNTcuqIT/rgMFdWBcUAn/fQcK6qC4oBL+hw4U1Ly4oBL+xw4U1MFxQSX8Tx0oqEPigkr4nztQUIfGBZXwv3SgoA6LCyrhf+1AQR0eF1TC/9aBgppvs6D0xnN3r3njWe+h6OV5vfKrFxX1epVeCtGzbD2B03MDbXZqi0YPlrof1k1c1575ghvPej9vvMDG8ws5fvhDb7juLSD3fx05/HGExb1Xi2Xt29RfG2iD/LGF1RNqky4cWDiirUw9t35godJiWgssNpq2UCjF3rKP7cKq8GQKyzbOckdwJh3BSf8OKBHxkcRZJKRPzy7ORB+S5pFglB0F/GjgxwA/FvhC4McBXwT8eOAnAD8R+EnATwa+GPgpYKzUQP7/Uu5TFZ2m6HRFZyg6U9FZis5WdI6icxWdp+h8RRcoulDRRYouVnSJoksVXabockX/VnSFoisVXaXoakXXKLpW0XWKrld0g6IbFd2k6D+KblZ0i6JbFd2m6HZFdyi6U9Fdiu5WdI+iexXdp+h+RQ8oelDRQ4oeVvSIokcVPabocUVPKHpS0VOKnlb0jKJnFT2n6HlFLyj6L+iiCHTxP+V+UdFLil5u2/yPAfp5RblfVfQa+JeB/+vK/YaiNxW9pehtRe8oelfRe4reV/SBog8VfaToY0WfKPpU0WeKPlf0haIvFX2l6GtF3yj6VtF3ir5X9IOiHxX9pOhnRb8o+lXRb4AFK+v/Kffviv5Q9KeivxQtUfS3Lns1QBQoKlTURlGRoraKihW1U9ReUQdFKygqUbSioo6KShWtpGhlRasoWlXRaoo6KVpd0RqK1lS0lqK1Fa2jqLOidRWtp6iLovUVlSnaQNGGijZStLGiTRRtqqiros2KW5bF5srdTdEWiraE33AS1F25t1K0taKEIl9RUlG5ogpFlYqqFPVQVK2op6JtFPVS1BsGyj7FLcfNbdVLX0U1ivop2k5Rf/hxe+A7QJz2EGdH5d5J0QBFAxUNUjRY0RBFQ1nYYco9XNEIRTsrGqlolKLRinaB9McAHwt8HPBdgY8HPgH4ROCTgE8GPgV4LfA64FOB1wOfBnw68AbguwHfHfgM4DOB7wF8FvA9gc8GvhfwvYHvA3xf4HOA7wd8f+AHaJ3ZHhS6qMq/ADo/i+ku/U823XGXec2dxdFtW/7dyEL2+3Hs90XMfTwLfxJzn8zCL2buU1j4U5n7dOY+k7nPZu5zmft85r6QuS9m7kuZ+3LmvoK5r2Lua5j7Oua+gblvYu6bmftW5r6due9k7ruZ+17mvp+5H2Tuh5n7UeZ+nLmfZO6nmftZ5n6euf/L3C8y98vM/QZzv8Xc7zD3e8z9AXN/xNyfMPdnzP0Fc3/F3N8w93fM/QNz/8TcvzD3b8z9O3P/xdx6hKDuNsxdzNwdmHtF5l6JuVdl7tWZey3m7szcXZh7A+bemLm7MncNc/dn7u2Zewfm3om5BzL3YOYeytzDmXtn5h7F3Lsw967MPYW565i7nrmnM7ce7GqIe2/2+z7MvS9zzwG359mf4OBYxtONuiAxtzi3V1n1mDi32L7cB+a43FrmAwXkPqjYvh10kGC91wsQEuU/z4Hynycg98EC5X8wKX98Ci3rg7bXf3rZ63FXos4f4kCdP0RA7kMF6vyhrajzOTRG+bbLPkzmRLTH38FiOz/Mov6k6vthAvX9cIH6frjgGK83lyT6u5eETxBExXekkG37cns32rrF8vFfzvHTIkcJlfV8B8b0+QJyHyHQxx0h2MfpjWmJ8l/gQPkvEJD7SIHyPzIL85j5xflT9kmhOv9ajo/rJwj19a87Mq5bLB//9Rwf14+DsvbspitSL4uE2uNbOV5Gi4Ta49uOtEeL5eO/neNlfaxQWb+XpbLOoTmv/16Oj7M6PYmy/iDH6/gxQnX8Q0f6M4vl43+Y42V9slBZH2V5/tRB0U+Qnl7XWuI1nY/S/GjgxwA/FvhC4McBXwT8eOAnAD8R+EmYbnETXwzuU4D/C/ipwE8DfjrwM4CfCfws4GcDPwf4ucDPA34+8AuAXwj8IuAXA78E+KXALwN+OfB/A78C+JXArwJ+NfBrgF8L/Drg1wO/AfiNwG8C/h/gNwO/BfitwG8DfjvwO4DfCfwu4HcDvwf4vcDvA34/8AeAPwj8IeAPA38E+KPAHwP+OPAngD8J/CngTwN/BvizwJ8D/jzwF4D/F/j/gL8I/CXgLwN/BfirwF8D/jrwN4C/Cfwt4G8Dfwf4u8DfA/4+8A+Afwj8I+AfA/8E+KfAPwP+OfAvgH8J/CvgXwP/Bvi3wL8D/j3wH4D/CPwn4D8D/wX4r8B/A/5/wH8H/gfwP4H/BXwJ8L+Be9AOC4AXAm8DvAh4W+DFwNsBbw+8A/AVgJcAXxF4R+ClwFcCvjLwVYCvCnw14J2Arw58DeBrAl8L+NrA1wHeGfi6wNcD3gX4+sDLgG8AfEPgGwHfGPgmwDcF3hX4ZsA3B94N+BbAtwTeHfhWwLcGngDuA08CLwdeAbwSeBXwHsCrgfcEvg3wXsB7A+8DfFvgfYHXAO8HfDvg/YFvD3wH4DsC3wn4AOADgQ8CPhj4EOBDgQ8DPhz4COA7Ax8JfBTw0cB3AT4G+Fjg44DvCnw88AnAJwKfBHwy8CnAa4HXAZ8KvB74NODTgTcA3w347sBnAJ8JfA/gs4DvCXw28L2A7w18H+D7Ap8DfD/g+wM/ANuJoqPVe1uv6dA92mf0sW3HtG9rnlZDy6c+AK5p2j73oLo4priJH0vsr6gZLgMAF5+PgUzQfSwx0PBpI1goGRqUCWZQ+scU2zNOjy2WqSy2J9s2ZV5YbK9cPU9mI2dhcf4dQG0vNAE7zqLcul/o5i372NSrhG6PK859jIsEMDY+tjujuRY7o+MtdkauVk4Xvqt/gs3K6WpBufBd/RPjgnLju/onxQXlxnf1T7ZZUHoWXO01X0HX/apusro2nFzcXHASRvXRAsblJ7m+I69kPl5A7k8d+XbWYov2lcWy9j+1/O2sam/ZxxZWT6hNujApWWwbo22A+qOAY9rab+Cn5Phqgb6me4pAx/Yvi3LjCqNOs0yogkpdbTnVgfI/VUDu0wTK/zRS/vjYXmG22F79Uy0ucJzuQD06XaAenSFQj84Q7EekVl/PjFdf/TMdMHTOynVDR6qCnm25ggpa4mKFf7YDFfScfK2g58Y9qH+uAxX0PBemimcJVNAvcnwNTDfKcwTk/tKRNbDzLU4NLJa1/6UjNz1s7vdeEO/3OrHfe2G8O+XGfu9FcUG5sd97cVxQbuz3XmJ7v7en17zfq/tV3WR1bbhEeL/3fAGb75sct3X1JOQCAbm/dcTWvdSifWWxrP1vLe/39vSWfWxh9YTapAuT+EtzfRLfWU3ihwrs915meZVJ8M+8xAr/Mgcq6OX5WkH/bbmCuvjXnP92oIJeka8V9Mq4B/WvdKCCXuXCOv3lAjb8Dw6s018hIPePjsxdrrY4d7FY1v6PjqzTD21rL61rcvySqJb1aoG28kuO9xG6875GQO5fHekjrrVYLy2Wtf9re2eMH7H1DReMn2tz3fiROo95ncB5zOsEz2Pqv+NZT2CWcr2AHq7Pwvlmi+XnX29xQ/8GAX3eIHzOt4tAvbrR8uxXcIFbrHO90YEB4CYXjlFKVND/xMco/f84UEFvztcKekvcg/q3OFBBb831CqrNxpsFTOjfc3xtQDfKmwTk/sORtYHbLJrIFsva/8OR9cMuFtcPb8/x9UMt620CbWVJjvcRuvO+XUDuvx3pI+6wWC8tlrX/d3w+ygnj5w6bGF3d5XbhAsOdcUG5cYHhrrig3LjAcHdcUG5cYLgnLqiE/7oDBXVvXFAJ/00HCuq+uKAS/tsOFNT9cUEl/HcdKKgH4oJK+O87UFAPxgWV8D90oKAeigsq4X/sQEE9HBdUwv/UgYJ6JC6ohP+5AwX1aFxQCf9LBwrqsbigEv7XDhTU43FBJfxvHSioJ2wXlIunplzYj3oyLig39qOeigvKjf2op+OCcmM/6hkXDoxOFjjRXNghtw+D6UNwdwocBmvTwX6l1I/tw2DPWjwMZrGs/TY5Xm90e5ki0F6KHWgvdwm0l3aOtJfnLLYXi2Xtt3OgvdQKtJcVHGgvdwu0lxJH2svzFtuLxbL2SxxoL3UC7aXUgfZyj0B7WcmR9vKCxfZisaz9lRxoL1MF2suqDrSXewXay2qOtJf/WmwvFsvaX82B9lIv0F7WcKC93CfQXtZ0pL38z2J7sVjW/poOtJdpAu1lHQfay/0C7aWzI+3lRYvtxWJZ+50daC/TBdpLFwfaywMC7WV9R9rLSxbbi8Wy9td3oL00CLSXDR1oLw8KtJeNHGkvL1tsLxbL2t/Igfaym0B72dSB9vKQQHvp6kh7ecVie7FY1n5XB9rL7gLtpZsD7eVhgfayhSPt5VWL7cViWftbONBeZgi0l60caC+PCLSXrR1pL69ZbC8Wy9rf2oH2MlOgvSQdaC+PCrSXckfay+sW24vFsvbLHWgvewi0lyoH2stjAu2lhyPt5Q2L7cViWfs9HGgvswTayzYOtJfHBdpLL0fay5sW24vFsvZ7OdBe9hRoL9s60F6eEGgvfR1pL29ZbC8Wy9qX0l+h5fpjsyzeLnZD5gKLMr/jiMyFFmV+1xGZ21iU+T1HZC6yKPP7jsjc1qLMHzgic0+LMn/oiMw9LMr8kSMy97Yo88d5WM6f5KHMn+ahzJ/locyf56HMX+ShzF/mocxf5aHMX+ehzN/koczf5qHM3+WhzN/nocw/5KHMP+ahzD/locw/56HMv+ShzL/mocy/5aHM/5eHMv+ehzL/kYcy/5mHMv+VhzIvyUOZ/85Dmb12+SdzQR7KXJiHMrfJQ5mL8lDmtnkoc3EeytwuD2Vun4cyd8hDmVfIQ5lL8lDmFfNQ5o55KHNpHsq8Uh7KvHIeyrxKHsq8ah7KvFoeytwpD2VePQ9lXiMPZV4zD2VeKw9lXjsPZV4nD2XunIcyr5uHMq+XhzJ3yUOZ189DmcvyUOYN8lDmDfNQ5o3yUOaN81DmTfJQ5k3zUOaueSjzZnko8+Z5KHO3PJR5izyUecs8lLl7Hsq8VR7KvHUeypzIQ5n9PJQ5mYcyl+ehzBV5KHNlHspclYcy98hDmavzUOaeeSjzNnkoc688lLl3HsrcJw9l3jYPZe6bhzLX5KHM/fJQ5u3yUOb+eSjz9nko8w55KPOOeSjzTnko84A8lHlgHso8KA9lHpyHMg/JQ5mH5qHMw/JQ5uF5KPOIPJR55zyUeWQeyjwqD2UenYcy75KHMo/JQ5nH5qHM4/JQ5l3zUObxeSjzhDyUeWIeyjwpD2WenIcyT8lDmWvzUOa6PJR5ah7KXJ+HMk/LQ5mn56HMDXko8255KPPueSjzjDyUeWYeyrxHHso8Kw9l3jMPZZ6dhzLvlYcy752HMu+ThzLvm4cyz8lDmffLQ5n3z0OZD8hDmefmocwH5qHMB+WhzPPyUOaD81DmQ/JQ5kPzUObD8lDmwx2R+cliezLPd0TmpyzKfIQjMj9tUeYFjsj8jEWZj3RE5mctynyUIzI/Z1Hmox2R+XmLMh/jiMwvWJT5WEdk/q9FmRc6IvP/LMp8nCMyv2hR5kWOyPySRZmPd0Tmly3KfIIjMr9iUeYTHZH5VYsyn+SIzK9ZlPlkR2R+3aLMix2R+Q2LMp/iiMxvWpT5X47I/JZFmU/NwzXA0/JQ5tPzUOYz8lDmM/NQ5rPyUOaz81DmcxyReROLMp/riMw3WLRJzsvDun1+Hsp8QR7KfGEeynxRHsp8cR7KfEkeynxpHsp8WR7KfHkeyvzvPJT5ijyU+co8lPmqPJT56jyU+Zo8lPlaV/boCuzJfF0eyny9IzIXW6zbNzgiczuLMt/oiMztLcp8kyMyd7Ao838ckXkFizLf7IjMJRZlvsURmVe0KPOtjsjc0aLMtzkic6lFmW93ROaVLMp8hyMyr2xR5jsdkXkVizLf5YjMq1qU+W5HZF7Nosz3OCJzJ4sy3+uIzKtblPk+R2Rew6LM9zsi85oWZX7AEZnXsijzg47IvLZFmR9yROZ1LMr8sCMyd7Yo8yOOyLyuRZkfdUTm9SzK/JgjMnexKPPjjsi8vkWZn3BE5jKLMj/piMwbWJT5KUdk3tCizE87IvNGFmV+xhGZN7Yo87MWZVZbxF4RpNWDyF8AOmgDv7dVpPdW9V6j3nvTe1F6b0bvVei1e72Wrdd29VqnXvvTa2F6bUivlei1Az2X1nNLPdfScw9ti2vbVNtq2nbRY7ke23RfX6ZI9wW6bei6onWn7zlsqqiros0Uba6om6ItFG2pqLuirRRtrXWiyFeU1LpWVKGoUlEVke974G8rod5R9K6i9xS9r+gDRR8q+kjRx4o+UfSpos8Ufa7oC0VfKvpK0deKvlH0raLvFH2v6AdFPyr6SdHPin5R9Kui3xT9n6LfFf2h6E9FfylaouhvUG6BokJFbRQVKWqrqFhRO0XtFXVQtIKiEkUrKuqoqFTRSopWVrSKolUVraaok6LVFa2haE1FaylaW9E6ijorWlfReoq6KFpfUZmiDRRtqGgjRRsr2kTRpoq6KtpM0eaKuinaQtGWiror2krR1ooSivRmdFJRuaIKRZWKqhT1UFStqKeibRT1UtRbUR9F2yrqq+u0on6KtlPUX9H2inZQtKOinRQNUDRQ0SBF+r/u9X+/6/9C1/8Nrv8rW/93tP4vZf3fwvq/dvV/z+r/YtX/Tar/q1P/d6X+L0f934b6v/70f9/p/4LT/42m/ytM/3eW/i8p/d9K+r+G9H/v6P+i0f/Nov+rRP93h/4vC/3fDvq/DvS3//W38PW34fW30vW3w/W3tPW3pfW3lvW3h/W3ePW3afW3WvW3S/W3PPW3LfW3HvW3D/W3APW38fS34vS30/S3xPS3tfS3pvS3l/S3iPS3efS3avS3W/S3TPS3PfS3LvS3H/S3EPS3AfRdeX13XN+l1neL9V1bffdU38XUdxP1XT19d03f5dJ3m/RdH333Rd8F0Xcj9F0BfXZenyXXZ6v1WWN99lafRdVnM/VZRX12T59l02e79FknffZHn4XRZ0P0WQl9dkDvpeu9Zb3Xqvce9V6c3pvSezV670Kv5eu1bb3Wq9c+9VqgXhvTa0V67USvJei5tZ5r6rmXnoto21zbqtp207aMHtv1WKf7ft0XHlvU3K67kDa+AfC6/fabvufe+5Xtt1fZnvvP2m/G3rMOKps7Y7/dy/Y6YPq+DbP2mqsDNZhGnGEacU/TiHubRpxPIq67bMS6adOWjfOlaWbfmEb8wTTiLwbi/Wma2d+mEVcpMIzYyTTimgWZ62Vt08w6m0ZczwDlbqaZzTSNONs04j6mEY8w0MsiEmdV4HvvP0cF2n+/sr0ayqbutf/saXO07+0Gqa9faCjKhqYRNzWN2K0wc/ESppmVm0YcUNja4hpvIM8kU1i1phHrDVAeaprZfNOIRxqgPNM0s3NNI15ggPIi08wuMY14mQHKW0wzu8004h0GKJ8yzewZ04jPGaBco41hZmubRlzPNGKZacREm8z10pPESd2z7maQ+vOmovzPNOIrphHfMBDvPdPMPjSN+Furi6tdUebyrFBkCKujacSVDVBuaprZ5qYRtzRA2cc0sxrTiP0NUO5gmtlOphEHGqDc1TSzCaYRJxmg3Ms0s31MI84xQHm3aWb3mUZ8yDTio6YRXzbQyzskTuqe9eS2hrD+ZRrxDNOI57TNXBEXmWZ2qWnEO9q2VvWPm2bxlGnEZw00+J1pZj+YRvwpQ5QF6vejIVzHAvO465C4awPvt+++dQeVzZg9bfqBLQuQRhwWIdMJpplON404LoJ6b44Ql1a+jAC/ZhrxQ9OI35tG/Ns0Ysdiw4gbmkbcjETMtCgTpplWRch0W9NMt4+Q6XDTTHeJkOmiCHHPNAV8sWnElVcwR3tEhLiLVzAEfGaETD8yzfSrCJn+aprpXxEyvajEMNMrS8wzvdE009siZLrNiuZx948Q98oIcb+MELd7R0MlV5hG7GMasb9pxEGmEXc2jTifRMy0RO4yzfRB04hPmUZ8wTTiG6YR3zeN+KVpxB9MI3YoNYy4mmnE9UwjdjWNWGEasT+J2Bl4fd2sWY2tY86c6fvuN2XPugOnTJ2x35Q5M+ZNp1EHmuZ5OImYaaM8wTTTU00jfhsB7UorGWa6jmnEaSuZo70hQtx7TAE/ZhrxrwhoV1jZMNNOphEHr2yOdqxpppNNI+5uGnF2BDF3XM087qDVDAGPMI04OwLaoyLEXWgK+CTTiNdGQPtQhLiPmQJ+xjTiFxHQNp6wN4xb1MkQ8AqmETeLgHbbCHG3MwU8wDRiQwS0h0SIO98U8DGmES+LgPaWCHHvMAV8n2nEtyKg/co00x9MI668ujnasghxN17dEHA304gDIqAdFyHuRFPAU00jzo+AdnGEuKeZAj7HNOIdEdA+YZrpc6YRv4qAtnAN87jFaxgCXtE0YrcIaGdFiHuQKeD5phFPIxE3WBZt8JY1TeAs05xvjaCnO00zfTNCpl9FiPudKeBfTCN2WtMc7ZgIcevXNAQ80zTiYSSiURVeYJrzhRH0dKlppo9GyPSVCHHfMAX8nmnEJRHQbr+Wedyd1zIEPJlEzHC9t940z5mmEQ8jEc2ajWnOF0Yom0tNM30gQqaPmGb6SYRMf40Q9w9TwAVrG0Zcf21ztJUR4vY0BdzXNOKkCGjnRIg71xTwoaYRz42A9v0Icb8xBfyzacS/TSOuvE5zRKNOtNM6hjn765gruNI005ERMh1jmumBETI9LkLcE00Bn2oa8aYIaH+MEHepsZIp4HamETuTiEbtZn3TnHt3NtdTjWmmUyNkOidC3LmmgA81jXhuBLTvR4j7jSngn00j/mkaseO6zRGN6v4q6xrmvNW65gpOmmY6PEKmo0wz3T9CpsdEiLvIFPBi04jXR0D7XYS4f5kCLlrPMOJaJKJRu1nXNOee65nrqY9pplMiZLp3hLj7mQKeZxrxrAho34gQ91NTwN+YRiwkX+8yqsLFXQxz3qiLuZ66mmY6MEKm4yPEnWwKeJppxAUR0J4VIe55poAvMY34QAS0r0SI+4Yp4PdMIy6JgLbT+uZx11rfEHAX04i9I6AdGSHuGFPAE00jzouAdnGEuKeZAj7HNOIdBmjvLGgKZ3KlGONmfKUYIw6LkOkE00ynm0Y0uVKMcW+OEDfjK8UY8TXTiB+aRvzeNOLfphEzvlKMETc0jWhypRjjJkwzrYqQ6bammW4fIdPhppnuEiHTRRHinmkK+GLTiCZXijHuERHiZnyleKmKImT6kWmmX0XI9FfTTP+KkGnGV4oxosmVYox7o2mmt0XI1ORKMcbdP0LcKyPE/TJC3IyvFGPECtOIfUwj9jeNOMg04s6mEU2uFGPcu0wzfdA04lOmEV8wjfiGacT3TSN+aRrxB9OIGV8pxoirmUZczzRiV9OIFaYRDa4UY9SBpnmaXCnGuCeYZnqqacRvI6DN+Erx0lmvaUSTK8UY94YIce8xBfyYacS/IqDN+EoxRuxkGtHkSjHGHWua6WTTiLubRpwdQUyTK8VLLYtMb5FixBGmEWdHQHtUhLgLTQGfZBrx2ghoH4oQ9zFTwM+YRvwiAlqvk3ncjK8UL+3HTCNuFgHtthHibmcKeIBpxIYIaA+JEHe+KeBjTCNeFgHtLRHi3mEK+D7TiG9FQPuVaaY/mEY0uVKMccsixM34SjFG7GYacUAEtOMixJ1oCniqacT5EdAujhD3NFPA55hGvCMC2idMM33ONOJXEdCaXCnGuBlfKcaIK5pG7BYB7awIcQ8yBTzfNKLxlWJM4CzTnG+NoKc7TTN9M0KmX0WI+50p4F9MI5pcKca4YyLEzfhKMUacaRrR+EoxJrDANOcLI+jpUtNMH42Q6SsR4r5hCvg904hLIqA1uVK8dEMk0wuZS5eEMr9SvLTZmOY50zSi8ZXipc3GNOcLI5TNpaaZPhAh00dMM/0kQqa/Roj7hyngjK8UY0STK8UYtzJC3J6mgPuaRpwUAe2cCHHnmgI+1DTiuRHQvh8h7jemgH82jfi3aUTjK8VLzbRMr59iRJMrxUsbnGmmIyNkOsY00wMjZHpchLgnmgI+1TTiTRHQ/hghbsZXijFiO9OIxleKl443pjmbXCnGuDWmmU6NkOmcCHHnmgI+1DTiuRHQvh8h7jemgH82jfinaUTjK8WYQMZXijGiyZVijJs0zXR4hExHmWa6f4RMj4kQd5Ep4MWmEa+PgPa7CHH/MgWc8ZVijGh8pRgTWNc0Z5MrxRi3j2mmUyJkuneEuPuZAp5nGvGsCGjfiBD3U1PA35hGNL5SvHQrJNP7kRjR5Eoxxu1qmunACJmOjxB3singaaYRF0RAe1aEuOeZAr7ENOIDEdC+EiHuG6aA3zONuCQC2k4RLnRmfKUYI3Yxjdg7AtqREeKOMQU80TTivAhoF0eIe5op4HNMI5pcKZ7RpimcyZVijJvxlWKMOCxCphNMM51uGtHkSjHGvTlC3IyvFGPE10wjfmga8XvTiH+bRsz4SjFG3NA0osmVYoybMM20KkKm25pmun2ETIebZrpLhEwXRYh7pingi00jmlwpxrhHRIib8ZXipSqKkOlHppl+FSHTX00z/StCphlfKcaIJleKMe6NppneFiFTkyvFGHf/CHGvjBD3ywhxM75SjBErTCP2MY3Y3zTiINOIO5tGNLlSjHHvMs30QdOIT5lGfME04humEd83jfilacQfTCNmfKUYI65mGnE904hdTSNWmEY0uFKMUQea5mlypRjjnmCa6ammEb+NgDbjK8VLZ72mEU2uFGPcGyLEvccU8GOmEf+KgDbjK8UYsZNpRJMrxRh3rGmmk00j7m4acXYEMU2uFC+1LDK9RYoRR5hGnB0B7VER4i40BXySacRrI6B9KELcx0wBP2Ma8YsIaE2uFGPcjK8UL+3HTCNuFgHtthHibmcKeIBpxIYIaA+JEHe+KeBjTCNeFgHtLRHi3mEK+D7TiG9FQPuVaaY/mEY0uVKMccsixM34SjFG7GYacUAEtOMixJ1oCniqacT5EdAujhD3NFPA55hGvCMC2idMM33ONOJXEdCaXCnGuBlfKcaIK5pG7BYB7awIcQ8yBTzfNKLxlWJM4CzTnG+NoKc7TTN9M0KmX0WI+50p4F9MI5pcKca4YyLEzfhKMUacaRrR+EoxJrDANOcLI+jpUtNMH42Q6SsR4r5hCvg904hLIqA1uVK8dEMk0wuZS5eEMr9SvLTZmOY50zSi8ZXipc3GNOcLI5TNpaaZPhAh00dMM/0kQqa/Roj7hyngjK8UY0STK8UYtzJC3J6mgPuaRpwUAe2cCHHnmgI+1DTiuRHQvh8h7jemgH82jfi3aUTjK8VLzbRMr59iRJMrxUsbnGmmIyNkOsY00wMjZHpchLgnmgI+1TTiTRHQ/hghbsZXijFiO9OIxleKl443pjmbXCnGuDWmmU6NkOmcCHHnmgI+1DTiuRHQvh8h7jemgH82jfinaUTjK8WYQMZXijGiyZVijJs0zXR4hExHmWa6f4RMj4kQd5Ep4MWmEa+PgPa7CHH/MgWc8ZVijGh8pRgTWNc0Z5MrxRi3j2mmUyJkuneEuPuZAp5nGvGsCGjfiBD3U1PA35hGNL5SvHQrJNP7kRjR5Eoxxu1qmunACJmOjxB3singaaYRF0RAe1aEuOeZAr7ENOIDEdC+EiHuG6aA3zONuCQC2k4RLnRmfKUYI3Yxjdg7AtqREeKOMQU80TTivAhoF0eIe5op4HNMI5pcKd4c7nKaXCnGuBlfKcaIwyJkOsE00+mmEU2uFGPcmyPEzfhKMUZ8zTTih6YRvzeN+LdpxIyvFGPEDU0jmlwpxrgJ00yrImS6rWmm20fIdLhpprtEyHRRhLhnmgK+2DSiyZVijHtEhLgZXyleqqIImX5kmulXETL91TTTvyJkmvGVYoxocqUY495omultETI1uVKMcfePEPfKCHG/jBA34yvFGLHCNGIf04j9TSMOMo24s2lEkyvFGPcu00wfNI34lGnEF0wjvmEa8X3TiF+aRvzBNGLGV4ox4mqmEdczjdjVNGKFaUSDK8UYdaBpniZXijHuCaaZnmoa8dsIaDO+Urx01msa0eRKMca9IULce0wBP2Ya8a8IaDO+UowRO5lGNLlSjHHHmmY62TTi7qYRZ0cQ0+RK8VLLItNbpBhxhGnE2RHQHhUh7kJTwCeZRrw2AtqHIsR9zBTwM6YRv4iA1uRKMcbN+Erx0n7MNOJmEdBuGyHudqaAB5hGbIiA9pAIceebAj7GNOJlEdDeEiHuHaaA7zON+FYEtF+ZZvqDaUSTK8UYtyxC3IyvFGPEbqYRB0RAOy5C3ImmgKeaRpwfAe3iCHFPMwV8jmnEOyKgfcI00+dMI34VAa3JlWKMm/GVYoy4omnEbhHQzooQ9yBTwPNNIxpfKcYEzjLN+dYIerrTNNM3I2T6VYS435kC/sU0osmVYow7JkLcjK8UY8SZphGNrxRjAgtMc74wgp4uNc300QiZvhIh7humgN8zjbgkAlqTK8VLN0QyvZC5dEko8yvFS5uNaZ4zTSMaXyle2mxMc74wQtlcaprpAxEyfcQ0008iZPprhLh/mALO+EoxRjS5UoxxKyPE7WkKuK9pxEkR0M6JEHeuKeBDTSOeGwHt+xHifmMK+GfTiH+bRjS+UrzUTMv0+ilGNLlSvLTBmWY6MkKmY0wzPTBCpsdFiHuiKeBTTSPeFAHtjxHiZnylGCO2M41ofKV46XhjmrPJlWKMW2Oa6dQImc6JEHeuKeBDTSOeGwHt+xHifmMK+GfTiH+aRjS+UowJZHylGCOaXCnGuEnTTIdHyHSUaab7R8j0mAhxF5kCXmwa8foIaL+LEPcvU8AZXynGiMZXijGBdU1zNrlSjHH7mGY6JUKme0eIu58p4HmmEc+KgPaNCHE/NQX8jWlE4yvFS7dCMr0fiRFNrhRj3K6mmQ6MkOn4CHEnmwKeZhpxQQS0Z0WIe54p4EtMIz4QAe0rEeK+YQr4PdOISyKg7RThQmfGV4oxYhfTiL0joB0ZIe4YU8ATTSPOi4B2cYS4p5kCPsc0YsZXinEtYFPg7ZvjezVA+klEeSr8pouURU1pkQt4jU+hogL4DXkZ+LcBdxvmXwRu5AXg3xbcbYl/CfzWFKGJaT/8tFoB8StCTMQPddSG+KEMRcSvndcyb+3GQmhP0q7xbOk1UdWe4LOWbiJR157IYzHdRIHXXMfaQrrtiBt11QHLxl7ePs27AKgDybOxPMl7ZxIWw6E+sD4hdn2TButEhxTxili8UhKmOED+Gs+u/O0YnnYMsy4DPHC+isYEgFcg2Fawj62uxGvZ96D+PIYXnxWEdaXTx553+ux99p++//QR+0+dNaN+x/1n1+83Y6/Z/dUObwEB2p4Bo79RQZaQMLQjLCTvbch7EXlvS95p3HYBfkuAl4W4Kb4Sr6VCPfDDu6YdiB/iXIH4tSHvGP6B9Vump58az1bH11CXrwPKsx6JU9Qs79I4KB/xa4+yEb8OKBfxW4Hps7EOkLzRb0Xwo3WlI/jRulLKOg/ttxKRD/nK4Lci8VsF/DoSv1XBr5T4rQZ+KxG/TuCHHZnGORDeazxrRk2lTneQ7XTVqK7THWI93abBdyikhYMv5jOI6GoYvNsefIeSdAtIPuhfRN67kbAYDvWxCrwjdl1HBsP7sBTxBrJ4pSTM4AD5azy78g9heIYwzLpM1ic47NfZSqE6m6iI66znVZOwvO7hPah/Yp3tTnAI1NmeQnW2PK6znrcjCcvrHp78/yfW2V4Eh0CdrZeps8nYNlDPaBKW1z08PfxPrLMDCQ77dbaHUJ0tj+useqaSsLzu4ULDP7HOjiU47NfZuvrYnm31k3Gd3ZuE5XUPF0f/iXV2OsFhv85OTcjUWT/uZ9VzGAnL6x4e4Pgn1tk58K7Xvx6A9S/ZtYR6X6jvrYrrseedSMLy+lgG7//EerwA3nU9fhzq8YbE7wnw24jgFajbUmsO1XHd9rzzSVheRzeG939i3f4XwWG/zk7z4zrb6ifjOnsNCcvrHh6e+SfW2YvgXfe9r0PfuxnxewP8Nid+b4JfN+L3FvhtQfzeBr8tid874Ned+L0LflsRv/fAb2vi9z74JYjfB+DnE78PwS9J/D4Cv3Li9zH4VRC/T8Cvkvh9Cn5VxO8z8OtB/D4Hv2ri9wX49SR+X4LfNsTvK/DrRfy+Br/exO8b8OtD/L4Fv22J33fg15f4fQ9+NcTvB/DrR/x+BL/tiN9P4Nef+P0MftsTv1/Abwfi9yv47Uj8fgO/nYjf/4HfAPCjB1R+Aj/dXrCe1Hi22ktDhc4f6yk+qQ6obEXwdLeOp+mACu4p6a8NjNh3xgF1+03H4yn0eAfC/onBLvCWPZqCYXLlaIpMcTZ1f90JphripkUX5539vLe2n3eyhOSBT6rmuzXBkxDQRQnJozV4ErJ4EqUED83LF5A9VT3wSd5J+3k31gPfa73ekwRPhYAuSkgercFTQfCUC+ARkrNxaRJNpiUW09W6qmK6SjJdlZIwlUR/VQL6KyD5YtroriJ4sA5SExTD+TmCEf3KCR6JNpCqP6BliP33lgE62yrHdEanL3hMEvtVbSv9TfAKmIeN7QLzK4J02zNsRSTMgvWbsbWBDqgj+Z1OvbZkfkJ9tU9tV0wb3ZhfRyLPlsQP3+k4LtFfFngt+2+KEfOjdac4RI4iEqYU9E8+/L70oeM01QG+02luUH9SKaSDsLZRSTCizHQMk7YvcMkoyL6QHudsy4T9TNsQHReRMJ1T1KHWjJkdia6qiM62FJItrLy2zGLeXoq8pWzRTJYUqC0qUMeSmdqi0raUkJyNbRSX5WzbotVMV0mmq1ISpgfRX7WA/gpIvpg2uulRZdcwazx8/Cwh4bbMEYzoR/tPqbEhrA+jZYj2WiJAZ1vlmM6o/YxXinBsahz/CprxCtjPSWo/43jbgWGj9vP2xH7ePo39nGR+2bRN0Y35Ufs5yJ6k9rOAvdSo5/IQjJgfrTvFIXIUkTDDW2k/Ux3gO51bBvUnUnPLsLZRRTDyfnl522NSY7OAjhvrGY5dbUN0XETCTExjP/cg7hqvuf4EzXcwbCHJC38rA/8eDMsS8Odp6PCS9pZA39+oe9zeRN0jfsyviIRpSKP7nsRd4zXrnrYV1BeGLSThepC0tD/vS1D3GC5JwkuudYS1OWr3S+ftpchbYIzKeM5B1yLt19WGxvX48gzwVBM8Pa3jEWuTjf0sHi+wPQfqxXRVznRVSsJsQ/TXS0B/QfMbdGN+MeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMNTHmGHOMOcYcY44xezHmRLQnxhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjjjHHmGPMMeYYc4w5Y8waTxLeEWsJCZfMEYzo15PgqRbC053hQTctw60wvwCdbZVjOutOMK4A75XA2yoa1LYZb6V1vA2NeKtIfjUBOIpImOL1m8MOA2wdye9bEXkqmJ+Wody6DE06x7wwbXRjfh2JPBXED9+3JhgT1jE26bk8BCPmR+t3cYgcRSTMrqD/lb1ln1IiE9UBvmPfUULSo/3J8mq/tEy6EzxJITxYJwog3UqmC9qfVBGd4e+0bncXwoh5YdpJph86TlQSPPb7i9RtLc67uY5YzDtZQvLAp4C5a8h7FcEj0W5KSB6twZOUxZMoJXhoXlLtMawe0P5KoP9M0r66NXqvJni2sY+nitpVrcFDbeqe9vH4QnImqK24xGK6Wle9ma6qma5KSZheRH+9BfRXQPLFtNGN+cWYY8wx5uWLWePhdnMJCdc9RzCiH10XEOifU47JtAzRhioP0FlljumsgmAsgXe0bfS073KyLiAwp66iOsV1gRKmvyIS5okuzWGvIusC3Eamcyeqc/tz7tRzJ8wvaE7ckbxTW1rApmvUcyIEI+anw2AbKg6Ro4iEuSXFugCVja49BfUdUutjYe2gF8GIslCbUcqex/LHNYDyAF1I5Y1yYto947yX5i0wVmQ8h5LeB6BtrzV4egnjSVU2wrZP4zyrj/10G/vYbSEtHMsQP+ZXRMI8l6L/pGkhTuxPMc2ORFfbEp1ta1+2FuWF/VfP5ZC3lyJvgTJtnOv3tZ9uVQFJC+sK4sf8ikiY19PUlRqmH6wrmGZHr2XZoM5qBHSWqq5kM28vRd4CZZrU6fazn25jXdkO0sK6gvgxvyIS5qM0dWU7ph+sK5hmR68Z+3ZEZ9vZly1lXcH8Cr2WetVPGfhvx/SwBPw5/rIsyeCFyCBUN8p1uv3tp9tY57aHtLDOIX7Mr4iE+SFNndue6QfrHKbZkehqe6Kz7e3LlrLOYX6FRM7tSNhCEgZ/xzrH8RdkSQYvRAahulGh093BfrqNdW5HSAvrHOLH/IpImMZJqhde53Zk+sE6h2l2JLrakehsR/uypaxzmF8hkZPWoUISBn/HOsfxF2RJBi9EBqG6UanT3cl+uo11bgCkhXUO8WN+RSRMaZo6N4DpB+scptmR6Gppml7z3Ex4Ly1lPaRrmPysRtjazQAhjGFrN0E6Q/yFBC/quAz8ezJ5sP3syNIo8+T2DVOtAdG1a+m8vRR52983b2hxHgfbWIKVBz1vtFGaNsbP9vDzTXRdr3uKeBi+DwmDeIpZmO4EJ4bZPAVOybXmsDqUyGLeXoq8peoQtnesQ7yPKiJh/DR1iPcv/GxFRyLTNiniYfhUdag7S4fWoR5p6tA/cS06rA7JnsNrqkN8rMcyoXUIw/TNcKzne4EdiUwDUsTD8KnqEB//aB3aIU0dkrIjwuoQ5kfHY9RDGfhzveN4zNtKWZZk8EJkkKyLaF9iXRzAdFJEwoxIUxd3YnJgXcQ0OxKZdkoRD8OnqosDWDq0Lo5JgZOen8O4QnZ9yvpJ80ZZLJ638mkeumx52/3n1eem/a5M9pfo+clBQniSGeAZRPAMtI/HF5KzcS9rMKRl+8zgEKarJNNVKQkzmOhviID+Cki+mDa6MT8XMdN5LJ1rY7htcgQj+g0keATqc8o+jJYhv2NDdVaZYzqj58BWhHfcw9XjwyHFzXgF1muTGu8OJL8agoOu5WOYReSM1XzA1pH8Ts9Y9WN+QntrjTrHvDBtdNN9K5SH7ivgOz1jJbBX3KjnviEYqT2FZV8cIkcRCXN8K+0pqgN8x76jhKRH+xOpu1f8nCu66d0rlLk3wSNlE2GdQDuwf4AupM6ZSNzPCDozyXVMz0yelWbuwM+0Yv2h50z4edFCb9nzy7hXUcGw4NyOp4F7FRL1UOi8apLOh1D3iJ+eV8Uwl6TRPT832pfpjp5txbCFJBz+Vua13CfH31H3GK4fCS+0J52yzWF+Umcw6JjkEQz0qSHvfQke+/WlIlHitRwT0uEpJ3gk7tQJtYuE0Fy6cR4ykOmqL9NVKQlD59gS87hU9unAgLzLPLu6GNQKXeSSrZ4p5gEOYo71HOs5DHOs51jPYZhjPcd6DsMc6znWcxjmWM+xnsMwx3qO9RyGOdZzrOcwzLGeYz2HYY71HOs5DHOs51jPYZhjPcd6DsMc6znWcxjmWM+xnsMwx3qO9RyGOdZzrOcwzLGeYz2HYY71HOs5DHOs51jPYZhjPcd6DsMc6znWcxjmXLlD1w/eEWsJCdcvRzCiH70vXC6Epz/Dg25ahnjPbYcAnVXmmM76E4wd4Z3eO3ywXTNe+/cOk43n1fm9w44MG713eNF6zWEfBWz03mE/Ig///qXQnb5GnfM7feim31ZFeeg9PMRG70v2YX5Cd88acfdhuNFN73VxWbKhx4IQPUrmHda2+8iWQ5KWuUfk9xgefOh9SIF+roLeBW0NnnKCx6F7egl6f8r2faQBTFe9ma5KvWW/5ULvR1mUM+WYMCAg7zLPri4GtkIXuXQ3K1PMSQcx54KeNR4+3lBbqU+OYEQ/+t1NKfsyzI4Isi/7BeisMsd0Ru/OCtzlbbw7W8ry0rbhn+1E8228492P5FcTgKOIhLlt3eawjaC8lvYf1nU69tL6vzy/wxB015/bqPT/F2kdlGonYf9rXU4wclmyoceCED1K5h3WZwj3V8lM/3OT2okCdk457Qdbg4eOgVL36AXkTNC+3bbdyteouJ2Y7TUqbkejO9W6WozZPmaNh/exJSRcdY5gzOacKmzspGWIY2GfAJ1lYy0wE53RdQWJbx1p2VdieWl7KNleNl+6zoX/l8RxFJEwl3ZuxlZFbDX8nf7PadDcQGIsSWV30/+K5HO+jt6ydlnY/15KtZOw/70cQDAGreFL67EgRI+SeYf1GcL9VcbfOpXdM0smaD/YGjyDCJ7426vB314N6ttz6TumNO8yz64uhrZCF0MD8AzNsi4wv0wxD3YQc6znWM9hmGM9x3oOwxzrOdZzGOZYz7GewzDHeo71HIY51nOs5zDMsZ5jPYdhjvUc6zkMc6znWM9hmGM9m2HWePj+EP3fpmSOYMy1ezq4j1cdoLPKHNMZPQckca5by74yy0vv5b7dXjJfP0HPpeGZQI6jiIS5c53msO+TfWb8nf7XW9C5BqnznZgXpo1uzK+jt+x5lY7esnvKJSRONs468PPP6B5EMHJZsqHHghA9Suad7oyuUDkkaZl7RH6P4cGH7uva35csT9B+sDV46Bg42Dqepn1mgf3XBO3bbe8zD2O64vu6pSTMUKK/YQL6C9r3RvewgLzLPLu6GN4KXQwPwDM8y7rA/DLFPDTGnBXMcd2IMYdhjutGjDkMc1w3YsxhmOO6EWMOwxzXjRhzGOa4bsSYwzDHdSPGHIY5rhsx5jDMcd2IMYdhjutGjDkMc1w3YsxhmOO6EWMOwxzXjRhzGOa4bsSYwzDHdcMMM/2WJGItIeEG5ghG9MvG9w8GMDzopmWI5+CSATqrzDGdDSB4BtjH03g2axWWlz4L+USH5nztf4fFb/F9XjynuQorlyIS5tK1m8M+A9iCzhLSs2a0/kucI0t15hbzo2cy6RlIfiazhMShdVCqnQxmuNE9hGDksmRDjwUhepTMO+zbSML9VZKWuUfk9xgefIYQPALn+ipoP9gaPHTcljjTLiRngvbtts9pjmC6GsJ0VUrCDCf6GyGgv6Bzo+jG/GLMMeYwzBoPHxdKSLjBOYIxm+eew8Z7WoY4fg8M0FlljumMnv0XuIvQaF+uyvLSNlzhCs35Cty/qChg+dUQHJhfEQkzndiXxYCN2kDUTguaK0jd6QqbK2B+1Jakthu+VxGMEjZDgbfs/Uber9G5dXGIHEUkzCqg/5W9ZZ9SIhPVAb/zWULSy0Y/xdcO0D2CYOTzPEmblv4nRQ1xZ8OeDquzNG+BuXXG9jQth52t4/ETtA62Bs/OBI9EPZWRs8meHglp2banRzFdDWe6KiVhRhL9jRLQXwHJF9NGN+YXY44xx5hjzDHmGHOMOcYcY44xLy/MdP0OsZaQcINzBCP6jSB4BOYpLebFmDa6aRnius6gAJ1V5pjOhL9j0jiHXY3lpdfI5oiu3/mJoPU7joOu33Ul63dz06zfBa3FSu31h63FYn50/W4Y8cN3un5nf03AD/yeRtDeBda34hA5ikiYBSnW76hsdK1uJPOTbF8jvZbyonsUwYiy0H78n7hWF9bXZCPvsL6Y5j3Set4NPh3LsW/Beoz5FZEwp6Soz0F2AfY5tI2jTKNEZUv4qeyUkQTzaHgvZmFGEfkxzFmtXI+nskm13bC2QvOWWlsexWRv7dryLvbxVGW6trwLwTPaPh5fSM7GteUxkJbtteWxTFfDma5KSZgxRH9jBfRXQPLFtNGN+bmImeZd5tktv3Gt0MW4ADzjsqwLzC9TzGNizFnBnAt1g64d0Lk6hhuVIxjRbzTBI9Dvp7QPaRkGzdXx98oc01k25uqdWF6N56XJXF1gXzlJ51RoTyMOzK+IhCleqznsC2Suzudh1Mah9V/q27VhZzjouW1+Pq8jwUbXGIK++yz1ndmwM2n0W8FclmzosSBEj5J58zOWI5aD3J4XXn/wna7r2LfHG1r0TdgmMW/Mr4iE+TjNHJf3c6MCZOP9c/bkDe6Lubw6DNonxSzMLkQnGObrFDpZnu2nkGBEnZeBP4ahc6ZCb9l7YmXe8m0LdF5nL++meo/2HNb7XZhOikiY39LUez7fwnofVMdTzdO43RRUF/ncidbFJa1cgwmad9V42amfmF8hkYXWt0ISBn/H+sl1WOaJ2ZaNazm0fFAW+tSQd7p2ImBHVlObtTV4xhE89ttQ01qOgJyNazm7Qlq213LGM10F2eEYZleiv/EC+guaf6J7fEDeZZ5dXUxohS4mBOCZkGVdYH6ZYt7VQcyxnmM9h2GO9WyGma51I9YSL3hdb3lizObaaJjdTcsQ1yRGBeisMsd0RvfRBPb1GtfMVmd56XlDn5LmfAVs0Apq/+M8BXEEzUXXXbM5bD/A1pH8jnVd/zSa+Unux2JemDa66VkKPvfpSLDRNTO+jiZ5LofvkfO1944BsmRDjwUhepTMO2wNO5f31He1j6c60z11Om5L9OdCcibo3MP2PIzbEMOZrrJtQ+zK8KB7QkDeZZ5dXUxshS4mBuCZmGVdYH6ZYh7vIOZYz7GewzDHejbDHHZ2AcONyhGM6EfXTwXG15R2MS1DtHPHBuisMsd0Rs97COzfNc7D1mB56bnOQjIPE7BBKwpYfjUEBz3bjmGSazSHPYHMw7i9TvcYsnF2h+83oRvzo2cAxhK/oLMLQWsBUu0kbC1gV4KRy5INPRaE6HF5rt0s7/qD73Qv3/7+SdMeLo5r2Cb5/kkRCXMxtMOwPVw+JxkVIBufF2RP3oQfhJHLS+2CYi943ayIhLkqhU7+qe0nXR2WGUub6uskSAvrK5bJRFI2GOamNPV1EpMD62tQ3ZyUIh6fZwfVoQksHVqHbk+Bk545wLjtyXuNl516lc28vRR5C6xfNK6P0TJF+T2GBx86F5hsHY/feOdkQgZ4JhM8EjasjJxN62NTIC3b62O1TFcTmK5KSZgpRH+1AvorIPli2ujG/GLMMeYYc4w5xhxjjjHHmGPMMeYYc4w5xhxjdgWzxoPrKIi1hISblCMY0W8iwSOwvpFyTYuWYdA5Ufy9Msd0JnzvqXF/ck2Wl17r3XLF5nztrwH6VXTNFteWEUfQuv9PqzeHTQC2juR3us83nvkJ6c4Pup8znumyo7fsenVH8k73YOyfg2zS89gQjPQbkFjfikPkKCJheoH+W3tnj+51Yp8U1k9Nsa6D1G1uCsGIMtP1Xam1d3o/ocZbdr+C9lMTic7wd1q3pfpSvu8yieknaPyRWhPPdI1+oiyeBD3vKTyuZbxfQutvrRCeyRngqSV4JNq3kJyN+yV1kNYSi+lqXU1lugqyATBMHdHfVAH9Bdm+6Mb8XMRM+yfEWkLCTcoRjOg3hWBcC96pjTSd2GQCdyaSQTYZ4qDfT8QwDxCbbEaATZbLYz3Kk42xPuxOziSCJ2gcFdBPMkg/k5h+aL0t9oLH/iIS5oA09iCfR0uOS5mMk7UEj0D7r6B9TWvwTCV46uzj8YXkbBwn6yEt2+PkNKarWqarUhKmnuhvmoD+gsZAdGN+MeYYcxhmao/UAi8h4SblCMYs2XCNa09rQ1qYvrYlziJ2Tq39fBvPxk8h+dUQHJhfEQmzkNg55xE7h9s0YbalRF+eyrbE/DoSGWoJHik7ZwrDM4XpIszOEdBPRZB+JjH90PbA7RyMW0TCXNVKO6eWyCbQbjK2c6hdIdCvVNM+rDV4phE89fbx+EJyNto50yEt23ZOA9NVUL+MYaYT/TUI6C9obEU35hdjjjHHmGPM+YCZ2u2ItYSEm5QjGLM012m029eBtDB9bRu/Sex2AbunWuuhjuRXQ3BgfkUkzAhit79L7PZa+J3a7UFzMAnbJNUcDPPrSGSgtpuU3V7H8NQxXYTZ7QL6qQ7SzySmH9oeuN1O6wGG+aqVdruwrpOZ7mHSujjdPp7qTOcRtC+WWJ8QkjNB+2XbdvtuTFeTmK5KSZgGor/dBPRXQPLFtNGN+cWYY8wx5hhzPmCmYzu19TDchBzBiH50XUxiHNSyd4a0MH1tG3fp2JyvlE3HvyOAODA/+h2BtYjdviFgC7JB6bdoaFkKzD1Sni3G/OgZwmx8ozfs7CnVhcSZYal1bS0T1oe2ITouImG2groR9r2JeqYfPJcSdDaXzpkl6o+QzZykfQzqjK+nFJEwlWl0Nj1EZ7SOo64wbCEJh7+VgT+edcHf8X8xMNwoEl7orGZFkI7GMlxUR9tmqCN+Vp+eL6JzJinZpjHZpgbIhmG2TyPbtBDZaPkHjVcCsiWF1tMqqC2DOkP8DURnGGZwGp3tFqKziURnqKvdiM4EZCvX6e4upLMZTGeIf3eiMwwzMo3OZoTorIHoDHU1g+hM4qy7tiOmBGD0GEZ86Pl3jEfH+xn2MWZ85prqbKYQnhkZ4JlJ8AjUT19IzkZbZw9Iy/ba0SymqxlMV6UkzB5Ef7ME9FdA8sW00Y35uYiZ3qVDrCUk3OQcwYh+uxOM68I7vZe3N5mrSdngDSS/GoKD2uAY5qNOzWH3I3O1BqZfLc9E5ic0P/HpOXZMO8j253aS1PiSas9nMsHDz6kL6ScZpB9uw+owWBeLvWC7poiEOSLFeE/HyWzclTIZy4XG7aoo47bUOCkgZ4KOv7bHyT2Yrnh/XkrCUDtjDwH9Bdmu6Mb8Yswx5hjz8sVMxxxqg2C4KTmCEf12J3gk+mct+3qQFp3HX0PsSQFbo4reN0N7EnEEfVvgWmJP3kDsyTr4nd6RDLKXpP5TIOxOIV3jqYV3alNI3XGsZXhqA3QhYF8lpNb66P5KWy/c3sQwd6dZX+J7NXw+Qu9G0LUbqe/5CthyyaA1OcQftCb3UIZrcqgzWsdRVxi2kISj/3Gt/XGOQ8/eFHrL7uno8ELroVVBOuJrjVRHT2eoI+yXaL1CuagtLyXb7ky2oHVsDPPfNLLtHiIbLX8+XtHyx9/KwH93hgXLn6ehwwvpKCm0LlhFbSK+Ho75FZEwb6bRPbev6pjuOhJ90XU1AdnKhdbCGnW2J9MZXwsrImE+SKOzPUN0NpPoDHWFYQu9Zdcny8B/T4YF6ytPQ4cX0lGFTne2/XQbdb8XpIW6R/yYXxEJ81Ua3e9F3DVes+4xzY5EXxhWSLZKne7eQjrbh+kM8e9NdIZhfkyjs31CdDab6Ax1hWELSTj8rQz8a8GNv2N9xXC1JLzQXdqU51Awv3zOu85+3slMvytRR/DsI6CLEq/lHYJ0ePYRxpOqbGjeAn1G41m3fSEtbm/SPgPDrFDaxMP6jH2ZHPw7LB2JTPsS2fa1L1sLvRYwvWYzby9F3lJlOgfS4nY2LVMM0ylNmc5hcmCZUjsbZZpDZJtjX7aUZZrNvL0UeUuV6X6QFrffaZlimC5pynQ/JgeWKbXfUab9iGz72ZctZZlmM28vRd5SZbo/pMXnF7RMMcxmacp0fyYHlimdX6BM+xPZ9rcvW8oyxfwKiZy0bAtJGPwdbUWOvyZLMnghMkjWjQMgLT7/oXUDw1SmqRsHMDmwbtD5D8p0AJHtAPuypawbmF8heUdcSwDTXOKOiqkBHp3ugQbpNqR5dLoHRcfrcw+P6KGQvGNerfk9KOyBJM7eLNwS5m7nNZcRrZP4+/Yp6qRQu0nZZvcmeQvU68Y2i7Lz+fcBAfoZlKbNHsTkwDZL59+8jGh9q/HsrS1oqHUBeS2v/iEbeXsp8j7Qft6N82TaT6P8HsODz4EEzzwhPAdmgGcewTPXPh5fSM7GPcKDIS3bZ4EOYbo6kOmqlIQ5mOjvEAH9FZB8MW10Y34uYtZ4sN0g1hIS7oAcwYh+cwkegfqcsg+jZVgL75MCdFabYzobTzB2gXd6TmOf0ma8AvscjXvXs0l+NQQH3QvCMLPJuZD9AVtH8nstkWcm8xPaW0x5tpvO+1EeOm/Ed7o2K3Eelp7n5hgxPx0G62xxiBz0fu78FHYWtWuoDvAd+w5aTrQ/kfrGTVg50W/c8P1DSZuI3qmoIW6qC6n7LBLftqFnytuG6Jh+O/7ENLY6P5/O99Y7El3RM+US9UenO15IZ3OZzhD/eKIzDHNaGp3NDdEZreOoKzpmCuxRpazjmB8dM7Efp3tJtQSjVP+NeWHavO+i/Rld26mFd/q/U7OZn6RuZzPc6K4jGPn+vtD+e8qyzmbeXoq8pfZhaTmg/B7Dgw8d6wXmcz0z3YelfYBE+xKSM0H7Y9vzywOZruqYrkpJmPFEfwLrF35Qn87XFWPMMeYYc4w5xpybmDUebpuVkHCzcwQj+tHvtkmsOaey12gZog1dG6CzyhzT2SyCcX14x3mqnte9T9bSBOb0PalOcR7JcRSRMAmylvYxWUubxfSr5WlgfpJzGr5OhW46pwlaX8N3+l+6tfYx9gyaL2LemJ8Ow/9Ll8tB77t9l2YtrSpAB/hO58yTmZ/kWlrYXTi6zsDvW0nO/7BO4NxzJtMF7U9oWw2ar0t9/yFsvk6/JYR+dP1RoL9I2dbivGX2O+h6Nz6p5uazCB6JdlPitRyH0+HJxjpOWNnQvKXutAr0lT3pviE/C07XxDHMyisB95Z9aFqIE8cBehYcdUVtX4G16xblhf1uw3LI20uRt9RegMTaHZ3b8L0AzK+IhOmcpq6EzZPoGI26oudeJM7h0G+C0byk5hdh9XJuFvP2UuQtcJ4sSedHHpHfY3jwoWfODraPp0eJ1/K8XTo89NyLxBkOITkT9DyH7bXoQ5muDmK6KiVhDiH6O1RAfwUkX0wb3ZhfjDnGHGOOMWeKma6lIdYSEm5ujmBEP3ouV2BMSWlH0DLkZ8iozmbmmM4aCMYyeKfnDces1IxXYH2xB9Up2tdlTH/0u6Y/rNYcdjxgo+taM4k8tcxPch0J88K0a5ku6fpgLfHDd7quIDA/6hG0Poh5Y350flIcIged60xPMdehc4ugb6li30HP3gvb4n7Q/AvdBxGMtfCejTkR1gmcEwXtm/G1dTqnoHU7F/Zc6Fkaqf2IWoanNs57ad4S32rK9PyS9F4l3f9qDR7h9YUE/V9cmpdUe6xlcqKb9ldSaxmZ3JMSXstIxmsZ0Z54HpU9e5vbGXROcGCOYMzmPKqW4UE3LUO+j0J1VpdjOqslGDeAd3qH4GIyj6q1jzfwzsIGDBu9s3ALmUddTuZR3I6jZxiozpfnGYZaeA+aV1DbQ2IMLPBa/jczxYj56TDYhopD5CgiYW5MM48Kui+C70H3QGl/ItV+w+40Hkwwosy0P5G2iXAeVRugC+k71RbTbaxnOHa1DdFxEQlzb5p9R37XGesPptmR6ArDFnrLjlFl4M/vReN3a3gaOrxUPRTq+xt1fxikhbrnfX8RCfN4Gt0fRtw1XrPuaVtBfWHYQhKO6lL7874EdY/hJpPw2Vjz4m2Oni1bXuttUvcpM/3fmEkEj0RdLfFajkfp8BxK8BxmH49Um2zsZw+HtGzPgeYzXU1iuiolYQ4n+psvoL+g+Q26MT8XMdP/e6PfYcBwk3MEI/odRvBIzS9qGR500zLk68FUZ3U5prNagnFDeEf7Qo+j35I5kMR3fOicDcdtjqOIhDmAzIF+JHMgPsek60xU51J7Avx7WOjG/DoSeei+Bb7TOVCtfYwt5pocI+ZH50nFIXLQb1csaeUciOoA3+n6AP8Or2T75fNA3gfTMqF2gJRNhHUC7bF5AboQsIkS2bTDuY6pHV4Clae1djjWHzqvRl1RO5yPUWXgfxjDgnY4T0OHl6qH1C6ymG6S2hioe8SP+RWRMKun0f184q7xmnVP2wrqC8MWknBUl9qf9yWoewx3EAkvuZ8c1uaEv1OYcg2G5i0wRmW870L3xCTqaqZnbKXtYSE5G/vZIyAt23OgBUxXc5muSkmYI4j+Fgjor4Dki2mjG/NzEbPGw/utEhLuoBzBiH7zCR6B+pyyD6NliDb3wQE6q8sxnc0jGDeCd7Qv9DjaZ+VmvFLrxoeS/GoIDrpujGGqyRyoH2Dr6C07x6T7C9mYA4XVC2r/8/1KOi9aHnMg/k3JoDkQl4POgYaksKGC5nxhfcd8+/KmbAfzCUaUhY6xUvYPlj/aXgcH6EJqHJ5vP93GOoXjVNsQHReRMOPS2NxHEHeNt2zfSuendHycb182X6h/btTZkUxniH8B0RmGmZJGZ0eG6Gw+0Rnq6kiiM6n98LA6PimLeXsp8hZYx+sRVKbYX9J1PAwzI8MyxbGNjiUo05Ep4mH4+SQM3+efy9Kh+/x7pcBJ17hovTqS5F8D74loT8p6dSTBg+M86quE/C585tQP0j+66Tcg0Y/upfK7FvT86sws6LaO4a5jug2yryTPDdOzczUBedMz5gfnqM6C6iPVI70/IWBXt/iWTxHT48Gi+vHrM/1GBe0/JOqUUD1I0L6kvbV0KwNt9ZlMV9n+1lZY3xZ0Vt2eLqoqg+ZWQbrI5jf8w3QxLyBvi7rwg9aQgnSxIACP1FpDmC4WBORtURcVOu+jWqGLowLwHJVlXWB+mWKemwOY27N3O3n3aOzjjm6FLo4OwHN0lnVxdEDe9nSRbFzPPqYVujgmAM8xWdYF5pcp5gU5gLk9e7eTd1WjrXVsK3RxbACeY7OsC8wvU8wLHMR8dA5gbs/e7eRdNV3nvbAVulgYgGdhlnWxMCBvi7po0Hkf1wpdHBeA57gs6+K4gLwtjquNdtGiVuhiUQCeRVnWBeaXKeajHcR8lIOY5zqIeZ6DmBc4iNnFNpgLdaM9e7eTd1W9zvv4Vuji+AA8x2dZF5hfPmA+2kHMCxzEPM9BzMc5iDkX9Ez/g2D9VSTx+NNKGB7UmccwegxjCXmn+xsnWMfY9D0XzOsEkteJ9vPyg+oLuk8Uzduv1+mebF+mxvW3xZAW7t+fHCDTKfBeYFmfi0m6BSQf9C8i7+uu0hwWw6E+sN0idr3feBK8U+w83vEsXikJc1KA/DWeXflPZnhOZph1maxC2rlE3WpNvdbnILAtrwec7unS/zs5gflJ9pcnMNzoPp5gxP6S9g8CfVHK/3DE/Oj/aByaozorJX50r75SCE9/hqd/gC6k8u7L8u6bxbx7s7x7ZzHvcpZ3eRbzTrK8k1nMewjLe0gW896Z5b1zFvMewfIekcW8d2F575LFvIezvIezvDuSd/rfV/b/v6ahEQ/mgeeS+H8qCdny9fQuOj6tseWlxkqh8S2R6gwpHd/4+UTJ83JhtlWq86upMM91EPM8BzEvcBCzi3XjKAcxH+0gZhfr8zEOYnZRzy7W52MdxLzQQczHOYjZxfrs4jgY26LZwRyPKdnB7GLdWBRjzgrm2ObPDmYX26CLNlIu6Fmvg+Ka6AurSOJpOs9A8aDOPIbRYxjpOQi6LipwxiBBy4fuv59kP6+U501OEs276TzDYvsyJegeP55nWBwg07/g3fZ5BnrWoIDkg/5F5P1Zcp4Bw6E+sN0idr1PgWcDKHYe70gWr5SEOTlA/hrPrvyLGZ7FDLMuk4dIO5eoW62p1/o8A7bl9Yhe4j1uu3nHe9xN6cZ73PJ5x3vcTemm2uPeCri2aU5kfpJ24IkMI7qPJBjRDpQ9S5losQ+P4z/Pu5TopTJHdVZK/OjZha2E8ISNYVtlIe+wMSwbeYeNYdnIO2wMy0beYWNYNvIOG8OykXfYGJaNvMPGsGzkHTaGZSPvsDEsG3nH/Vrcr2Ur77hfi/s1mndH8r41wVNlHU9D4/cRMA88f4p5U/tRYO218fwp2tH4tGbtVWoOIGS3J4LWvCuZTKUkDD1/mkv3IFNhnusg5ly9I5sK8wIHMbtYN45yEHOu3q3/p9XnYxzE7KKeXazPxzqIeaGDmHP1WxH/tPrs4jgY26LZwRyPKdnB7GLdyNVvU/3TMMc2f3Ywu9gGXbSRcuV7WrgmetWqknjsf0/rJOsYW35Pi56XFPj2VMrzwSeL5t10/lTgm04JeiYTz5+eEiDTqfBeYFmf9GxoAckH/YvI+79XbQ6L4VAf2G4Ru96nwLOcFDuPdzyLV0rCLA6Qv8azKz//vtcpDLMuk3NJO5eoW62p10Hf09LtHNucT/ww7pbED+P2IH6Ydi/ihzrflvjReo9+WCe2I36os+2J32nwviPxOx3eexK/M+A9QfzOhPfuxO8seN+J+J0N79sQv3PgvYL4nQvvOxC/8+C9P/E7H977Eb8L4L0v8bsQ3vsQv4vgvTfxuxjeq4nfJfBeTvwuhfcBxO8yeE8Sv8vhfSjx+ze8DyF+V8D7MOJ3JbzvTPyugvfBxO9qeB9J/K6B9xHE71p4H0j8roP3QcTvengfQ/xugPddiN+N8D6a+N0E78OJ33/gfVfidzO8jyN+t8D7BOJ3K7zXE7/b4H0U8bsd3qcTvzvgfRrxuxPedyN+d8H7FOJ3N7yPJX73wPtU4ncvvM8gfvfB++7E735434P4PQDvexK/B+F9L+L3ELzvQ/wehvd9id8j8D6H+D0K7/sRv8fgfX/i9zi87038noD3A4jfk/A+kfg9Be+zid/T8D6e+D0D7wcSv2fh/RDi9xy8TyZ+z8P7YcTvBXin/8P7X3g/gvj9D94nEb9CeD+J+LWB9+OJXxG80/tCbeH9ZOJXDO+LiV87eD+F+LWH938Rvw7wfirxWwHeTyN+JfB+OvFbEd7PIH4d4f1M4lcK72cRv5Xg/Wzih/+JeQ7xgysdS/tk7QfD7NI+WfvBX1gv7ZO1Xyd4v4D4rQ7vFxK/NeD9IuK3JrxfTPzWgvdLiN/a8H4p8VsH3i8jfp3h/XLity68/5v44Zh9BfHrAu9XEr/14f0q4lcG71cTvw3g/RrityG8X0v8NoL364jfxvB+PfHbBN5vIH6bwvuNxK8rvN9E/DaD9/8Qv83h/Wbi1w3ebyF+W8D7rcQP7ZbbiB/aALcTPzyLcgfxw7nZncQPbYq7iB/aS3cTPxxj7yF+OD7fS/zQpriP+KH9ez/xwzMyDxA/tL8eJH5oFzxE/NA2epj4oX3zCPFD2+1R4oe2x2PED22Ux4kf2nhPED+0b54kfjXw/hTxQ9voaeKHtuAzxA/tqmeJH9qHzxE/tMmeJ35oM75A/NDu+y/xQ3sJ+2Td99FvzdK+nP/Puu47c/V/7usI7lrmp3FL/Td0LcON7kkEI8pQS/zwHc8oFZA4PK2NSBj8z/LikPyKSJidYEAI+p/l9p7If8I3/mf1fEgL5+iI7XCCEcMMToGRpoU45zF5qS7nE9kE/qMzGSQbls28ANl2TqP/+QIYhWT3ad3D840HB8iOYcas1qyncfCu2yaW26FEj7sF/I5PqjW8+V6zLhfYl7nF9y6xvBcE5E3/h9NS3i3WV3G9CfNBf/rf7w2rNYfl/wWKukbsus2gfZ7qP0QnsXilJMwRAfLXeHblX8DwLGCYdZlMIPUM65HkOHVEiI42IjrCMLVER4cK4TmY4UEc9L/OEUcxC4Nxi0iYvVL0WVo2tAXoXA7jUjthvpC8tV5LedE9n2BEv7kEI5dZ15c+ICS1Leic9yDmJ1mvMC9M+yAmA7V1DiJ++P5Ptn82JGGwXqeyfzDM0WnGX4E22Wj/4BoJt38OJRgxzHFp7J/DiLvGW7b9UV0eRmQ7yL5sySDZsGwOCpDt5DT6P0wAo5DsPq17aP/MC5Adw5xGxqUzAuwb2g9dbmj/0PKeb1/mBB3vsLznB+S9gGC1lHeLsRbtH8wH/YvI+2XE/uF2A+p6PnDdZtBOpdh5vEksXikJc3iA/DWeXfnnMzzzGWZdJmeTenZ5Fuyfw71gHW1IdIRhaomOpOYktQwP4sD8qI1UzMJg3CIS5ro09g/aAtT+4baDUN8WaO+h+zCCEf2o/cNl1vXlW1iApmM03RuYzPwk7QjMC9Pmeqbj3GTih+/U/uE2kWT9C7Pb6BoVyhBkt1H7Z15IWhuQMLwu8/xoXX44zfh7MMmrBt4T0Z5G+wf3knDMQGx0voFhHk9j/xxC3DVec3lT/aIODiGyTbYvWzJINiybyQGyPZtG/4cIYBSSvUXfg/ZPbYDsGOZ/ZFx6idg3fF1X//5hwO/4pLJ/aHkL9LcJOt5heR8WkPd8gtVS3i3GWrR/MB+6DofvHxD7B8OhPlDXiJ2u91PsPN48Fq+UhDk0QP4az678fO5zGMOsy+RVUs8+JPaP1Dh1aIiONiA64nspGk+tEB4+/iAOzE+HwfIvZmHovAXDfJnG/kFbAOUu8Za1HYT6Np/Kgmmj+xCCEf2ojcZl1vXlYmL/4DhMbaZa5ifZt2JemDa6qa2D9kwt8cP3mQT3JOancR8ohJuv2aD7QIIxyJbDd/qfjgeGpFVGwmD5FYfkV0TCFMDhh7DxV2CdoCe143DMQGy0vS0NkwJjkE1Yy+SluqRnvgXKu0eQbGUMD5WtJI3+BWzyHpJ1nZafTrcuQHYMs3KnZj2tCu90TtVA9LhBwO/4pLJ/aHkL9LcJOt5heR8SkPdhBKulvFuMtWj/YD50HQ7fyzo1h+V2A+oasdP1foqdx5vM4pWSMAcHyF/j2ZWfz30OYZh1maxO6hnWI0l74+AQHZURHWGYSURHDUJ46hgexBG0r1DMwmDcIhJm8xR9FrUt6D4RxqV2gtR6Q9h4O49gRL9agrGMyazryxhi/+A4TM+QNjC/9iR+jWdXLswL025geDVGtGcaiB++0++I1jK/XLbb6LdSJ4ektT4Jw+syz4/W5b5pxl/7c6Sm/2HFM8c4ZnD7r4iE6Z/G/hlP3DVec3lT/dbC+3gim0B/0zNINiybhgDZBqbR/3gBjJJ9LS0/ne7MANkxzDAyLo0IsG9mET1OMbR/aHkL2HwJavNxW57mTfcaLOXdwt5E+ydov3HpGQVi//A5A+qazhlwrKLYeTy+/l/qLbt+JznW8fkgX3vQZTKK1LMpxP6RGqfmhuhofaIjft5B47H/n9dNeGYyPIiDzqsRRzELg3Hp+Z/d0tg/aAtQ+wfjUjtBoG9LOd6OJxjRj+4JcZl1fXkfLmV0JNjpXZuZzE+yb+XlGGTrzGIyUJuoluCezPyW975d0JjN9+2CbFsM04WEwXtPxV64bYFhDk0z/k4kedXAeyLaUx1kIyC2iQQjhjkiQ/tnJpOX6pKOSTPty5YMkg3LZmaAbMdm3/5JCsnu07qH9s+sANkxzAlkXDqJ2DdYbrOJHs8P+B2f2P5pnf1zXgr7B3Wdqf3D15Zz0f45hdSz84n9IzVOzQ3RUReiI75GImn/8PEHcVD7B8u/mIWhc2YMc3ka+wdtAbq3xG0HSftnttdSXnRT+wf9GghGLrOuL/sQ+wf96R3s3ZmflmuGkFyYF6aNbsxPY8S74PhbULz14H0iCYNpFLMwGLeIhLk1zZglMLY02gx7QFptmfx0bMEwd6axGfYg7hqv2Q7ENDsSefeQla1K45nFZFsvQDYMc38a/Qv0I1WSNsOeREad7tgA2THMI6Qvf4zYBFhutO2+HPA7PqlshllEl3vZl7nRZtib4Kwh+dC89yFYLeXt07zRZsB80L+IvL9EbAYMh/pAXSN2Okek2Hm83Vm8UhJmdoD8NZ5d+fdiePZimHWZPEnq2cvEZthDCNPsEB2tR3SEYWYQHY0VwjOD4UEcmB+1K/iYgXGLSJi309gMOH7S75Hw8TabNhJfg6XnmvcgGLnMur5cAx+3CJrX6zgTmZ9kOWJemDa6MT+NcSq8T5TFU01tEez31mV4ikiYr9OM4dyuqYX3dYlsKNPuRDYB+yxJ16e4bLQ9YJgfs29DJSVt0z2IjDrdqQGyY5jfSN/6e8AYTc99dFh92d/xSTWG03Nde9qXOUH7bCzvPQPy3otgtZR3i/ECx3DMB/3pfK396s1h+diHukbsdA2VYufxdmfxSr1gG0bAfmphM2LaezLMukz+IvUM65FkXzsrREfrEh1hGNrXThXCw/t+xIH50TMFxSwMXcfDMKuADtPd+6FjOB//JOcRYecjZhKM6Ee/mcZl1vVlbzKG4zoG/ebbNOan5ZouJBfmhWmjG/PTGPHbc/hbUDz8thQtf0yjmIXBuEUkzAYpyl9mPc1vnBvjd/DaMvnpnjqG2SQFRpoW4hzL5O1I5N1NVLZge6hzgGwYZos0+t9dAKPkOim1DXS69QGyY5jE6s16ShKbAMttEtFjv4Df8UllM1AbUWCelwha59kjIO89CVZLebcYn9BmwHzQn64x1RCbgY+1qGvETvdYKXYebxqLV+oF20wC9poftOa3B8Osy6SS1LN+xGbYTQjTzBAddSY6wjDTiY6k9qrrGR7EgfmlGjMwLh0zBqaxGXD8pN8/xbh0bBXo23wqC6aN7t0JRj4elATIrOtLF2Iz1IE/3QOpZ37tidw1nmw5cvuAzvvxt6B468B7LQmDaRSzMLT8McyuacYs+zZTk81A55A1BNt0ghHDTEpjM3C7ciyTt6O3rE0iZA9WB9lD6wTIhmHq0+hfoF+rlrSF6X6UTndqgOwYZnfSl88kNgGWWx3R40EBv+OTymagNqLAvCYRtO81MyBvOrZbyrvFmIk2A+ZD13vw/UBiM/C5MOqanstC245i5/HqWTw6h54RIH+NJzs+z2SYdZnsSerZQcRmkLabuY7WITrCMNOIjqTOe05leBAHPbcWNmZgXDpmHJHGZsDxk35vnc8DJG22sPn4bgQjHw9KAmTW9eVN+Di2bg9TmAw6Tl2AXFLrRZgXpl3H8NJ7BLRseTz81vVkEgbTKGZhMG4RCXNKmjGr3rr8TTYDlllbJn+QXXN6GpuB15GxTF5qf00TlS1RQe1clG3tANkwzLlZt9kSFUKyt1gX5N/koLJjmItIX34JsQmw3KYQPd4U8Ds+qWwGOo8TmNck6BjBz8rQvGcSrJbybjE+oc2A+dD1Hny/kdgMfKzle8K6zWAfS7HzeHUsHp1DC9trKc9p0f3By0k9u4nYDFLzwd1CdLQ20RGGmUp0VCuEh9sMiAPz02Gw/PmYQW0GDHNnK20GlLvEW3a8lZy3TPFayovu6QQj+tG1EC6zri9nEZthIpOBnpugck0Rkivs3ATmpzHif+BMFsXTNIbXEj3pdNdieOg9nifTjOG1TDYcw9cisgXdIxGws5O0zXDZgmyo59OM4QI2ZFJyjkHHap3uqADZMcxLpG99hYzRtfA73ef7OOB3fFKN4bSPFOgzEkFrWNMD8t6NYLWUdwubCcdwzIfaUvj+ERnD+TiDuqZ7lXy+FBSvlsWj49O0APlrvOysC9O1t9dJPfuYjOFSfe20EB2tRXSEYWhfO0oID+/7EQfmR88gFLMw9F4Bhvm6lWN4LXB6li4b8+Ows3RTCUb0o3cEuMy6vkxPM4aPD5BL6twKvz+HbnpGEPdixhM/fK8kuEcxP8nvSoxiuLmdQe9DjCJ++J7quxIYZk0ShtujPD9qj7aBPwsLG3/t9xENfpD9w+0xav+0S4ExyP4Zz+Sluqwlstm/1xNs22HZjA+QrWMa/dcKYJSRveX8Ae2fCQGyY5hV12jWUyd4p/MCav9sFPA7Pqnsn1qvWZcC/W2C2nxY3lMD8qbnnSzl3cLeRPsH86F2KL5vuEZzWD5G8zGC7g2nOqs1mcWjY3tdgPw1nuz8nK9V6jJZk9QzrEeS41RdiI7WJDrCMKOIjiYI4eHjD+LA/ILsnzUZPmr/bJGiz6L2T9BdAmon1ArJG2b/1BKM/H5BSYDMur5sSeyf0ez3Em/ZcVvLNU5ILswL00Y35qcxDmdyUduC2j+7Mj/JMWFXhhvd1EZDGXYleHYVwjOO4QnKW+J7BlTv+KQau+i9fIHvWySp/d4aPPQsuERfJSRngp5DW2Ix3SB7fDzTVdD/TEjONcL6PrrH6RpmjYf3GXRM2TVHMKIfPQ8oUJ9T9mG0DLFvHxugs2zMezPR2TiCR2D8TGjZN2Z56fF9sqw9mCxg+dUQHPQuIYZ5h9iqU+Gdjo90DOfrGpI2ZNjaC+ZH7YygtZcqglFiLCsgWDhG+v0I/s1NLgf97uGeaezcqgAd4Dv2SfQ7QNnop8K+KUvXQoLW7KRsLXoPu4a4qS4EzognhHScpGscbUN0TNc45qVZu+L7rVh/6DfBUFf0frlE/RGakyXpnJiv99USnWGYI9LorC5EZ7SOo64wbCEJh7+VgT/vA5aAP4YbT8JLzpPC2gr9HhD29Tge5No4UOotuy5PZSuEeFDELeYUAnpN0PG3yAseF+j4ezpZI8O608ZrWR50PJnA0sY4axD/CSztsLVegT3paoqxLZOjLgDj2WkwCtSrasn9+Foio053eIDsGOYCYntdRNabsb6MJnq8IeB3fFLNoencQOAcYSLofGh9QN7TCVZLebfY+8X1aMyH3tPF9+tJW+P72KhrencF13Ypdh5vPItH70VNDZC/xpNZj8e0+X0eXSaXknp2A5l/SK0bTg3R0ViiIwyzK9HtcBYPw9O1BCynYhYG4xaRMLel6VsEbNDA/m84k5X2f3ctp/5Pyv6uJTLqdMcFyI5h7if18kHSv3E7RP/+QsDv+MT9X+v6v+dT9H+8H2tt/8fv/OVi//cIqWcvkP5vtBCmqSE6Gk50hGGmED/c06HrZ/g73e8ZLoQ77CwuxY1+qDvaJ2M8tEVpv40yFbMwGLeIhHkrRZ9YEhBXl+vCkqb3oL0dajPRdYBcXbuia25B66dSd9zD1k/p2gDKMJH44Ts9NzQpJK2NSRj+nTyeH/1O3tdpxkn76xMNfqZrL99nuPbC18WoLunai0B5B64rbczwUNl+zfq5raZz09L/PcC/rRpU9/4k48cSYodgW6Dr7R3XXPZ3fFLZKbS8BeamCTou8Xt8NG96vsdS3i3GRLRTMB/0p2f0V1yzOSwf31HXiJ3evUz1vYYJLF4pCVMbIH+NZ1f+OoanjmHWZVKwZvM71iPJ9b9aL1hHGxMdYRi6bpat8yZ8/yzo3FDQ3haGWR10GLafgrYA/X5Z0B6v1Ln1sPGW2oToR/ehucx0X1G3hzHsdx1nNPOTPP/O7UF+jklj3AXeRxM/fKf2z3DmJ1n/+PoDuul5J5RhOMEjZY+HneMeLquLJNU7PqnGLrqXLnWOaVwGeOg5Jol1Dqm9AzonsX1uiPc145iusn2eJGyORPc6XMOs8fA+g849h+cIxqC5sJSNEdaHBe0xjg7QWWWO6YyuwwiMn43nhjZheenxfcCaovkm6biN8wOOg66tP0Fs1SHwHjaG87NEy/OsLR3D6biO7/TckMRYFnQ+mfdrdA+h2AtfR8cwY9PYuVUBOsB37JPofDUb/RQ/OxW0roQy075d2tbCeW+QrSWwXpiQPJ9Gv/0apGN69mxaijoUtJ7H5070LgA95yVRf7J51oqfIaVrYnuk0dmUEJ3ROo66wrCFJBz+Vgb+vA/Ac0MYbhwJLzlPCmsrmF/YmJ5L40Ap8aPy4HshxIOr1y3mFBLnhen4y/dO6V1GDHM4WSNberfWC7ax6JiDaWOc1Yn/riztLK71VlOMbZkcUwIwHpkGo8Tefja+F4Pls0uA7BhmIbG9FpH1ZqwvY4gezw74HZ9Uc2g6N8j2ejTNOxfWo89KsR6Nus50PZqvY+fievSJpJ6dTeYfUvvmtV6wjkYRHWGY4US3u7B4GJ6uJWA58W8UYNwiEuaiNH2LgA0a2P/twmSl/d9ly6n/k7K/ef83OkB2DHMVqZfXkP6N2yH697sCfscn7v9a1//dKbAfx79TlYv93/Wknt1F+r8xQphqvWAd7UJ0hGEmET9+J7yExKH7PVL9Nu9/+d5OKfFD3dE+GeOhLUr7bZSpmIXBuEUkzGMp+sSSgLi6XPuQc0O8z6E2E10HyNW1q1y+qxd0B5/f1QtaF8Iwm5AwfA846E4dhnk1zThpf32iwc907eXNDNde+LpY2B07ib3BINmwbMYFyPZ+Gv1LnG2SXPug5afTHRUgO4b5hIwfnwWcC6Lr7b8anhsS/pZpgo5LWN5B34etI1gt5d1iTEQ7BfNBf3qe/Bdip/DxHXVNv7+K9iTFzuPxO3z0WzqTA+Sv8ezKH3YmF/PTZfIlqWe/EjtFapyaHKKjTYiOMAxdN5OyP/geI+KgZ5QRR7EXvreFYf5Os5+CtgA9NxS0xyt1djFsvKU2Id/jTbevqNvDSPY7PQdC9z0HCckVdv4G89MYR8D7cOLHzwhp3AOZn2T9G8hwo5uebUIZBhI8A4XwDGJ4gvIW0EWS6h2fVGPXaIJHYE5VTs+9tQbPGIJnF/t4fCE5E/RbIrbPDfE5yWimK7qPQueaUvYXnzOim54RjTHLY9Z4eD9XQsINzBGM6LcLwSO1fhPW79IyxPFoeIDOsnHGNROdDSJ4BMb8xrNOm7K8tE1StZZovuXU1sA5DcdRRMJ8vlZz2G3gPczu4OefpMYSul+MaaMb86N2R9A5a3rWSWL8DVob5P0aPfdfHCIHvRu4A+g/3VknqgN8xz6J3iHORj/Vmu9oBp3Pl7YPca4eZB8KfJssIaTj8qC9M65junc2MkUdomkhTr6W3pHoCsMWknf8bYnX8hyhDdusAR7Ts+INaR66JhoBr889PKKHQm/ZM7at+T0o7AQSh3+TcAlzt/OayyhovW5KinoheZdA4IxcOV1LxzbBz5/RM6TT0rQJvi6PbYLuTQSd15Q420jblMV0y4PWtvn9K7q2vUcanfF1e9QZPf/Hv79WSMLhb2Xgz8dFPP/H15N1eMn1jrDxg+73Bdm5uWQblRI/Kg++F0K8TuCmawMCek1Qm5SfgaB7nRjm8LWaMWPdwfN/fN5B7TBMG+N0Iv67sLSzuGdTRTG2ZXJMCsB4ZBqMAvWqKhtrulg+IwJkxzALyXxkEbzT9jWS6PHsgN/xSbUWRufL2d5XonnXEayW8s54X+ks0tYwHOoDdZ3pvhLfj8rFfaUTST07m8zJpc+AcR0NIjrCMAOJbvn6O4an3xbD9lTsBc95ikiYi9L0LSPtyx/Y/yG2kQQjhrlsOfV/ArIH9n/DA2THMFeRenkN6d+4HdJ4bivgd3zi/q91/d+dKfo/0331QSxeLvZ/15N6dhfp/0YIYZocoqOBREcYJtXeAV+boLZlMQtD58EY5sE0fYuA/RvY/yE2ei8Gwzy6nPo/qTlVmP1HZccwT5F6+Qzp37BM6Vr6mwG/4xP3f63r/95I0f/xfqy1/d9AFi8X+7/nST17cznYf7yPov0f/f43nk2h6/v87ohkvx12bncEwcjPEdM+GePhXJz22yhTMQtD1wowzKcp+sSSgLiN/ccKTe90P4vqcTTzy+X9LLoPF7SnKvX/e2F7qnS/gJ9/p99pouefx4aktSkJg3WpOCQ/+n3539KMk/b3Yxr8TPdj/sxwP4bvlVFd0rszAmN14F4Tls3oANkK1w6XTWhPoVzSTqHlp9MdFCA7hmm3drOeOsA73Xul/dBaAb/jk8pOEf6ea4tvJ/Gz/EH/KWPbTqF3YehaL93Dwfc1124Oy/ce+JnVoDsDQfHGsnj0/zbHB8hf49mVP+w7IXSfZkVSz7AeSY5T40N0tCnREYah+wZSdhM/d4Q4qK3B778GnXfBMGUp+ix67ot+XzDo3JfU+fOw8ZZ+24Gf+0p31ojaFoNJnGHMT7IcMS9MG930rDPqdxjxw3dq/4xgfhr3zkK4RzDc6N6ZYEQZRhA/fKf2z84haa1GwuCaYHFIfkUkTFWa8df+emZDizsJOGYgNrqeiWG2SYGRpoU4hzF5qS7pfGeYddn8RJBsWDbDAmSrSaN/+98y8xMysjfVdVp+Ot2BAbJjmB3IuLQTsW+w3Gg/NCbgd3xS2T+0vAXGuwTtb/l3CWje/L/ELOTdoq9H+wfzoXviS/t6Yv/weRTqms4l+TwiKN7OLB69bz06QP4az678YXer6bd/B5F6NobYP1Lj1OgQHa1GdIRhRhAdSZ1n5OMP4qB7hFj+xSwMxi0iYSansX/QFkC56d4StROkvq8cds6cficF/ej5Gy6zri9zyPpPkP0zJECuoUJyYV6YNroxP2r/DCF++E7tH24TLW+7DWUIstuo/TM8JK1VSRi+l83zo3vZ+6UZf+2viTbZP9g2+H9g0faGYQ5MY/9wm3AIk5fqcmci2xDrsiUqgmTDshkSINthafQvYJNXCMneoq/l9g+VHcMcScalo4l9w+916t9PC/gdn1T2Dy1vie/x0vGOf5eO5r0LwWop7xZjLdo//Nsq9JuApxL7h9sNfIyg930pdh6P3/+l33IZGSB/jWdX/rDvR9O94oWknp1G7B+pcWpkiI5WJTrCMMOIjqTsHz7+II5U9s+qDB+1f85rpf1DbYsg+0dqvSHM/tmZYES/oQQjl1nXl0Ji/wwA/4EBctF1rcFZlgvz0xiT8E7vxOM7tX+4TbS87TaUYQjBIzVGDWZ4gvIW0EWS6h2fVGPXUIJHwDZtvP8+NAM89NsVEusnQnImqB1r+/47tz2HMl2VkjB0rivV94V9IwPzizFnB7PGw/s5arsOyRGM6EftEKl5cFi/S8sQx6NBATrLxl5FJjqjtozAmN94/70ry0vbJC8SG1bq/jvNr4bgoPuBGObgdZrDvgrY6JhO7Y6hzE9yLZ6ObTVe8BoLtwPpWgy9/y4x/gbZ5rxfC1rP4XLQOfUHaWzzqgAd4Dv2SXR/MBv9VGv2B1Fm2rdL2Ydh9xepLgTOCiaEdFxO56RtQ3RM96W+TbPexue3WH/o3i3qiq4BSNQfoXWd8qB1HcQf9H9Hv6TR2egQndE6jrrCsIUkL/ytzGt51xd/x7u+PA0dXkhHSaF1nfKgPcVU32P3YPwJ0z0/DzKM6Y7u9dHzOFLz4bD+BfOjdhDda8mlsbOU+KW6H70KuIfL6jVBbZYiL3gspTbLKus0Y8Yy5/ej6Rg8jKWNcVYh/sNY2mFr+va/pVOeoBj5/egxARhXT4PRfr0qT8jI3nIfHMsnGSA7hlmH2KvrwjttXwOIHrcI+B2fVGsldD4l8E2bRNA543EBedP/+LGUd4vz27jvwL8nSs84dyNtjZ+NRF3Tbx3h2QWKnccbyuLRM5VjA+Sv8ezKH3anA/PTZbI+qWdYjyTXh8eG6Ijej8YwQ4hukyweXy/XYbCc+P1ojFtEwiTT9C327fbg/i/JZKX9X9Vy6v+k5iy8/xscIDuG6UXqZR/Sv3E7pPG/OwN+xyfu/1rX/w1O0f/xfqy1/d8gFi8X+78aUs+GkP5vgBCmsDN9SaIjDDOS6JbPZzE87f+wPRWzMPS8J4YZlaZvsW//Bvd/iG0owYhhxi6n/k9qTsX7vwEBsi/9vhapl5NJ/8b3TvXvewb8jk/c/7Wu/5uVov/j/Vhr+78ki5eL/V8dqWd7Lgf7j/dRQWeT6X0dDB92r1fq2y5h93opbvRD3QXtJ+FcnPbbKFMxC0PXCjDMQSn6xJKAuLpcn+jQ9B50hoHOGenaca7ud9B9mqA9N6n78WF7bnQ9OejMLL7T87EjQtLqSsJg/SgOyY+ez1yUZpy0v6bd4Ge6Xn9SmvVPbt/wvRSqS7peLzBWB+5FYNkMDZDttDT6F+iTyiXtFFp+Ot1BAbJjmLPJ+HEusUOw3Gg/dHXA7/ikslNoeUt9t5J/t2d0QN70Ho+lvFvYhWin8Huf1C68KmBNGPWBuqbflcD9g1T/Wci/00Pvno4KkL/Gy87YSvdXLiD17Gpip0iNU6NCdNSV6AjD0H2DbP2vED/rEDT/68rw0fnff1L0WfRcEMpd4gWfQZSyt8LO4VB7C/2GEYxcZnoWRbeHavCnduQA5id5zhnzwrT5eV2NsRzeBxA/fKf2Dz8zu7zP9fJvd0m2h7D/qxokq4tkpmuMwnfOkrRdtgYPPa8rsc4rtXdK+3rb52N53zqY6SrbZxDD5kipvruV65jpfYag8wKDcgRj0FxYys4O68OCzlgMCNBZNu6FZqIz4f8FbDxruhnLS4/vH8uu2ycLWH41BAfmR79hN71zc9jPARsdH+kYzs+fSu6/pbtTQu0MOq7jOz1rKjGWBd3D4f0a3UMoDpGD7iH8lMbOrQrQAb7T893DmN/yvovNbV9JWwvrBM57BwToQmAelhDScZKuwbUN0TE9r1wA7Tls7Yqv52H9CVrTpGeDJeqP0BnWZNCaGL93QNfE2qfR2cgQndE6jrrCsIXesvPSMvDnfQCeNeXrUDq85DwprK1gfnRMp3c0c2kcoHNrKg++F0I8LFs6pxDQa4KOv/zsCF2TxDDrdm7GjHUHz03yPVc65mDaGGdl4j+EpZ29td5kgmJsy+QYGYCxLA1G+/UqmZBcC+Lr0eUBsmOYTYjt1RXeafuqJnqsCvgdn1RzaDo3yPZ6NM07F9ajK0lb4+vKqOtM16P5OnYurkd3I/UM65HkuuGoEB0NIDrCMHRNuJzFw/B0LQHLqZiFwbhFJEyfNH2LfRs0uP8rZ7LS/q/fcur/pOxv3v8NDJAdw+xI6uUA0r9xO0T/Pjbgd3zi/q91/d+YFP2f6X7cABYvF/u/waSejSX9X7UQplEhOionOsIw9D8LcE+Hrp/h73S/p1wId9i9UYob/VB3tE/GeNiX0X6bn3dfmaVDz7vXp+gTSwLi6nJ9u33Te9DeDrWZ6DpArq5d5fL97qBvzfD73UHrQhhmMxKG/0dS0D1sDLNfmnHS/vpEg5/p2suBGa698HWxsHvZAuUduK60GcNDZTssjf4FzrIlJes6/+/XAQGyY5gjyfhxNLFDsC3Q9fbTAn7HJ5WdQstbYG4a+B3pkQF50+/fWcq7xZiIdgq/b02/YX0qsVP4+M7/o1G3GbQnKXYej9+fp2dgdw6Qv8azKz9fQ+T3yhu/q0fq2WnETpFa/wv7zudmREcYhq6bZeu8Cd8/o2NUsRe+t4VhzkvRZ9E93qDzxdROkDqnGzbeUpsQ/eg+NJeZ7ivq9tAH/KtJnHLmp+VKCsnF5/Hoxvw0xt7wXk788J3aP/ws0fI+78RtdKF9XJ+etce0g/IW0EUy0zm28LcaG7+rl8l/KdJzTBLrHFJ7B3ROYvvcEO9rBjJdZfs8Sdgcie51xJjlMWs8vJ+j8+UBOYIxaP4uZReF9btB+6LlATrLxjdgM9EZXTsSGPMbzzptzvJqPMvcWTTfcmpr4JyG4ygiYQ5ctznsq4AtzO7g558k18zTnQ+mdge1RfCdnnWSGH+DzlTzfo3uexR74Wv/GOaDNLZ5VYAO8J2ujw5hfpJtzuT/MrJhH+JcPcg+FFjjlLp33uL7jW1DdEzPy32bZr2Nr0Hy+R5dh6Vn0yTqj8waZZPO+Dpe0He6MMwvGa5RBt1v5d8nlDr7JnQ+rDzT82F/ZXg+jH/vLOh8mOQ8NqxfwPzC7JdcGvOC7tFT2Qoh3krgHiyr1wS1NfjeNr37vnSvbN1mzPxcF7cn6fjKz3WtRPwHsbSzeYeXYuTfgxoZgHHVNBglvrMsJHvguYbeAbJjmDWJnbk2vNP21YfocbOA3/FJtcZB50HZPtdA886Fcw1dSVvj5xNQ15meaxjI4uXiuYZ1ST3DeiR5PmBUiI7o96AwzACi294sHoan6yZYTvx7UBi3iITZOk3fImBvB/Z/vZmstP8rX079n9RcI+xcK5Udw1STerkN6d+4HaJ/HxjwOz5x/9e6/m9Aiv6P92Ot7f+SLF4u9n99SD0bSPq/PkKYRoXoqDfREYYZRnTL56EYnvZ/2J6KWRh6HgHDjEjTtwjYv4H9H2Kj9x0wzOjl1P9Jzal4/9cnQHYMsyuplxNI/4ZlStdIZwb8jk/c/7Wu/5uRov/j/Vhr+7/eLF4u9n+TST2buRzsP95HhZ1rxTMHGF7XdX5GQfI8Qh+GG93UbkU/1B3tkzEezsVpv40yFbMwdK0AwxyQok8sCYiry7VxEcwL/tYKnTPSNd9c3afI5bvkQd+I4XfJg/YAMMzmJAw/oxR05xvDHJtmnLS/Ft3gZ7rOfnwKjEH2TdB/hgfdAZeyU7hsWDYDA2Q7JY3+Bc6fitoptPx0uskA2THMGWT8OIvYIVhutB+6IuB3fFLZKbS8Bc7RtfjPSP5tR5o3/T61pbxb2IVop2A+1F7E938HrAmjPpba9sCDviEZFI/fMS8lYYYHyF/j2ZU/7M4I3V85l9SzK4idkq3vz6GONic6CvrPQSn7g48//IxC0Pxvc4aPzv9uSNFn0fM89Fwrtx2E+raU5z+pncjvRJYEyEzPkOj20A/8+5A4vZmf5L0uvo6JbsxPY+wL772JH75T+4efOVne53FRhnKCR2oewe+LBeUtoIsk1Ts+qcYu4W8sJjNd86TnbCXWeaX2Tmlfb/tcK+9bg/a6s3l2MGyORPd6XcNM+2v6LVIMV54jGIPmwlJ2dlgfFnTGoneAzrLxHdRMdEbXYQTGz8Yzot1YXnp8/2Bd0XyTdNzG+QHHQddopq7XHPYTwBY2hieZXzbO+mHa/Kxf0PeC6XoMPSMqMZYF3Z/h/RrdQygOkYPuIXyfxs6tCtABvtNzTYOYn2Sba823h/n/4mTD1sJ5b5CtJTAPSwjpuMV3F9uG6JieM16SZu2Kr+dh/aFrmqgreqZXov7IrPc16YyviQV9k2xpmPVS62xYiM5oHeffFSz0lp2XloE/7wPwe3gYLknCS86TwtoK3ScIGtNzaRyg3xEJ+kZHIcQrBTedU0jcDaHjb6o1SQyz9nrNmLHu4LlJbmPRMQfTpmsM6D+ApZ3Ftd4KirEtk2NYAMb10mAUqFcVkmtBfD26b4DsGGZDYnttDO+0ffUjeiwP+B2fVHNoOjfI9no0zTsX1qOTpK3xdWXUdabr0UkWLxfXo7uSeob1SGPqLYRpeIiOqomOMEyq/WcMT9cSsD0Ve8H2XREJs02avqWfffkD+z/E1o9gxDDbLqf+T0D2wP6vd4DsGKY/qZc7kP6N2yH699EBv+MT93+t6/9Gpej/eD/W2v6vmsXLxf5vAKlno0n/11cI0/AQHdHvymEY+l3noO+Y4O90v0dq7hx235PiRj/UHe2TMR7aorTf5t8xLWXp0O+Y1qboE0sC4upy/bNd03vQt1aozUTXAXJ17SqX72WjDKnuZQetC2GYbiQM1o9U96cxzD5pxkn76xMNfqZrL/unWUfg7Yuvi4Xdp5bYGwySDcsmGSDbwWn0L3CWLZmNMwpop1QHyI5h5pPxYwGxQ7Dc6Hr7KQG/45PKThH+f98W/6XFz7PTvJf+r4YnMyainYL50Dvb+L6Y2Cl8fOdncIO+IRkUbxCLR7/tOjRA/hrPrvxh/xtD77IfTerZKcROkRqnhoboqBvRUdD/R0mdN+HjD9+3Cjp/3I3ho2trZ6fos8LO5HDbQahvS3m+htqE/M5dSYDMdF9Rt4cdwL8fidOX+UneG+L2ILoxP42xP7z3JX74Tu0fvg+5vM87oQy9CR6pdZSwc/y9ZXWRzPRujvCdhmSmc37pb4dL7R3Qvt72uSHetwbt9WTzPEnYHInudbiGmfbXdA7P700ub4xBc+HleRcJ+/a+ATrLxndQM9EZXYcRGD8bzw1twfLS4/sz64nmm6TjNs4POA66tj6kS3PYFwBb2Bhezfyycf4D0+Zrb0HfC6brMfTckNS8O2yfg56Px/4s1T4HhnkzjZ1bFaADfKf7+gOYn2SbG+C11EHQuhLKTPt2aVsL571BtpbAPCwheT6N31/nOqZnzz5Ls3bF1/P4/Qq67krPeUnUH5n1vuA1saBvXmGYbzNc70Od0TrOv9FX6C07Ly0Df94H4LkhDFdNwkvOk8LaCt3fDRrTc2kcoPe0qTz4XgjxOoKbzikkzgvT8TfVmiSGadOlGTPWHTw3xG0sOuZg2vSuKvqXs7Szt9Zb0eJ7c22ZHEMCMLZLg9F+vapISK4F8fXo/gGyY5gVie1VCu+0fe1A9LhewO/4pJpD07lBttejad65sB69LmlrfF0ZdZ3pejQ/E5eL69GrkHqG9Uhy33xoiI76EB1hmN5Et/1ZPP6tGh0Gy6mYhcG4RSTMxmn6Fvs2aHD/15/JSvu/zZZT/ydlf/P+r2+A7BimO6mXW5P+jdsh+vdtA37HJ+7/Wtf/9UnR//F+rLX9Xx8WLxf7vySpZ9uS/m8HIUxDQ3TUn+iI/1+T9usH7/SeOP5O93v6C+EOuwNEcaMf6o72yRgPbVHab/PvZHZk6dDvZA5K0SeWBMTV5fogOTfE+xxqM9F1gFxdu8rlu3pBd/D5Xb2gdSEMswUJg/Uj1Z06DDMhzThpf32iwc907WVKCoxB7Yuvi4XdsRMo78B1pS0YHirb9DT6FzjLlpSs67T8dLp9AmTHMDPJ+DGL2CHYFuh6+8EBv+OTyk4R/n/fFv+lxb+dRfOm3/+0lHeLMRHtFMyHnjPH93nETuHj+9J9C+BB3+gKisfvQpaSMIMD5K/x7MofdiaX3m/ci9Szg4mdIrX+NzhER1sQHQX9F5PUvJHvMSIOekYZcRR74XtbGObIFH0W3eMNOl9M7QSpc7ph4y21Cfmdm3T7ivTc0DYkTj/mJ1mOmBemjW56Rghtyn7ED9+p/dOH+S3PczrUtqRnoPCd2j+9Q9JakYThZ+l5fvQs/dlpxl/7fUST/VMBafFvx9NvUGCY89PYPxXEXeM1lzfVL+qggsjWz7psTfYPlw3Lpl+AbJem0X+FAEYh2VvMUfg6NZUdw1xJxqWriX2D5UbnYXcG/I5PKvuHlrfUfe4BBGcNyYfmTeeslvJusU+O9g8/70TPAdxB7B9+dgp1TedffD8yKB7/hjc9c1UeIH+Nl52xjp59vY7UszuzsE5dHqKjFYmOMAw9LyS1bsTXvxEHXWvh6ygYhq5/Y5gH09g/aAsEfd+a2gkCfVvK8baCYEQ/uv/MZdb15ZDipveOJH53EifJ/LRcCSG5wuo65pduHSXdmaueQrjD1q16EowoQ6ozVwUkDk+rhITBOlYckl8RCfNqmvF3G5JXDbwnIj1N9k8vSAvHDMS2DcGIYd5MY//0Iu4ar7m8qX5RB72IbALjYVWQbFg2yQDZ3k+j/14CGIVk92nd4/8LRGXHMJ+QcekzYt9guVE78teA3/FJZf/Q8pY4j6rz3pbgrCH50LzpXNtS3j7NG+0fzAf9i8j7L8T+4XdQUNd0/oXjV6q7zD1ZvFJv2X2CbK5t8HFNl8mXpJ79SuwfqXGqd4iOSoiO+Hwvm/smiIN+WwTLv5iFCZqP/p3G/kFbgMrNbQehvs0Pmg+juxfBiH4JgpHLrOvL5W2b3nV7wHE4GSCX9J2aVHLR/S+0ZyqIH75vRXAnmJ/G3V0Id4LhRnd3ghFloLYcvm8NvIDE4WmtQMLw9R+eH52Dr75+E8/i+k8FteNwzEBstL1hmLVTYAyyCXlbo7rsSWSzP/9osu24bFg2FQGyrZ9G//Zt8gZfcu7F138qA2THMBuv36ynTeFdt00styqix8qA3/FJZf/Q8hbob1t8zw/Lu1dA3vxMtIW8W4y1aP8ErfXie8X6zWG53YC6Ruy6zaCdGnT+GeN1Z/Ho3HqbAPlrPLvy87lPL4ZZl8nmpJ5hPZIcp7YJ0dEKREcYJkF0VCmEh48/iAPz02Gw/ItZGIxbRML0SdFn0b0luk7CbQfJ9YYqr6W86O5JMPI7TyUBMuv6MojYP+i/JYmTZH6S9Sps/YfaP6jzoPUfav9wm0iy/oXZbZUEI8oQZLdR+6cyJK0OJAyvyzw/WpdHpRl/q0heNfCeiPQ02T89IC0cMxBbFcGIYcamsX96EHeNt+x6H9VlDyKbQHkng2TrwPBQ2Sal0X8PAYySdZ2Wn063e4DsGGYqGZemEfuGzwX073MCfscnlf1Dy1ugv03Q8Y6vZdK8exGslvJuMdai/YP50HU4fN+X2D/cbuDzg6A106B45SxeKQlTHSB/jWdXfj736ckw6zLZjdSzOcT+kf5uONdRB6IjDEP3SKXWo/icGXFgfkHrPxiGzpkxzMFp7B+0BahtgXGpnSDQt6Ucb3sQjHzdpiRA5sb2DJ0LtX98EmdL5idZrzAvTHtLJgO1f7YkfvhO7Z9y5ic5Jw77vzFq6wTZcvhO7Z+KkLTakzA41hSH5FdEwpySZvy1P0422T90bl/jpbbRTk9j/3B7f0smL9Ul/X7DltZla2kDoGxYNlsGyHZu1u3PpvvxUrLT8tPpdg+QHcNcRMalS4h9w9em9e83BfyOTyr7h5a31L1svt4X9K0QaqdYyrvF+I/2D+ZD97rx/UZi//A1iqD9dxwvKHYer4LFo2sbPQLkr/FkbY1qhrlxD4PUs5uyYP/0CNFRe6IjDEP772zZP4iD2j/8/1YxDLV/MMydaewftAVQbjreUjtBom9LNd5WEYxB/9/HZdb15W94h2tgXjFJm/c7On4hvC+xJ1NjMbUhmPDBvIrI78UES4F9LD6Vt423rA5WCdBPMeMUuxciD0+DvheSsEG/B/mVBOSzSoBf+1ZgDcK+HfhzDNvBO8ZpA35BmKl823nLyljA3oPSaa2c/w9xVNn7OSAMAA==", "debug_symbols": "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uLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW4s6kadzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW4s6kadzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTde5sqs6dTdW5s6k6dzZV36inbufOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpwsYdTnWrn3ru3uqnHry3+qkn761+6tF7q5969t7qpx6+t/qpp++tfurxe6uffP5yx1Td6iefv9xBVbf6yecvd1TVrX7y+csdVnWrn3z+csdV3eonn7/cgVW36sjnL3dk1a068vnLHVp1q458/nLHVt2qI5+/3MFVt+rI5y93dNWtfvL5yx1edauffP5yx1fd6iefv9wBVrf6yecvd4TVrX7y+csdYnWrn3z+csdY3eonn7/cQVa3+snnL3eU1a1+8vnLHWZ1q598/nLHWd3qJ5+/3IFWt/rJ5y93pNWtfvL5yx1qdauffP5yx1rd6iefv9zBVrf6yecvd7TVrX7y+csdbnWrn3z+csdb3eonn7/cAVe3+snnL3fE1a1+8vnLHXJ1q598/nLHXN3qJ5+/3EFXt/rJ5y931NWtfvL5yx12dauffP5yx13d6iefv9yBV7f6yecvd+TVrX7y+csdenWrn3z+csde3eonn7/cwVe3+snnL3f01a1+8vnLHX51q598/nLHX93q556/gTz/KpDnXwXy/KtAnn8VNu75G8jzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrSJ5/FcnzryJ5/lUkz7+KG/f8jeT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief7VTp5/tZPnX+3k+Vc7ef7VvnHP3508/2onz7/ayfOvdvL8q508/2onz7/ayfOvdvL8q508/2onz7/ayfOvdvL8q508/2onz7/ayfOvdvL8q508/2onz7/ayfOvdvL8q508/2onz7/ayfOvdvL8q508/2onz7/ayfOv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zqYZMj5n0wwZn+8zM2R8vs9MkMHOr38bmbz3vz6b8+DbO9hZ95eS8fk+M0PG5/vMDJkkMgMyPjXwDBmfGniGjE8NPEPGpwaeIeNTA0+Qwd47cCkZaeARGWngEZmFNPBP/uR6fweuH7aVvnxbEHtPwqVkFtLAxmQW0sDGZBbSwMZkFtLAxmQW0sC2ZLD3RZxB5nVXwQcyC2lgYzILaWBjMj418EtixouT+EgmicyAjE8NPEPGpwaeIeNTA8+Q8amBZ8j41MDHZCr2no8zyAxyrir2TpBLyfjUwDNkPGjgZ7fJVbfQWrXsjw/X13+dX3bbHymavb6SSS/dQutP826hNaV5t9A60bxbaO1n3S32vhPzbqE1mnm30LrLvFtoLWXebXLVrSsthb3vxLxbV1oKe9+JebeutBT2vhPzbl1pKex9J+bdutJS2PtOzLt1paWwd6OYd+tKS2HvUTHv1pWWwt6NYt6tKy2FvcPEvFtXWgp714h5t660FPZOEPNuXWkp7N0d5t260lLYOzbMu3WlpbB3YZh360pLYe+sMO/WlZbC3i1h3q0rLYW9A8K8W1daCntXg3m3rrQU9k4F825daSns3Qfm3brSUtg7Csy7daWlsistlV1pKew9EebdutJSxZWWKq60FPauDvNuXWkp7J0a5t260lLYuy/Mu3WlpbB3VJh360pLYe+SMO/WlZbC3vlg3q0rLYW9m8G8W1daCnuHgnm3rrQU9q4D825daSnsnQTm3brSUti7A8y7daWlsDP+zbt1paWws/jNu3WlpbAz8827daWlsLPtzbt1paWwM+jNu3WlpbCz4s27daWlsDPdzbv1pKUadva6ebeetFTDzkg379aTlmpbctWtJy3VXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWeN1e5581V7nlzlXveXOWe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yVm/0BroDf1CK6Y39OtMX2HnEr+hX1/6asfOJX5Dv7701Y6dS/yGfn3pq31Lzvr1pa927FziN/TrS1/t2LnEb+jXmb7CziV+Q7/O9BV2LvEb+nWmr7Bzid/QrzN9hZ1L/IZ+nekr7FziN/TrTF9h5xK/oV9n+go7l/gN/TrTV9i5xG/o15m+ws4lfkO/zvQVdi7xG/p1pq+wc4nf0K8zfYWdS/yGfp3pK+xc4jf060xfYecSv6FfZ/oKO5f4Df0601fYucRv6NeZvsLOJX5Dv870FXYu8Rv6daavsHOJ39CvM32FnUv8hn6d6SvsXOI39OtMX2HnEr+hX2f6CjuX+A39OtNX2LnEb+jXmb7CziV+Q7/O9BV2LvEb+nWmr7Bzid/QrzN9hZ1L/IZ+nemr4kxfFWf6qjjTV9g52/b9Yidtv6FfZ/qqOtNX2Fnqb+g3OevXmb7CTlR/Q7/O9BV2qvob+nWmr7CT1d/QrzN9hZ2u/oZ+nekr7IT1N/TrTF9hJ7K/oV9n+spZfvvuLL99d5bfvjvLb9+d5bfvzvLbd2f57buz/PbdWX777iy/fXeW3747y29PzvLbk7P89uQsvz05y29PW3LWry99lZzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3JWX57cpbfnpzltydn+e3ZWX573taZR63f223945/87HadaTTT7Tp3VQ/hrw/3uA26Xeemmuh2oRzkmW7XcYEz3a7jAWe6XccBznS7zryd6XadeTvT7Treb6bbdZzfTLeutNRCqccT3dJmHj87YNVHzw6gNc/eHx2kEg7+xeX9/uGc8+BfHLTmMe82ueoWWvOYdwutecy7hdY85t1Cax7zbqE1j3W32DnE5t1C6yPzbl1pKewEYvNuk6tuXWkp7Oxh825daSns3GHzbl1pKezMYfNuXWkp7Lxh825daSnsrGHzbl1pKeycYfNuXWkp7Ixh825daSnsfGHzbl1pKexsYfNuXWkp7Fxh825daSnsTGHzbl1pKew8YetusdNXf9RtKvff/09l8Pv/2Nmr5t2uc0uldv+dtdQHv7OGnctp3u06t9RMt+s4volusRM5zbtdx/HNdOvK8WFncZp3m1x168rxYadwmnfryvFhJ3Cad+vq9Rw7fdO8W1ev59jJm+bdutJS2Kmb5t2yaqlnB6z66NkBtObJ291attubrcG/OGjNY94ttOax7hY7EdO8W2jNY94ttOYx7xZa85h3m1x1C615zLuF1kfm3brSUtgJmObdetJSBTv90rxbT1qqbJ60VNk8aamyJVfdetJSZfOkpcrmSUsV7IRe825daSnshF7zbl1pKeyEXvNuXWkp7IRe825daSnshF7zbl1pKeyEXvNuXWkp7IRe825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pKezkX/NuXWkp7ORf825daSns5F/zbl1pqeJKSxVXWgo7w9q8W1daqiRX3brSUtj55ObdutJS2Pnk5t260lLY+eTm3brSUtipzj/q9nhDRsFOdTbvdp1b6jhpv2An/5p3u84tNdPtOo5vptt1HN9Mt8lVt64cH3ZKsHm3rhyfq0Th4ipRuLhKFC6uEoWLq0Th4ipRuLhKFC6uEoWLq0ThQpso/OyAVR89O4DWPGW719FK3A7+xY3/5Hu3FTv517xbaM3zo25jfJSR8qBbaM1j3i205jHvNrnqFlrzmHcLrXnMu4XWPD/rNt9/OhVrGHQLrY/Mu11HS010i538a97tQlpqotuFtNREtwtpqYluk6tusbVUvv/JrZb9oNsQ4/1JJbzqi9DqS7/Yasq+X2w9Zd8vtqKy7xdbU5n3i50B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UJR3saAo72JBUd7FgmISRQOK8i4WFOVdLCjKu1hQlHexoCjvYkARevctD0V5FwuK8i4WFOVdLCgmUTSgKO9iQVHexYKivIsFRXkXC4ryLgYUobfBYlA83gYboLfB8lDUdPn9d0YD9AZOHoqaLgYUoTdw8lDUy5gFRb2MWVCUXjzckr33vz6bcx5QTKJoQFEvYxYU9TJmQVHexYKivIsFRXkXA4rQGzh5KMq7WFCUd7GgKO9iQTGJogFFeRcLik69yw+qCLm3O42y1WcVub5wdOpezDk69S/mHJ06GGuO0Js4mTg6dTHmHJ36GHOOTp3MTziWrT84hjbgmMTRhKNTN2POUX7GhqP8jA1H+RkbjvIzJhyht3OicMxPjmXEUX7GhqP8jA1H+RkbjkkcTTjKz9hwlJ+x4Sg/M/jOEPT+zWvJyHMMyEDvybyWjHzBiIyU/oiMtPuITFqHzOE+obDQrtKZbhdSthPdLqQ/J7pdSFNOdLuQTjzudqVdpRPdLqTnJrpdSKNNdLuQ7proNrnq1pWWWmlH50S3rrTUSvsxJ7p1paVW2jc50a0rLbXS/saJbl1pqZX2IU5060pLrbRfcKJbV1pqpX19E9160lJxpf13E9160lJxpX1yE9160lJxS6669aSl4kr7zia69aSl4kr7wya6daWlVtrHNdGtKy210n6riW5daamV9kVNdOtKS620f2miW1daaqV9RhPdutJS0ZWWiq60VHSlpVbadDXRbXLVrSstFV1pqZW2gk1060pLrbRl67jblbZhTXTrSkuttF1qoltXWmqlbU0T3brSUittP5ro1pWWWmmb0ES3rrTUStt5Jrp1paVW2nYz0a0rLbXS9piJbl1pqZW2sUx060pLrbTZZKJbV1pqpS0hE9260lIrbdyY6NaVllppe8VEt6601EqbICa6daWlVtqqMNGtKy210oaCiW5daamV0v4nunWlpVZKzp/o1pWWWimFfqJbV1pqpfz3iW5daamVctonunWlpVbKU5/o1pWWcpV7Hl3lnkdXuefRVe55dJV7Hl3lnkdXuefRVe55dJV7Hl3lnkdXuefRVe55XCkb+yebk0J8VJEPPptK/uuzqZQBRad77mwprpTlfSFFp/vzjCk63bVnTNHpXj5jikkUDSg63adtTNHpNm1jik53aRtTlHexoCjvckQxb/c/N4f2JcV9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ul1Iz010u5BGm+g2uerWlZZaaIPjTLeutNRCGxxnunWlpVbayjjRrSsttdL2xIluXWmplbYcTnTrSkuttI1woltXWmql7X4T3XrSUnWlbXkT3XrSUnWl7XMT3XrSUnVLrrr1pKXqStvRJrr1pKXqStvGJrp1paVW2t410a0rLbXSNqyJbl1pqZW2S01060pLrbStaaJbV1pqpe1HE9260lIrbROa6NaVllppO89Et6601Erbbia6daWloistFV1pqZX2K01060pL7a601O5KS620i2qiW1daaqXdThPdutJSK+1KmujWlZZaaffQRLeutNRKu3wmunWlpVbajTPRrSsttdKumYluXWmplXa3THTrSkuttAtloltXWmql3SIT3brSUivt6pjo1pWW8rpv4Ccbiss9bTKVMqCoXWkWFLUrzYKidqUZUPS6b8CYovY8W1DUnmcLitrzbEExiaIBRe15tqAo72JBUd7lcCvsdv9zc2gDivIuFhTlXQwoet1jYExR3uVwuvQnxT6gKO9iQVHexYJiEkUDivIuFhTlXSwoyrscUmz3nwGmPvgZ4Eq7Ki6kKO9iQHGl3RoXUpR3saAo72JBUd7FgmISRQOK8i4WFOVdLCjKu1hQlHexoCjvYkBxpV02F1KUd7GgKO9iQVHexYJiEkUDivIuFhTlXSwoyrtYUJR3saAo7/J7im2l3VEXUpR3saAo72JBUd7FgmISRQOK8i4WFOVdLCjKu1hQlHexoCjvYkBxpV1tF1KUd7GgKO9iQVHexYJiEkUDivIuFhSh9WJO6f7h3MMBRdvv3zfsXXBXksHeG3cpGWitdikZaP11KRloTXUpmSQyAzLQ2udSMtBvsZeSgX5fvZSMNPCIjE8NfJxC07D3/V1KxqcGniHjUwPPkHGqgQ+TNBr2fsJLyTjVwBNknGrgCTJONfAEGacaeIKM03fg458dYO9pvJSM03fgCTJO34EnyDjVwBNkksgMyDjVwBNknGrgCTJONfAEGacaeIKMNPCADPZ+zUvJSAOPyEgDj8hIA4/IJJEZkJEGHpGRBh6RkQYekZEGHpGRBh6Qwd7JeikZaeARGWngERlp4BGZJDIDMtLAIzLSwCMy0sAjMtLAIzLSwAMy2Ls9LyUjDTwiIw08IiMNPCKTRGZARhp4REYaeERGGnhABnvfX6z748OhWpI5/k4c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mTubKnNnU2XubKrCnU1VuLOpCnc2VeHOpiob9dQt3NlUhTubqnBnUxXubKrCnU1VuLOpCnc2VeHOpirc2VSFO5uqcGdTFe5sqsKdTVW4s6kKdzZV4c6mKtzZVIU7m6pwZ1MV7myqwp1NVbizqQp3NlXhzqYq3NlUhTubqnBnUxXubKrCnU1VuLOpCnc2VeHOpirc2VSFO5uqcGdTFe5sqsKdTVW4s6kKdzZV4c6mKtzZVIU7m6pwZ1MV7myqwp1NVbizqQp3NlXhzqYq3NlUhTubqnBnUxXubKrCnU1VuLOpCnc2VeHOpirc2VSFO5uqcGdTFe5sqsKdTVW4s6kKdzZV4c6mKtzZVIU7m6pwZ1MV7myqwp1NVbizqQp3NlXhzqYq3NlUhTubqnBnUxXubKrCnU1VuLOpCnc2VeHOpirc2VSFO5uqcGdTFe5sqsKdTVW4s6kKdzZV4c6mKtzZVIU7m6pwZ1MV7myqwp1NVbizqQp3NlXlzqaq3NlUlTubqnJnU9WNeupW7myqyp1NVbmzqSp3NlXlzqaq3NlUlTubqnJnU1XubKrKnU1VubOpKnc2VeXOpqrc2VSVO5uqcmdTVe5sqsqdTVW5s6kqdzZV5c6mqtzZVJU7m6pyZ1NV7myqyp1NVbmzqSp3NlXlzqaq3NlUlTubqnJnU1XubKrKnU1VubOpKnc2VeXOpqrc2VSVO5uqcmdTVe5sqsqdTVW5s6kqdzZV5c6mqtzZVJU7m6pyZ1NV7myqyp1NVbmzqSp3NlXlzqaq3NlUlTubqnJnU1XubKrKnU1VubOpKnc2VeXOpqrc2VSVO5uqcmdTVe5sqsqdTVW5s6kqdzZV5c6mqtzZVJU7m6pyZ1NV7myqyp1NVbmzqSp3NlXlzqaq3NlUlTubqnJnU1XubKrKnU1VubOpKnc2VeXOpqrc2VSVO5uqcmdTVe5sqsqdTVW5s6kqdzZV5c6mqtzZVJU7m6pxZ1M17myqxp1N1bizqdpGPXUbdzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW4s6kadzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW4s6kadzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW4s6kadzZV486matzZVI07m6pxZ1M17myqxp1N1bizqRp3NlXjzqZq3NlUjTubqnFnUzXubKrGnU3VuLOpGnc2VePOpmrc2VSNO5uqcWdTNe5sqsadTdW5s6k6dzZV586m6tzZVH2jnrqdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpurc2VSdO5uqc2dTde5sqs6dTdW5s6k6dzZV586m6tzZVJ07m6pzZ1N17myqzp1N1bmzqTp3NlXnzqbq3NlUnTubqnNnU3XubKrOnU3VubOpOnc2VefOpgobdzjVrX7quXurn3rw3uqnnry3+qlH761+6tl7q596+N7qp56+t/qpx++tfvL5yx1TdauffP5yB1Xd6iefv9xRVbf6yecvd1jVrX7y+csdV3Wrn3z+cgdW3aojn7/ckVW36sjnL3do1a068vnLHVt1q458/nIHV92qI5+/3NFVt/rJ5y93eNWtfvL5yx1fdauffP5yB1jd6iefv9wRVrf6yecvd4jVrX7y+csdY3Wrn3z+cgdZ3eonn7/cUVa3+snnL3eY1a1+8vnLHWd1q598/nIHWt3qJ5+/3JFWt/rJ5y93qNWtfvL5yx1rdauffP5yB1vd6iefv9zRVrf6yecvd7jVrX7y+csdb3Wrn3z+cgdc3eonn7/cEVe3+snnL3fI1a1+8vnLHXN1q598/nIHXd3qJ5+/3FFXt/rJ5y932NWtfvL5yx13dauffP5yB17d6iefv9yRV7f6yecvd+jVrX7y+csde3Wrn3z+cgdf3eonn7/c0Ve3+snnL3f41a1+8vnLHX91q597/gby/KtAnn8VyPOvAnn+Vdi4528gz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzrwJ5/lUgz78K5PlXgTz/KpDnXwXy/KtAnn8VyPOvAnn+VSDPvwrk+VeBPP8qkOdfBfL8q0CefxXI868Cef5VIM+/CuT5V4E8/yqQ518F8vyrQJ5/FcjzryJ5/lUkz7+K5PlXkTz/Km7c8zeS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5V5E8/yqS519F8vyrSJ5/FcnzryJ5/lUkz7+K5PlXkTz/KpLnX0Xy/KtInn8VyfOvInn+VSTPv4rk+VeRPP8qkudfRfL8q0iefxXJ868ief5VJM+/iuT5Vzt5/tVOnn+1k+df7eT5V/vGPX938vyrnTz/aifPv9rJ86928vyrnTz/aifPv9rJ86928vyrnTz/aifPv9rJ86928vyrnTz/aifPv9rJ86928vyrnTz/aifPv9rJ86928vyrnTz/aifPv9rJ86928vyrnTz/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eXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z43V7nnzVXueXOVe95c5Z53V7nn3VXueXeVe95d5Z73Lbnq1pOW6q5yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz7ur3PPuKve8u8o9765yz/tC2dit37tt/eOf/Ox2nXk70+1Cd3II93/Jcfu625Xykye6XehOnuh2oTt5otuF/O1Et8lVtwv524luF/K3E90u5G8nul3I305060hLxW2l/OSJblm11LMDVn307ABa89R2/0dUW98P/sWN/+Rnt8lVt9Cax7xbaM1j3i205jHvFlrzmHcLrXmsu8XOOTbvFlrzmHcLrY/Mu3WlpbBzjs27daWlsHOOzbt1paWwc47Nu3WlpbBzjs27daWlsHOOzbt1paWwc47Nu3WlpbBzjs27daWlsHOOzbt1paWwc47Nu3WlpbBzjs27daWlsHOOzbt1paWwc47Nu3WlpbBzjs27daWlsHOOzbtdZwIdftvh1u06E2im23VuqYnf0MNOELXuFjtB1LzbdRzfTLfrOL6ZbtdxfDPdrjNvZ7pdZ97OdLuO45vpdh3HN9OtKy2FnSBq3S12gug33T47YNVHzw6gNU9P8W62wrYd/IsLJfd71aW8VJ3rS7/QqucN/SZn/UIrnzf0C6193tDv/8Pev6XHriM722iP9iNRQR0at/q+/f1rZipda7DEnAMSIwK4qwuXLbwxpgjQToRr93ODXtf+5wa9rh0QXq/v5s8b9Lp2TDfoJfNXvvs/b9Br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V3Pw/qs5eP/VHLz/ag7efzUH77+ag/dfzcH7r+bg/Vdz8P6rOXj/1Ry8/2oO3n81B++/moP3X83B+6/m4P1Xc/D+qzl4/9UcvP9qDt5/NQfvv5qD91/Nwfuv5uD9V3Pw/qs5eP/VHLz/ag7efzUH77+ag/dfzcH7r+bg/Vdz8P6rOXj/1Ry8/2oO3n81B++/moP3X83B+6/m4P1Xc/D+qzl4/9UcvP9qDt5/NQfvv5qD91/Nwfuv5uD9VyV4/1UJ3n9VgvdfleD9V2WKff6W4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef1WC91+V4P1XJXj/VQnef7UE779agvdfLcH7r5bg/VfLFPv8XYL3Xy3B+6+W4P1XS/D+qyV4/9USvP9qCd5/tQTvv1qC918twfuvluD9V0vw/qsleP/VErz/agnef7UE779agvdfLcH7r5bg/VdL8P6rJXj/1RK8/2oJ3n+1BO+/WoL3Xy3B+6+W4P1XS/D+qyV4/9USvP9qCd5/tQTvv1qC918twfuvluD9V0vw/qsleP/VErz/agnef7UE779agvdfLcH7r5bg/VdL8P6rJXj/1RK8/2oJ3n+1uO5fsrX+87W2tp7f8/u/5/k9v39sn1/Pf0yN5/f8/ul4ftf9Pz3P7/n90/P8nv1/z/N79v89z+/5/V+X45+vrbU2nt/z+7/n+T37/57n9+z/e57f8/nb8/yez9+O53fd/9Pz/J7P357n93z+9jy/5/O35/mDn7+u+396nj/4+eu6/6fn+YOf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K9+9xDfoJfNXvnuJb9BL5q9WMn+1kvmrlcxf+e7Zxuv13bR9g14yf7WR+SvfXeo36DUyvWT+ynej+g16yfyV71b1G/SS+Svfzeo36CXzV77b1W/QS+avfDes36CXzF/5bmS/QS+ZvyLrb1/I+tsXsv72hay/fSHrb1/I+tsXsv72hay/fSHrb1/I+tsXsv72hay/3cj6242sv93I+tuNrL/dJiPTy+WvjKy/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tuNrL/dyPrbjay/3cj6242sv93I+tsrWX97nfKcR/vxkrsfv7/zqTbPadSjNs+76pjnf774KFNDbZ43VYfaRD3IPWrzpMAetXkyYI/aPAmwR22e87ZHbZ7ztkdtnuzXozZP8utRS+WlErUed6gN23l8Kojqj04Frj3PcrwV2Dpf/Iury+uLa62Nf3GuPQ9crVGpde154Gpdex64WteeB67WteeBq3XtedBqffcQw9W69kdwtVReyncDMVytUaml8lK+u4fhaqm8lO/eYbhaKi/lu3MYrpbKS/nuG4arpfJSvruG4WqpvJTvnmG4Wiov5btjGK6Wykv57heGq6XyUr67heFqqbyU715huFoqL+W7UxiulspL+e4TRqv13b76lVpbX3//b2vj7/99d6/C1eZ5S9n++ps1Oxp/s+a7lxOuNs9bqkdtnsTXodZ3IydcbZ7E16OWKvH57uKEqzUqtVSJz3cLJ1wtVeLz3cAJV0t1e+67fROulur23HfzJlwtlZfy3boJVxvVS50KovqjU4Frz1OnV7Tcf+5sAf/iXHseuFrXnget1ncj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779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuvWvL+q5a8/6ol779qyfuv9uT9V3vy/qs9ef/Vnrz/an/kPn/35P1Xe/L+qz15/9WevP9qT95/tSfvv9qT91/tyfuv9uT9V3vy/qs9ef/Vnrz/ak/ef7Un77/ak/df7cn7r/bk/Vd78v6rPXn/1Z68/2pP3n+1J++/2pP3X+3J+6/25P1Xe/L+qz15/9WevP9qT95/tSfvv9qT91/tyfuv9uT9V3vy/qs9ef/Vnrz/ak/ef7Un77/ak/df7cn7r/bk/Vd78v6rPXn/1Z68/2pP3n+1J++/2pP3X+3J+6/25P1Xe/L+qz15/9WevP9qT95/tSfvv9qT91/tyfuv9uT9V3vy/qs9ef/Vnrz/ak/ef7Un77/ak/df7cn7r/bk/Vd78v6rPXn/1Z68/2pP3n+1J++/2pP3X+3J+6/25P1Xe/L+qz15/9WevP9qT95/tSfvv9qT91/tyfuv9uT9V3vy/qs9ef/Vnrz/ak/ef7Un77/ak/df7cn7r/bk/Vd78v6rPXn/1Z68/2pP3n+1J++/2pP3Xx3J+6+O5P1XR/L+qyN5/9XxyH3+Hsn7r47k/VdH8v6rI3n/1ZG8/+pI3n91JO+/OpL3Xx3J+6+O5P1XR/L+qyN5/9WRvP/qSN5/dSTvvzqS918dyfuvjuT9V0fy/qsjef/Vkbz/6kjef3Uk7786kvdfHcn7r47k/VdH8v6rI3n/1ZG8/+pI3n91JO+/OpL3Xx3J+6+O5P1XR/L+qyN5/9WRvP/qSN5/dSTvvzqS918dyfuvjuT9V0fy/qsjef/Vkbz/6kjef3Uk7786kvdfHcn7r47k/VdH8v6rI3n/1ZG8/+pI3n91JO+/OpL3Xx3J+6+O5P1XR/L+qyN5/9WRvP/qSN5/dSTvvzqS918dyfuvjuT9V0fy/qsjef/Vkbz/6kjef3Uk7786kvdfHcn7r47k/VdH8v6rI3n/1ZG8/+pI3n91JO+/OpL3Xx3J+6+O5P1XR/L+qyN5/9WRvP/qSN5/dSTvvzqS918dyfuvjuT9V0fy/qsjef/Vkbz/6kjef3Uk7786k/dfncn7r87k/Vdn8v6r85H7/D2T91+dyfuvzuT9V2fy/qszef/Vmbz/6kzef3Um7786k/dfncn7r87k/Vdn8v6rM3n/1Zm8/+pM3n91Ju+/OpP3X53J+6/O5P1XZ/L+qzN5/9WZvP/qTN5/dSbvvzqT91+dyfuvzuT9V2fy/qszef/Vmbz/6kzef3Um7786k/dfncn7r87k/Vdn8v6rM3n/1Zm8/+pM3n91Ju+/OpP3X53J+6/O5P1XZ/L+qzN5/9WZvP/qTN5/dSbvvzqT91+dyfuvzuT9V2fy/qszef/Vmbz/6kzef3Um7786k/dfncn7r87k/Vdn8v6rM3n/1Zm8/+pM3n91Ju+/OpP3X53J+6/O5P1XZ/L+qzN5/9WZvP/qTN5/dSbvvzqT91+dyfuvzuT9V2fy/qszef/Vmbz/6kzef3Um7786k/dfncn7r87k/Vdn8v6rM3n/1Zm8/+pM3n91Ju+/OpP3X53J+6/O5P1XZ/L+qzN5/9WZvP/qTN5/1ZP3X/Xk/Vc9ef9VT95/1R+5z9+evP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r3ry/quevP+qJ++/6sn7r5ZH8gKsp4DcJ/BTQO4j+Ckg9xn8FJD7EH4KyH0K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Yu9TwMvlclWx9x7g5XK5qtj7CfByuVxV7D0CeLlcrip23z9eLperit3Lj5fL5api9+fj5XK5qtg993i5XK4qdh89Xi6Xq4rdG4+XS+Wqztj97ni5VK7qjN3DjpdL5arOh3HJpXJVJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrX5ydaufXN3qJ1e3+snVrd65utU7V7d65+pW71zd6v1hXHKpXFXn6lbvXN3qnatbvXN1q3eubvXO1a3eubrVO1e3eufqVu9c3eqdq1u9c3Wrd65u9c7Vrd65utU7V7d65+pW71zd6p2rW71zdat3rm71ztWt3rm61TtXt3rn6lbvXN3qnatbvXN1q3eubvXO1a3eubrVO1e3eufqVu9c3eqdq1u9c3Wrd65u9c7Vrd65utU7V7d65+pW71zd6p2rW71zdat3rm71ztWt3rm61TtXt3rn6lbvXN3qnatbvXN1q3eubvXO1a3eubrVO1e3eufqVu9c3eqdq1u9c3Wrd65u9c7Vrd65utU7V7d65+pW71zd6p2rW71zdat3rm71ztWt3rm61TtXt3rn6lbvXN3qnatbvXN1q3eubvVeqH377C+5Z//9O7/JrXPuuuQWejMvy+sf8/oYyK3Uz+yRW+jN7JFb6M3skVso73rkGpfcQnnXI7dQ3vXILZR3PXIL5V2PXCZXtT4q9TN75GZ1VW8SsjqlNwmh3c9xvv4dHWffLv7Rjb/zm1zjkhva/eDlhnY/eLmh3Q9ebmj3g5cb2v3A5cbuUcbLDe1+8HJD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" }], "outputs": { "globals": {}, "structs": { "functions": [{ "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" } }], "kind": "struct", "path": "authwit::entrypoint::function_call::FunctionCall" } } }, { "name": "nonce", "type": { "kind": "field" } }], "kind": "struct", "path": "authwit::entrypoint::app::AppPayload" } }], "kind": "struct", "path": "MultiCallEntrypoint::entrypoint_parameters" } }], "kind": "struct", "path": "MultiCallEntrypoint::entrypoint_abi" }] } }, "file_map": { "110": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr", "source": "use dep::protocol_types::{\n abis::{function_selector::FunctionSelector, private_call_stack_item::PrivateCallStackItem},\n address::AztecAddress, constants::PRIVATE_CALL_STACK_ITEM_LENGTH\n};\n\n#[oracle(callPrivateFunction)]\nfn 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; PRIVATE_CALL_STACK_ITEM_LENGTH] {}\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) -> PrivateCallStackItem {\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 PrivateCallStackItem::deserialize(fields)\n}\n" }, "115": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr", "source": "use dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, public_call_stack_item::PublicCallStackItem,\n function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_context::CallContext, read_request::ReadRequest, note_hash::NoteHash, nullifier::Nullifier,\n side_effect::SideEffect, global_variables::GlobalVariables, gas::Gas\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n messaging::l2_to_l1_message::L2ToL1Message, header::Header, address::AztecAddress,\n utils::reader::Reader,\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH\n}\n};\n\n#[oracle(enqueuePublicFunctionCall)]\nfn 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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\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)]\nfn 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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\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) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\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\npub fn parse_public_call_stack_item_from_oracle(fields: [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH]) -> PublicCallStackItem {\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: 0,\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0,\n end_side_effect_counter: 0,\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0\n },\n is_execution_request: true\n };\n reader.finish();\n\n item\n}\n" }, "136": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{GAS_LENGTH, FIXED_DA_GAS}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered, utils::reader::Reader,\n abis::gas_fees::GasFees\n};\nuse dep::std::ops::{Add, Sub};\n\nstruct Gas {\n da_gas: u32,\n l2_gas: u32,\n}\n\nimpl Gas {\n pub fn new(da_gas: u32, l2_gas: u32) -> Self {\n Self { da_gas, l2_gas }\n }\n\n pub fn tx_overhead() -> Self {\n Self { da_gas: FIXED_DA_GAS, l2_gas: 0 }\n }\n\n pub fn compute_fee(self, fees: GasFees) -> Field {\n (self.da_gas as Field) * fees.fee_per_da_gas + (self.l2_gas as Field) * fees.fee_per_l2_gas\n }\n\n pub fn is_empty(self) -> bool {\n (self.da_gas == 0) & (self.l2_gas == 0)\n }\n\n pub fn within(self, limits: Gas) -> bool {\n (self.da_gas <= limits.da_gas) & (self.l2_gas <= limits.l2_gas)\n }\n}\n\nimpl Add for Gas {\n fn add(self, other: Gas) -> Self {\n Gas::new(self.da_gas + other.da_gas, self.l2_gas + other.l2_gas)\n }\n}\n\nimpl Sub for Gas {\n fn sub(self, other: Gas) -> Self {\n Gas::new(self.da_gas - other.da_gas, self.l2_gas - other.l2_gas)\n }\n}\n\nimpl Serialize<GAS_LENGTH> for Gas {\n fn serialize(self) -> [Field; GAS_LENGTH] {\n [self.da_gas as Field, self.l2_gas as Field]\n }\n}\n\nimpl Deserialize<GAS_LENGTH> for Gas {\n fn deserialize(serialized: [Field; GAS_LENGTH]) -> Gas {\n Gas::new(serialized[0] as u32, serialized[1] as u32)\n }\n}\n\nimpl Eq for Gas {\n fn eq(self, other : Gas) -> bool {\n (self.da_gas == other.da_gas) & (self.l2_gas == other.l2_gas)\n }\n}\n\nimpl Empty for Gas {\n fn empty() -> Self {\n Gas::new(0, 0)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = Gas::empty();\n let serialized = item.serialize();\n let deserialized = Gas::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n" }, "138": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/note_hash.nr", "source": "use crate::{\n abis::read_request::ScopedReadRequest, address::AztecAddress,\n abis::side_effect::{Ordered, OrderedValue, Readable},\n constants::{NOTE_HASH_LENGTH, SCOPED_NOTE_HASH_LENGTH}, traits::{Empty, Serialize, Deserialize},\n utils::{arrays::array_concat, reader::Reader}\n};\nuse dep::std::cmp::Eq;\n\nstruct NoteHash {\n value: Field,\n counter: u32,\n}\n\nimpl Eq for NoteHash {\n fn eq(self, other: NoteHash) -> bool {\n (self.value == other.value)\n & (self.counter == other.counter) \n }\n}\n\nimpl Empty for NoteHash {\n fn empty() -> Self {\n NoteHash {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Serialize<NOTE_HASH_LENGTH> for NoteHash {\n fn serialize(self) -> [Field; NOTE_HASH_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<NOTE_HASH_LENGTH> for NoteHash {\n fn deserialize(values: [Field; NOTE_HASH_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nimpl NoteHash {\n pub fn scope(self, nullifier_counter: u32, contract_address: AztecAddress) -> ScopedNoteHash {\n ScopedNoteHash { note_hash: self, nullifier_counter, contract_address }\n }\n}\n\nstruct ScopedNoteHash {\n note_hash: NoteHash,\n nullifier_counter: u32,\n contract_address: AztecAddress,\n}\n\nimpl Ordered for ScopedNoteHash {\n fn counter(self) -> u32 {\n self.note_hash.counter\n }\n}\n\nimpl OrderedValue<Field> for ScopedNoteHash {\n fn value(self) -> Field {\n self.note_hash.value\n }\n fn counter(self) -> u32 {\n self.note_hash.counter\n }\n}\n\nimpl Eq for ScopedNoteHash {\n fn eq(self, other: ScopedNoteHash) -> bool {\n (self.note_hash == other.note_hash)\n & (self.nullifier_counter == other.nullifier_counter)\n & (self.contract_address == other.contract_address)\n }\n}\n\nimpl Empty for ScopedNoteHash {\n fn empty() -> Self {\n ScopedNoteHash {\n note_hash: NoteHash::empty(),\n nullifier_counter: 0,\n contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl Serialize<SCOPED_NOTE_HASH_LENGTH> for ScopedNoteHash {\n fn serialize(self) -> [Field; SCOPED_NOTE_HASH_LENGTH] {\n array_concat(self.note_hash.serialize(), [self.nullifier_counter as Field, self.contract_address.to_field()])\n }\n}\n\nimpl Deserialize<SCOPED_NOTE_HASH_LENGTH> for ScopedNoteHash {\n fn deserialize(values: [Field; SCOPED_NOTE_HASH_LENGTH]) -> Self {\n let mut reader = Reader::new(values);\n let res = Self {\n note_hash: reader.read_struct(NoteHash::deserialize),\n nullifier_counter: reader.read_u32(),\n contract_address: reader.read_struct(AztecAddress::deserialize),\n };\n reader.finish();\n res\n }\n}\n\nimpl Readable for ScopedNoteHash {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n assert_eq(self.note_hash.value, read_request.value(), \"Value of the note hash does not match read request\");\n assert_eq(self.contract_address, read_request.contract_address, \"Contract address of the note hash does not match read request\");\n assert(\n read_request.counter() > self.note_hash.counter, \"Read request counter must be greater than the counter of the note hash\"\n );\n assert(\n (self.nullifier_counter == 0) | (read_request.counter() < self.nullifier_counter), \"Read request counter must be less than the nullifier counter of the note hash\"\n );\n }\n}\n\nimpl ScopedNoteHash {\n pub fn expose_to_public(self) -> NoteHash {\n // Hide the actual counter when exposing it to the public kernel.\n NoteHash { value: self.note_hash.value, counter: 0 }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = NoteHash::empty();\n let serialized = item.serialize();\n let deserialized = NoteHash::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn serialization_of_empty_scoped() {\n let item = ScopedNoteHash::empty();\n let serialized = item.serialize();\n let deserialized = ScopedNoteHash::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "139": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_fees.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::GAS_FEES_LENGTH, hash::pedersen_hash, traits::{Deserialize, Hash, Serialize, Empty},\n abis::side_effect::Ordered, utils::reader::Reader\n};\n\nstruct GasFees {\n fee_per_da_gas: Field,\n fee_per_l2_gas: Field,\n}\n\nimpl GasFees {\n pub fn new(fee_per_da_gas: Field, fee_per_l2_gas: Field) -> Self {\n Self { fee_per_da_gas, fee_per_l2_gas }\n }\n\n pub fn default() -> Self {\n GasFees::new(1, 1)\n }\n\n pub fn is_empty(self) -> bool {\n (self.fee_per_da_gas == 0) & (self.fee_per_l2_gas == 0)\n }\n}\n\nimpl Serialize<GAS_FEES_LENGTH> for GasFees {\n fn serialize(self) -> [Field; GAS_FEES_LENGTH] {\n [self.fee_per_da_gas, self.fee_per_l2_gas]\n }\n}\n\nimpl Deserialize<GAS_FEES_LENGTH> for GasFees {\n fn deserialize(serialized: [Field; GAS_FEES_LENGTH]) -> GasFees {\n GasFees::new(serialized[0], serialized[1])\n }\n}\n\nimpl Eq for GasFees {\n fn eq(self, other : GasFees) -> bool {\n (self.fee_per_da_gas == other.fee_per_da_gas) & (self.fee_per_l2_gas == other.fee_per_l2_gas)\n }\n}\n\nimpl Empty for GasFees {\n fn empty() -> Self {\n GasFees::new(0, 0)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = GasFees::empty();\n let serialized = item.serialize();\n let deserialized = GasFees::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "140": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr", "source": "use crate::abis::{function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs};\nuse crate::address::AztecAddress;\nuse crate::constants::GENERATOR_INDEX__CALL_STACK_ITEM;\nuse crate::traits::Hash;\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs = PublicCircuitPublicInputs::empty();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs\n };\n call_stack_item\n }\n}\n\nmod tests {\n use crate::{\n abis::{\n function_data::FunctionData, function_selector::FunctionSelector, note_hash::NoteHash,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem, side_effect::SideEffect\n },\n address::AztecAddress, constants::GENERATOR_INDEX__CALL_STACK_ITEM, traits::Hash\n };\n\n #[test]\n fn compute_call_stack_item_request_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item request hash\" test\n let test_data_call_stack_item_request_hash = 0x1177a69fbc37f0ebdf290025414ff72504497840f174896bd427d0f30ec21c55;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash);\n }\n\n #[test]\n fn compute_call_stack_item_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item hash\" test\n let test_data_call_stack_item_hash = 0x0f7624c0d5ea65fcec318c4d34cb3fcbf9c67435aebbf1548b3c90ef641424f8;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash);\n }\n}\n" }, "141": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_circuit_public_inputs.nr", "source": "use crate::{\n abis::{\n call_context::CallContext, max_block_number::MaxBlockNumber, gas_settings::GasSettings,\n nullifier_key_validation_request::NullifierKeyValidationRequest, note_hash::NoteHash,\n nullifier::Nullifier, read_request::ReadRequest, side_effect::SideEffect\n},\n constants::{\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS,\n MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n header::Header, hash::pedersen_hash, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader,\n transaction::tx_context::TxContext\n};\n\nstruct PrivateCircuitPublicInputs {\n call_context: CallContext,\n\n args_hash: Field,\n returns_hash: Field,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: [ReadRequest; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest; MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n\n new_note_hashes: [NoteHash; MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier; MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [Field; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n public_teardown_function_hash: Field,\n new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n start_side_effect_counter : u32,\n end_side_effect_counter : u32,\n encrypted_logs_hashes: [SideEffect; MAX_ENCRYPTED_LOGS_PER_CALL],\n unencrypted_logs_hashes: [SideEffect; MAX_UNENCRYPTED_LOGS_PER_CALL],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\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: The chain_id and version here are not redundant to the values in self.historical_header.global_variables because\n // they can be different in case of a protocol upgrade. In such a situation we could be using header from a block\n // before the upgrade took place but be using the updated protocol to execute and prove the transaction.\n tx_context: TxContext,\n}\n\nimpl Eq for PrivateCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.call_context.eq(other.call_context) &\n self.args_hash.eq(other.args_hash) &\n (self.returns_hash == other.returns_hash) &\n (self.min_revertible_side_effect_counter == other.min_revertible_side_effect_counter) &\n (self.is_fee_payer == other.is_fee_payer) &\n (self.max_block_number == other.max_block_number) &\n (self.note_hash_read_requests == other.note_hash_read_requests) &\n (self.nullifier_read_requests == other.nullifier_read_requests) &\n (self.nullifier_key_validation_requests == other.nullifier_key_validation_requests) &\n (self.new_note_hashes == other.new_note_hashes) &\n (self.new_nullifiers == other.new_nullifiers) &\n (self.private_call_stack_hashes == other.private_call_stack_hashes) &\n (self.public_call_stack_hashes == other.public_call_stack_hashes) &\n (self.new_l2_to_l1_msgs == other.new_l2_to_l1_msgs) &\n (self.start_side_effect_counter == other.start_side_effect_counter) &\n (self.end_side_effect_counter == other.end_side_effect_counter) &\n (self.encrypted_logs_hashes == other.encrypted_logs_hashes) &\n (self.unencrypted_logs_hashes == other.unencrypted_logs_hashes) &\n (self.encrypted_log_preimages_length == other.encrypted_log_preimages_length) &\n (self.unencrypted_log_preimages_length == other.unencrypted_log_preimages_length) &\n self.historical_header.eq(other.historical_header) &\n self.tx_context.eq(other.tx_context)\n }\n}\n\nimpl Serialize<PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PrivateCircuitPublicInputs {\n fn serialize(self) -> [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new();\n fields.extend_from_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push(self.returns_hash);\n\n fields.push(self.min_revertible_side_effect_counter as Field);\n fields.push(if self.is_fee_payer { 1 } else { 0 } as Field);\n\n fields.extend_from_array(self.max_block_number.serialize());\n\n for i in 0..self.note_hash_read_requests.len() {\n fields.extend_from_array(self.note_hash_read_requests[i].serialize());\n }\n for i in 0..self.nullifier_read_requests.len() {\n fields.extend_from_array(self.nullifier_read_requests[i].serialize());\n }\n for i in 0..self.nullifier_key_validation_requests.len() {\n fields.extend_from_array(self.nullifier_key_validation_requests[i].serialize());\n }\n for i in 0..self.new_note_hashes.len() {\n fields.extend_from_array(self.new_note_hashes[i].serialize());\n }\n for i in 0..self.new_nullifiers.len() {\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n fields.extend_from_array(self.private_call_stack_hashes);\n fields.extend_from_array(self.public_call_stack_hashes);\n fields.push(self.public_teardown_function_hash);\n for i in 0..self.new_l2_to_l1_msgs.len() {\n fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize());\n }\n fields.push(self.start_side_effect_counter as Field);\n fields.push(self.end_side_effect_counter as Field);\n for i in 0..self.encrypted_logs_hashes.len() {\n fields.extend_from_array(self.encrypted_logs_hashes[i].serialize());\n }\n for i in 0..self.unencrypted_logs_hashes.len() {\n fields.extend_from_array(self.unencrypted_logs_hashes[i].serialize());\n }\n fields.push(self.encrypted_log_preimages_length);\n fields.push(self.unencrypted_log_preimages_length);\n fields.extend_from_array(self.historical_header.serialize());\n fields.extend_from_array(self.tx_context.serialize());\n\n assert_eq(fields.len(), PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PrivateCircuitPublicInputs {\n fn deserialize(serialized: [Field; PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = Self {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: reader.read(),\n min_revertible_side_effect_counter: reader.read() as u32,\n is_fee_payer: reader.read() == 1,\n max_block_number: reader.read_struct(MaxBlockNumber::deserialize),\n note_hash_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]),\n nullifier_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL]),\n nullifier_key_validation_requests: reader.read_struct_array(NullifierKeyValidationRequest::deserialize, [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL]),\n new_note_hashes: reader.read_struct_array(NoteHash::deserialize, [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]),\n new_nullifiers: reader.read_struct_array(Nullifier::deserialize, [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n private_call_stack_hashes: reader.read_array([0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n public_teardown_function_hash: reader.read(),\n new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n start_side_effect_counter: reader.read() as u32,\n end_side_effect_counter: reader.read() as u32,\n encrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_ENCRYPTED_LOGS_PER_CALL]),\n unencrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL]),\n encrypted_log_preimages_length: reader.read(),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n tx_context: reader.read_struct(TxContext::deserialize),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PrivateCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PRIVATE_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl Empty for PrivateCircuitPublicInputs {\n fn empty() -> Self {\n PrivateCircuitPublicInputs {\n call_context: CallContext::empty(),\n args_hash: 0,\n returns_hash: 0,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_key_validation_requests: [NullifierKeyValidationRequest::empty(); MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n private_call_stack_hashes: [0; MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter : 0 as u32,\n end_side_effect_counter : 0 as u32,\n encrypted_logs_hashes: [SideEffect::empty(); MAX_ENCRYPTED_LOGS_PER_CALL],\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n tx_context: TxContext::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi = PrivateCircuitPublicInputs::empty();\n let serialized = pcpi.serialize();\n let deserialized = PrivateCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let inputs = PrivateCircuitPublicInputs::empty();\n let hash = inputs.hash();\n // Value from private_circuit_public_inputs.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x2517b9a84487bde68e18647e59530c6ffe4a7a88c5c556f013d09fd22b84ba35;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "143": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/global_variables.nr", "source": "use dep::std::cmp::Eq;\nuse crate::{\n address::{AztecAddress, EthAddress}, abis::gas_fees::GasFees,\n constants::{GENERATOR_INDEX__GLOBAL_VARIABLES, GLOBAL_VARIABLES_LENGTH},\n traits::{Deserialize, Empty, Hash, Serialize}, utils::reader::Reader\n};\n\n// docs:start:global-variables\nstruct GlobalVariables {\n chain_id : Field,\n version : Field,\n block_number : Field,\n timestamp : u64,\n coinbase : EthAddress,\n fee_recipient : AztecAddress,\n gas_fees : GasFees\n}\n// docs:end:global-variables\n\nimpl GlobalVariables {\n fn is_empty(self) -> bool {\n (self.chain_id == 0)\n & (self.version == 0)\n & (self.block_number == 0)\n & (self.timestamp == 0)\n & (self.coinbase.is_zero())\n & (self.fee_recipient.is_zero())\n & (self.gas_fees.is_empty())\n }\n}\n\nimpl Serialize<GLOBAL_VARIABLES_LENGTH> for GlobalVariables {\n fn serialize(self) -> [Field; GLOBAL_VARIABLES_LENGTH] {\n let mut serialized: BoundedVec<Field, GLOBAL_VARIABLES_LENGTH> = BoundedVec::new();\n\n serialized.push(self.chain_id);\n serialized.push(self.version);\n serialized.push(self.block_number);\n serialized.push(self.timestamp as Field);\n serialized.push(self.coinbase.to_field());\n serialized.push(self.fee_recipient.to_field());\n serialized.extend_from_array(self.gas_fees.serialize());\n\n serialized.storage\n }\n}\n\nimpl Deserialize<GLOBAL_VARIABLES_LENGTH> for GlobalVariables {\n fn deserialize(serialized: [Field; GLOBAL_VARIABLES_LENGTH]) -> GlobalVariables {\n let mut reader = Reader::new(serialized);\n GlobalVariables {\n chain_id: reader.read(),\n version: reader.read(),\n block_number: reader.read(),\n timestamp: reader.read() as u64,\n coinbase: EthAddress::from_field(reader.read()),\n fee_recipient: AztecAddress::from_field(reader.read()),\n gas_fees: reader.read_struct(GasFees::deserialize)\n }\n }\n}\n\nimpl Eq for GlobalVariables {\n fn eq(self, other : GlobalVariables) -> bool {\n (self.chain_id == other.chain_id) &\n (self.version == other.version) &\n (self.block_number == other.block_number) &\n (self.timestamp == other.timestamp) &\n (self.coinbase == other.coinbase) &\n (self.fee_recipient == other.fee_recipient) &\n (self.gas_fees == other.gas_fees) \n }\n}\n\nimpl Empty for GlobalVariables {\n fn empty() -> Self {\n Self {\n chain_id: 0,\n version: 0,\n block_number: 0,\n timestamp: 0,\n coinbase: EthAddress::empty(),\n fee_recipient: AztecAddress::empty(),\n gas_fees: GasFees::empty()\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let vars = GlobalVariables::empty();\n let _serialized = vars.serialize();\n let _deserialized = GlobalVariables::deserialize(_serialized);\n}\n" }, "144": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/read_request.nr", "source": "use crate::{\n traits::{Empty, Serialize, Deserialize}, address::AztecAddress,\n constants::{READ_REQUEST_LENGTH, SCOPED_READ_REQUEST_LEN},\n utils::{arrays::array_concat, reader::Reader}\n};\nuse dep::std::cmp::Eq;\n\nstruct ReadRequest {\n value: Field,\n counter: u32,\n}\n\nimpl Eq for ReadRequest {\n fn eq(self, read_request: ReadRequest) -> bool {\n (self.value == read_request.value)\n & (self.counter == read_request.counter)\n }\n}\n\nimpl Empty for ReadRequest {\n fn empty() -> Self {\n ReadRequest {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Serialize<READ_REQUEST_LENGTH> for ReadRequest {\n fn serialize(self) -> [Field; READ_REQUEST_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<READ_REQUEST_LENGTH> for ReadRequest {\n fn deserialize(values: [Field; READ_REQUEST_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\nimpl ReadRequest {\n pub fn scope(self, contract_address: AztecAddress) -> ScopedReadRequest {\n ScopedReadRequest { read_request: self, contract_address }\n }\n}\n\nstruct ScopedReadRequest {\n read_request: ReadRequest,\n contract_address: AztecAddress,\n}\n\nimpl Eq for ScopedReadRequest {\n fn eq(self, other: ScopedReadRequest) -> bool {\n (self.read_request == other.read_request)\n & (self.contract_address.eq(other.contract_address))\n }\n}\n\nimpl Empty for ScopedReadRequest {\n fn empty() -> Self {\n ScopedReadRequest {\n read_request: ReadRequest::empty(),\n contract_address: AztecAddress::empty(),\n }\n }\n}\n\nimpl Serialize<SCOPED_READ_REQUEST_LEN> for ScopedReadRequest {\n fn serialize(self) -> [Field; SCOPED_READ_REQUEST_LEN] {\n array_concat(self.read_request.serialize(), [self.contract_address.to_field()])\n }\n}\n\nimpl Deserialize<SCOPED_READ_REQUEST_LEN> for ScopedReadRequest {\n fn deserialize(values: [Field; SCOPED_READ_REQUEST_LEN]) -> Self {\n let mut reader = Reader::new(values);\n let res = Self {\n read_request: reader.read_struct(ReadRequest::deserialize),\n contract_address: reader.read_struct(AztecAddress::deserialize),\n };\n reader.finish();\n res\n }\n}\n\nimpl ScopedReadRequest {\n pub fn value(self) -> Field {\n self.read_request.value\n }\n pub fn counter(self) -> u32 {\n self.read_request.counter\n }\n}\n\n#[test]\nfn serialization_of_empty_read() {\n let item = ReadRequest::empty();\n let serialized = item.serialize();\n let deserialized = ReadRequest::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn serialization_of_empty_scoped() {\n let item = ScopedReadRequest::empty();\n let serialized = item.serialize();\n let deserialized = ScopedReadRequest::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "148": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier.nr", "source": "use crate::{\n abis::{side_effect::{Ordered, OrderedValue, Readable}, read_request::ScopedReadRequest},\n address::AztecAddress, constants::{NULLIFIER_LENGTH, SCOPED_NULLIFIER_LENGTH}, hash::silo_nullifier,\n traits::{Empty, Hash, Serialize, Deserialize}, utils::{arrays::array_concat, reader::Reader}\n};\n\nstruct Nullifier {\n value: Field,\n counter: u32,\n note_hash: Field,\n}\n\nimpl OrderedValue<Field> for Nullifier {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for Nullifier {\n fn eq(self, other: Nullifier) -> bool {\n (self.value == other.value)\n & (self.counter == other.counter)\n & (self.note_hash == other.note_hash) \n }\n}\n\nimpl Empty for Nullifier {\n fn empty() -> Self {\n Nullifier {\n value: 0,\n counter: 0,\n note_hash: 0,\n }\n }\n}\n\nimpl Serialize<NULLIFIER_LENGTH> for Nullifier {\n fn serialize(self) -> [Field; NULLIFIER_LENGTH] {\n [self.value, self.counter as Field, self.note_hash]\n }\n}\n\nimpl Deserialize<NULLIFIER_LENGTH> for Nullifier {\n fn deserialize(values: [Field; NULLIFIER_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n note_hash: values[2],\n }\n }\n}\n\nimpl Readable for Nullifier {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n // Public kernels output Nullifier instead of ScopedNullifier.\n // The nullifier value has been siloed.\n let siloed_request_value = silo_nullifier(read_request.contract_address, read_request.value());\n assert_eq(self.value, siloed_request_value, \"Value of the nullifier does not match read request\");\n assert(\n read_request.counter() > self.counter, \"Read request counter must be greater than the counter of the nullifier\"\n );\n }\n}\n\nimpl Nullifier {\n pub fn scope(self, contract_address: AztecAddress) -> ScopedNullifier {\n ScopedNullifier { nullifier: self, contract_address }\n }\n}\n\nstruct ScopedNullifier {\n nullifier: Nullifier,\n contract_address: AztecAddress,\n}\n\nimpl Ordered for ScopedNullifier {\n fn counter(self) -> u32 {\n self.nullifier.counter\n }\n}\n\nimpl OrderedValue<Field> for ScopedNullifier {\n fn value(self) -> Field {\n self.nullifier.value\n }\n fn counter(self) -> u32 {\n self.nullifier.counter\n }\n}\n\nimpl Eq for ScopedNullifier {\n fn eq(self, other: ScopedNullifier) -> bool {\n (self.nullifier == other.nullifier)\n & (self.contract_address == other.contract_address) \n }\n}\n\nimpl Empty for ScopedNullifier {\n fn empty() -> Self {\n ScopedNullifier {\n nullifier: Nullifier::empty(),\n contract_address: AztecAddress::empty(),\n }\n }\n}\n\nimpl Serialize<SCOPED_NULLIFIER_LENGTH> for ScopedNullifier {\n fn serialize(self) -> [Field; SCOPED_NULLIFIER_LENGTH] {\n array_concat(self.nullifier.serialize(), [self.contract_address.to_field()])\n }\n}\n\nimpl Deserialize<SCOPED_NULLIFIER_LENGTH> for ScopedNullifier {\n fn deserialize(values: [Field; SCOPED_NULLIFIER_LENGTH]) -> Self {\n let mut reader = Reader::new(values);\n let res = Self {\n nullifier: reader.read_struct(Nullifier::deserialize),\n contract_address: reader.read_struct(AztecAddress::deserialize),\n };\n reader.finish();\n res\n }\n}\n\nimpl Readable for ScopedNullifier {\n fn assert_match_read_request(self, read_request: ScopedReadRequest) {\n assert_eq(self.nullifier.value, read_request.value(), \"Value of the nullifier does not match read request\");\n assert_eq(self.contract_address, read_request.contract_address, \"Contract address of the nullifier does not match read request\");\n assert(\n read_request.counter() > self.nullifier.counter, \"Read request counter must be greater than the counter of the nullifier\"\n );\n }\n}\n\nimpl ScopedNullifier {\n pub fn nullified_note_hash(self) -> Field {\n self.nullifier.note_hash\n }\n\n pub fn expose_to_public(self) -> Nullifier {\n // Hide the actual counter and note hash when exposing it to the public kernel.\n Nullifier { value: self.nullifier.value, counter: 0, note_hash: 0 }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = Nullifier::empty();\n let serialized = item.serialize();\n let deserialized = Nullifier::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn serialization_of_empty_scoped() {\n let item = ScopedNullifier::empty();\n let serialized = item.serialize();\n let deserialized = ScopedNullifier::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "157": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/nullifier_key_validation_request.nr", "source": "use dep::std::cmp::Eq;\nuse crate::{\n address::AztecAddress,\n constants::{SCOPED_NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH, NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH},\n traits::{Empty, Serialize, Deserialize}, grumpkin_point::GrumpkinPoint,\n utils::{arrays::array_concat, reader::Reader}\n};\n\nstruct NullifierKeyValidationRequest {\n master_nullifier_public_key: GrumpkinPoint,\n app_nullifier_secret_key: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for NullifierKeyValidationRequest {\n fn eq(self, request: NullifierKeyValidationRequest) -> bool {\n (request.master_nullifier_public_key.eq(self.master_nullifier_public_key))\n & (request.app_nullifier_secret_key.eq(self.app_nullifier_secret_key))\n }\n}\n\nimpl Empty for NullifierKeyValidationRequest {\n fn empty() -> Self {\n NullifierKeyValidationRequest {\n master_nullifier_public_key: GrumpkinPoint::zero(),\n app_nullifier_secret_key: 0,\n }\n }\n}\n\nimpl Serialize<NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for NullifierKeyValidationRequest {\n fn serialize(self) -> [Field; NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.master_nullifier_public_key.x,\n self.master_nullifier_public_key.y,\n self.app_nullifier_secret_key,\n ]\n }\n}\n\nimpl Deserialize<NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for NullifierKeyValidationRequest {\n fn deserialize(fields: [Field; NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n master_nullifier_public_key: GrumpkinPoint::new(fields[0], fields[1]),\n app_nullifier_secret_key: fields[2],\n }\n }\n}\n\nimpl NullifierKeyValidationRequest {\n pub fn scope(self, contract_address: AztecAddress) -> ScopedNullifierKeyValidationRequest {\n ScopedNullifierKeyValidationRequest { request: self, contract_address }\n }\n}\n\nstruct ScopedNullifierKeyValidationRequest {\n request: NullifierKeyValidationRequest,\n contract_address: AztecAddress,\n}\n\nimpl Eq for ScopedNullifierKeyValidationRequest {\n fn eq(self, other: ScopedNullifierKeyValidationRequest) -> bool {\n (self.request.eq(other.request))\n & (self.contract_address.eq(other.contract_address))\n }\n}\n\nimpl Empty for ScopedNullifierKeyValidationRequest {\n fn empty() -> Self {\n ScopedNullifierKeyValidationRequest {\n request: NullifierKeyValidationRequest::empty(),\n contract_address: AztecAddress::zero(),\n }\n }\n}\n\nimpl Serialize<SCOPED_NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for ScopedNullifierKeyValidationRequest {\n fn serialize(self) -> [Field; SCOPED_NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH] {\n array_concat(self.request.serialize(), [self.contract_address.to_field()])\n }\n}\n\nimpl Deserialize<SCOPED_NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH> for ScopedNullifierKeyValidationRequest {\n fn deserialize(fields: [Field; SCOPED_NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n let mut reader = Reader::new(fields);\n let res = Self {\n request: reader.read_struct(NullifierKeyValidationRequest::deserialize),\n contract_address: reader.read_struct(AztecAddress::deserialize),\n };\n reader.finish();\n res\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = ScopedNullifierKeyValidationRequest::empty();\n let serialized = item.serialize();\n let deserialized = ScopedNullifierKeyValidationRequest::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n" }, "158": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr", "source": "use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n" }, "163": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/gas_settings.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress}, abis::gas::Gas,\n abis::gas_fees::GasFees,\n constants::{\n GAS_SETTINGS_LENGTH, DEFAULT_GAS_LIMIT, DEFAULT_TEARDOWN_GAS_LIMIT, DEFAULT_MAX_FEE_PER_GAS,\n DEFAULT_INCLUSION_FEE\n},\n hash::pedersen_hash, traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered,\n utils::reader::Reader\n};\n\nstruct GasSettings {\n gas_limits: Gas,\n teardown_gas_limits: Gas,\n max_fees_per_gas: GasFees,\n inclusion_fee: Field,\n}\n\nimpl GasSettings {\n pub fn new(\n gas_limits: Gas,\n teardown_gas_limits: Gas,\n max_fees_per_gas: GasFees,\n inclusion_fee: Field\n ) -> Self {\n Self { gas_limits, teardown_gas_limits, max_fees_per_gas, inclusion_fee }\n }\n\n pub fn default() -> Self {\n GasSettings::new(\n Gas::new(DEFAULT_GAS_LIMIT, DEFAULT_GAS_LIMIT),\n Gas::new(DEFAULT_TEARDOWN_GAS_LIMIT, DEFAULT_TEARDOWN_GAS_LIMIT),\n GasFees::new(DEFAULT_MAX_FEE_PER_GAS, DEFAULT_MAX_FEE_PER_GAS),\n DEFAULT_INCLUSION_FEE\n )\n }\n}\n\nimpl Eq for GasSettings {\n fn eq(self, other: Self) -> bool {\n (self.gas_limits == other.gas_limits) & (self.teardown_gas_limits == other.teardown_gas_limits) & (self.max_fees_per_gas == other.max_fees_per_gas) & (self.inclusion_fee == other.inclusion_fee)\n }\n}\n\nimpl Empty for GasSettings {\n fn empty() -> Self {\n GasSettings::new(\n Gas::empty(), Gas::empty(), GasFees::empty(), 0\n )\n }\n}\n\nimpl Serialize<GAS_SETTINGS_LENGTH> for GasSettings {\n fn serialize(self) -> [Field; GAS_SETTINGS_LENGTH] {\n let mut serialized: BoundedVec<Field, GAS_SETTINGS_LENGTH> = BoundedVec::new();\n\n serialized.extend_from_array(self.gas_limits.serialize());\n serialized.extend_from_array(self.teardown_gas_limits.serialize());\n serialized.extend_from_array(self.max_fees_per_gas.serialize());\n serialized.push(self.inclusion_fee);\n \n serialized.storage\n }\n}\n\nimpl Deserialize<GAS_SETTINGS_LENGTH> for GasSettings {\n fn deserialize(serialized: [Field; GAS_SETTINGS_LENGTH]) -> GasSettings {\n let mut reader = Reader::new(serialized);\n GasSettings::new(reader.read_struct(Gas::deserialize), reader.read_struct(Gas::deserialize), reader.read_struct(GasFees::deserialize), reader.read())\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = GasSettings::empty();\n let serialized = item.serialize();\n let deserialized = GasSettings::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "164": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/side_effect.nr", "source": "use crate::{\n abis::read_request::ScopedReadRequest, address::AztecAddress,\n constants::{GENERATOR_INDEX__SIDE_EFFECT, SIDE_EFFECT_LENGTH},\n traits::{Empty, Hash, Serialize, Deserialize}\n};\nuse dep::std::cmp::Eq;\n\ntrait Ordered {\n fn counter(self) -> u32;\n}\n\ntrait OrderedValue<T> where T: Eq {\n fn value(self) -> T;\n fn counter(self) -> u32;\n}\n\ntrait Readable {\n fn assert_match_read_request(self, read_request: ScopedReadRequest);\n}\n\nstruct SideEffect {\n value: Field,\n counter: u32,\n}\n\nimpl Ordered for SideEffect {\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl OrderedValue<Field> for SideEffect {\n fn value(self) -> Field {\n self.value\n }\n fn counter(self) -> u32 {\n self.counter\n }\n}\n\nimpl Eq for SideEffect {\n fn eq(self, side_effect: SideEffect) -> bool {\n (self.value == side_effect.value)\n & (self.counter == side_effect.counter)\n }\n}\n\nimpl Empty for SideEffect {\n fn empty() -> Self {\n SideEffect {\n value: 0,\n counter: 0,\n }\n }\n}\n\nimpl Hash for SideEffect {\n fn hash(self) -> Field {\n dep::std::hash::pedersen_hash_with_separator(\n self.serialize() , GENERATOR_INDEX__SIDE_EFFECT)\n }\n}\n\nimpl Serialize<SIDE_EFFECT_LENGTH> for SideEffect {\n fn serialize(self) -> [Field; SIDE_EFFECT_LENGTH] {\n [self.value, self.counter as Field]\n }\n}\n\nimpl Deserialize<SIDE_EFFECT_LENGTH> for SideEffect {\n fn deserialize(values: [Field; SIDE_EFFECT_LENGTH]) -> Self {\n Self {\n value: values[0],\n counter: values[1] as u32,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = SideEffect::empty();\n let serialized = item.serialize();\n let deserialized = SideEffect::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "172": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/private_call_stack_item.nr", "source": "use crate::{\n abis::{function_data::FunctionData, private_circuit_public_inputs::PrivateCircuitPublicInputs},\n address::AztecAddress,\n constants::{GENERATOR_INDEX__CALL_STACK_ITEM, PRIVATE_CALL_STACK_ITEM_LENGTH}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader\n};\n\nstruct PrivateCallStackItem {\n // This is the _actual_ contract address relating to where this function's code resides in the\n // contract tree. Regardless of whether this is a call or delegatecall, this\n // `contract_address` _does not change_. Amongst other things, it's used as a lookup for\n // getting the correct code from the tree. There is a separate `storage_contract_address`\n // within a CallStackItem which varies depending on whether this is a call or delegatecall.\n contract_address: AztecAddress,\n function_data: FunctionData,\n public_inputs: PrivateCircuitPublicInputs,\n}\n\nimpl Eq for PrivateCallStackItem {\n fn eq(self, other: Self) -> bool {\n self.contract_address.eq(other.contract_address) &\n self.function_data.eq(other.function_data) &\n self.public_inputs.eq(other.public_inputs)\n }\n}\n\nimpl Serialize<PRIVATE_CALL_STACK_ITEM_LENGTH> for PrivateCallStackItem {\n fn serialize(self) -> [Field; PRIVATE_CALL_STACK_ITEM_LENGTH] {\n let mut fields: BoundedVec<Field, PRIVATE_CALL_STACK_ITEM_LENGTH> = BoundedVec::new();\n\n fields.push(self.contract_address.to_field());\n fields.extend_from_array(self.function_data.serialize());\n fields.extend_from_array(self.public_inputs.serialize());\n\n assert_eq(fields.len(), PRIVATE_CALL_STACK_ITEM_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<PRIVATE_CALL_STACK_ITEM_LENGTH> for PrivateCallStackItem {\n fn deserialize(serialized: [Field; PRIVATE_CALL_STACK_ITEM_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n\n let item = Self {\n contract_address: reader.read_struct(AztecAddress::deserialize),\n function_data: reader.read_struct(FunctionData::deserialize),\n public_inputs: reader.read_struct(PrivateCircuitPublicInputs::deserialize),\n };\n\n reader.finish();\n item\n }\n}\n\nimpl Hash for PrivateCallStackItem {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl Empty for PrivateCallStackItem {\n fn empty() -> Self {\n PrivateCallStackItem {\n contract_address: AztecAddress::empty(),\n function_data: FunctionData::empty(),\n public_inputs: PrivateCircuitPublicInputs::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = PrivateCallStackItem::empty();\n let serialized = item.serialize();\n let deserialized = PrivateCallStackItem::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let mut item = PrivateCallStackItem::empty();\n item.function_data.is_private = true;\n let hash = item.hash();\n\n // Value from private_call_stack_item.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x138c6ad441864ce43487e99d5e1e122c38b4b55d893edec04a32f5aacecc856c;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "177": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/append_only_tree_snapshot.nr", "source": "use dep::std::cmp::Eq;\n\nstruct AppendOnlyTreeSnapshot {\n root : Field,\n // TODO(Alvaro) change this to a u64\n next_available_leaf_index : u32\n}\n\nglobal APPEND_ONLY_TREE_SNAPSHOT_LENGTH: u64 = 2;\n\nimpl AppendOnlyTreeSnapshot {\n pub fn serialize(self) -> [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH] {\n [self.root, self.next_available_leaf_index as Field]\n }\n\n pub fn deserialize(serialized: [Field; APPEND_ONLY_TREE_SNAPSHOT_LENGTH]) -> AppendOnlyTreeSnapshot {\n AppendOnlyTreeSnapshot { root: serialized[0], next_available_leaf_index: serialized[1] as u32 }\n }\n\n pub fn zero() -> Self {\n Self { root: 0, next_available_leaf_index: 0 }\n }\n}\n\nimpl Eq for AppendOnlyTreeSnapshot {\n fn eq(self, other : AppendOnlyTreeSnapshot) -> bool {\n (self.root == other.root) & (self.next_available_leaf_index == other.next_available_leaf_index)\n }\n}\n" }, "178": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{CALL_CONTEXT_LENGTH, GENERATOR_INDEX__CALL_CONTEXT}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered,\n abis::{gas_settings::GasSettings, gas::Gas}, utils::reader::Reader\n};\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n\n side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl CallContext {\n fn assert_is_zero(self) {\n let serialized: [Field; CALL_CONTEXT_LENGTH] = self.serialize();\n\n for i in 0..CALL_CONTEXT_LENGTH {\n assert(serialized[i] == 0);\n }\n }\n}\n\nimpl Eq for CallContext {\n fn eq(self, other: CallContext) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl Serialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n let mut serialized: BoundedVec<Field, CALL_CONTEXT_LENGTH> = BoundedVec::new();\n\n serialized.push(self.msg_sender.to_field());\n serialized.push(self.storage_contract_address.to_field());\n serialized.push(self.function_selector.to_field());\n serialized.push(self.is_delegate_call as Field);\n serialized.push(self.is_static_call as Field);\n serialized.push(self.side_effect_counter as Field);\n \n serialized.storage\n }\n}\n\nimpl Deserialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn deserialize(serialized: [Field; CALL_CONTEXT_LENGTH]) -> CallContext {\n let mut reader = Reader::new(serialized);\n CallContext {\n msg_sender: AztecAddress::from_field(reader.read()),\n storage_contract_address: AztecAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()),\n is_delegate_call: reader.read() as bool,\n is_static_call: reader.read() as bool,\n side_effect_counter: reader.read() as u32,\n }\n }\n}\n\nimpl Empty for CallContext {\n fn empty() -> Self {\n CallContext {\n msg_sender: AztecAddress::empty(),\n storage_contract_address: AztecAddress::empty(),\n function_selector: FunctionSelector::empty(),\n is_delegate_call: false,\n is_static_call: false,\n side_effect_counter: 0,\n }\n }\n}\n\n#[test]\nfn serialize_deserialize_of_empty() {\n let context = CallContext::empty();\n let serialized = context.serialize();\n let deserialized = CallContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn assert_is_zero() {\n let context = CallContext::empty();\n context.assert_is_zero();\n}\n\n#[test(should_fail)]\nfn not_zero_assert_is_zero() {\n let mut context = CallContext::empty();\n context.is_delegate_call = true;\n context.assert_is_zero();\n}\n\n#[test]\nfn test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = true;\n\n let address: AztecAddress = AztecAddress::from_field(69420);\n context1.msg_sender = address;\n context2.msg_sender = address;\n\n assert(context1.eq(context2));\n}\n\n#[test(should_fail)]\nfn not_eq_test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = false;\n\n let address1: AztecAddress = AztecAddress::from_field(69420);\n let address2: AztecAddress = AztecAddress::from_field(42069);\n\n context1.msg_sender = address1;\n context2.msg_sender = address2;\n\n assert(context1.eq(context2));\n}\n\n#[test]\nfn hash_smoke() {\n let context = CallContext::empty();\n let _hashed = context.hash();\n}\n" }, "179": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/max_block_number.nr", "source": "use crate::{constants::MAX_BLOCK_NUMBER_LENGTH, traits::{Deserialize, Serialize, Empty}};\n\nstruct MaxBlockNumber {\n _opt: Option<u32>\n}\n\nimpl Empty for MaxBlockNumber {\n fn empty() -> Self {\n Self { _opt: Option::none() }\n }\n}\n\nimpl Eq for MaxBlockNumber {\n fn eq(self, other: Self) -> bool {\n self._opt == other._opt\n }\n}\n\nimpl Serialize<MAX_BLOCK_NUMBER_LENGTH> for MaxBlockNumber {\n fn serialize(self) -> [Field; MAX_BLOCK_NUMBER_LENGTH] {\n [self._opt._is_some as Field, self._opt._value as Field]\n }\n}\n\nimpl Deserialize<MAX_BLOCK_NUMBER_LENGTH> for MaxBlockNumber {\n fn deserialize(serialized: [Field; MAX_BLOCK_NUMBER_LENGTH]) -> MaxBlockNumber {\n MaxBlockNumber {\n _opt: Option {\n _is_some: serialized[0] as bool,\n _value: serialized[1] as u32,\n }\n }\n }\n}\n\nimpl MaxBlockNumber {\n pub fn new(max_block_number: u32) -> Self {\n Self { _opt: Option::some(max_block_number) }\n }\n\n pub fn is_none(self) -> bool {\n self._opt.is_none()\n }\n\n pub fn is_some(self) -> bool {\n self._opt.is_some()\n }\n\n pub fn unwrap(self) -> u32 {\n self._opt.unwrap()\n }\n\n pub fn unwrap_unchecked(self) -> u32 {\n self._opt.unwrap_unchecked()\n }\n\n pub fn min(lhs: MaxBlockNumber, rhs: MaxBlockNumber) -> MaxBlockNumber {\n if rhs.is_none() {\n lhs // lhs might also be none, but in that case both would be\n } else {\n MaxBlockNumber::min_with_u32(lhs, rhs.unwrap_unchecked())\n }\n }\n\n pub fn min_with_u32(lhs: MaxBlockNumber, rhs: u32) -> MaxBlockNumber {\n if lhs._opt.is_none() {\n MaxBlockNumber::new(rhs)\n } else {\n let lhs_value = lhs._opt.unwrap_unchecked();\n\n MaxBlockNumber::new(if lhs_value < rhs { lhs_value } else { rhs })\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let item = MaxBlockNumber::empty();\n let serialized = item.serialize();\n let deserialized = MaxBlockNumber::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn zeroed_is_none() {\n // Large parts of the kernel rely on zeroed to initialize structs. This conveniently matches what `default` does,\n // and though we should eventually move everything to use `default`, it's good to check for now that both are\n // equivalent.\n let a = MaxBlockNumber::empty();\n assert(a.is_none());\n}\n\n#[test]\nfn serde_default() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::deserialize(a.serialize());\n assert(b.is_none());\n}\n\n#[test]\nfn serde_some() {\n let a = MaxBlockNumber::new(13);\n let b = MaxBlockNumber::deserialize(a.serialize());\n assert_eq(b.unwrap(), 13);\n}\n\n#[test(should_fail)]\nfn default_unwrap_panics() {\n let a = MaxBlockNumber::empty();\n let _ = a.unwrap();\n}\n\n#[test]\nfn min_default_default() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::empty();\n\n assert(MaxBlockNumber::min(a, b).is_none());\n}\n\n#[test]\nfn min_default_some() {\n let a = MaxBlockNumber::empty();\n let b = MaxBlockNumber::new(13);\n\n assert_eq(MaxBlockNumber::min(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min(b, a).unwrap(), 13);\n}\n\n#[test]\nfn min_some_some() {\n let a = MaxBlockNumber::new(13);\n let b = MaxBlockNumber::new(42);\n\n assert_eq(MaxBlockNumber::min(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min(b, a).unwrap(), 13);\n}\n\n#[test]\nfn min_with_u32_default() {\n let a = MaxBlockNumber::empty();\n let b = 42;\n\n assert_eq(MaxBlockNumber::min_with_u32(a, b).unwrap(), 42);\n}\n\n#[test]\nfn min_with_u32_some() {\n let a = MaxBlockNumber::new(13);\n let b = 42;\n let c = 8;\n\n assert_eq(MaxBlockNumber::min_with_u32(a, b).unwrap(), 13);\n assert_eq(MaxBlockNumber::min_with_u32(a, c).unwrap(), 8);\n}\n" }, "180": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr", "source": "use crate::{\n abis::{\n call_context::CallContext, note_hash::NoteHash, nullifier::Nullifier, read_request::ReadRequest,\n side_effect::SideEffect, gas::Gas, global_variables::GlobalVariables\n},\n address::AztecAddress,\n constants::{\n MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n hash::pedersen_hash, header::Header, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{Hash, Serialize, Deserialize, Empty}, utils::reader::Reader\n};\n\nstruct PublicCircuitPublicInputs {\n call_context: CallContext,\n\n args_hash: Field,\n returns_hash: Field,\n\n nullifier_read_requests: [ReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest; MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash; MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n start_side_effect_counter: u32,\n end_side_effect_counter: u32,\n\n unencrypted_logs_hashes: [SideEffect; MAX_UNENCRYPTED_LOGS_PER_CALL],\n\n // Here so that the gas cost of this request can be measured by circuits, without actually needing to feed in the\n // variable-length data.\n unencrypted_log_preimages_length: Field,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n\n // Global variables injected into this circuit\n global_variables: GlobalVariables,\n\n prover_address: AztecAddress,\n\n revert_code: u8,\n \n start_gas_left: Gas,\n end_gas_left: Gas,\n transaction_fee: Field,\n}\n\nimpl Eq for PublicCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Serialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new();\n fields.extend_from_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push(self.returns_hash);\n for i in 0..MAX_NULLIFIER_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_read_requests[i].serialize());\n }\n for i in 0..MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_non_existent_read_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.extend_from_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.extend_from_array(self.contract_storage_reads[i].serialize());\n }\n fields.extend_from_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_NOTE_HASHES_PER_CALL {\n fields.extend_from_array(self.new_note_hashes[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL {\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL {\n fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize());\n }\n\n fields.push(self.start_side_effect_counter as Field);\n fields.push(self.end_side_effect_counter as Field);\n\n for i in 0..MAX_UNENCRYPTED_LOGS_PER_CALL{\n fields.extend_from_array(self.unencrypted_logs_hashes[i].serialize());\n }\n fields.push(self.unencrypted_log_preimages_length);\n fields.extend_from_array(self.historical_header.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n fields.push(self.prover_address.to_field());\n fields.push(self.revert_code as Field);\n fields.extend_from_array(self.start_gas_left.serialize());\n fields.extend_from_array(self.end_gas_left.serialize());\n fields.push(self.transaction_fee);\n fields.storage\n }\n}\n\nimpl Deserialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn deserialize(serialized: [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: reader.read(),\n nullifier_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL]),\n nullifier_non_existent_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL]),\n contract_storage_update_requests: reader.read_struct_array(StorageUpdateRequest::deserialize, [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL]),\n contract_storage_reads: reader.read_struct_array(StorageRead::deserialize, [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_note_hashes: reader.read_struct_array(NoteHash::deserialize, [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]),\n new_nullifiers: reader.read_struct_array(Nullifier::deserialize, [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n start_side_effect_counter: reader.read() as u32,\n end_side_effect_counter: reader.read() as u32,\n unencrypted_logs_hashes: reader.read_struct_array(SideEffect::deserialize, [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL]),\n unencrypted_log_preimages_length: reader.read(),\n historical_header: reader.read_struct(Header::deserialize),\n global_variables: reader.read_struct(GlobalVariables::deserialize),\n prover_address: reader.read_struct(AztecAddress::deserialize),\n revert_code: reader.read() as u8,\n start_gas_left: reader.read_struct(Gas::deserialize),\n end_gas_left: reader.read_struct(Gas::deserialize),\n transaction_fee: reader.read(),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PublicCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl Empty for PublicCircuitPublicInputs {\n fn empty() -> Self {\n PublicCircuitPublicInputs {\n call_context: CallContext::empty(),\n args_hash: 0,\n returns_hash: 0,\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0 as u32,\n end_side_effect_counter: 0 as u32,\n unencrypted_logs_hashes: [SideEffect::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0 as u8,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi = PublicCircuitPublicInputs::empty();\n let serialized = pcpi.serialize();\n let deserialized = PublicCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let inputs = PublicCircuitPublicInputs::empty();\n let hash = inputs.hash();\n\n // Value from public_circuit_public_inputs.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x132559f41b7adc7388e0cd52b91fd6837c296b2f9ec1b6d2ed046f7a56db18f8;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "182": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr", "source": "use crate::{\n abis::function_selector::FunctionSelector,\n constants::{GENERATOR_INDEX__FUNCTION_DATA, FUNCTION_DATA_LENGTH}, hash::pedersen_hash,\n traits::{Serialize, Hash, Deserialize, Empty}\n};\n\nstruct FunctionData {\n selector : FunctionSelector,\n is_private : bool,\n}\n\nimpl Eq for FunctionData {\n fn eq(self, other: Self) -> bool {\n self.selector.eq(other.selector) &\n self.is_private == other.is_private\n }\n}\n\nimpl Serialize<FUNCTION_DATA_LENGTH> for FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn serialize(self) -> [Field; FUNCTION_DATA_LENGTH] {\n [\n self.selector.to_field(),\n self.is_private as Field,\n ]\n }\n}\n\nimpl Deserialize<FUNCTION_DATA_LENGTH> for FunctionData {\n fn deserialize(serialized: [Field; FUNCTION_DATA_LENGTH]) -> Self {\n Self {\n selector: FunctionSelector::from_field(serialized[0]),\n is_private: serialized[1] as bool,\n }\n }\n}\n\nimpl Hash for FunctionData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n\nimpl Empty for FunctionData {\n fn empty() -> Self {\n FunctionData {\n selector: FunctionSelector::empty(),\n is_private: false,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let data = FunctionData::empty();\n let serialized = data.serialize();\n let deserialized = FunctionData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let data = FunctionData::empty();\n let hash = data.hash();\n\n // Value from function_data.test.ts \"computes empty function data hash\" test\n let test_data_empty_hash = 0x27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "186": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils.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, N, M>(src: [T; N], mut dst: [T; M], offset: u64) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n" }, "187": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/messaging/l2_to_l1_message.nr", "source": "use crate::{\n address::{AztecAddress, EthAddress},\n constants::{L2_TO_L1_MESSAGE_LENGTH, SCOPED_L2_TO_L1_MESSAGE_LENGTH}, abis::side_effect::Ordered,\n traits::{Deserialize, Empty, Serialize}, utils::{arrays::array_concat, reader::Reader}\n};\n\n// Note: Not to be confused with L2ToL1Msg in Solidity\nstruct L2ToL1Message {\n recipient: EthAddress,\n content: Field,\n counter: u32,\n}\n\nimpl Empty for L2ToL1Message {\n fn empty() -> Self {\n Self {\n recipient: EthAddress::empty(),\n content: 0,\n counter: 0,\n }\n }\n}\n\nimpl Eq for L2ToL1Message {\n fn eq(self, other: Self) -> bool {\n (self.recipient == other.recipient) & (self.content == other.content) & (self.counter == other.counter)\n }\n}\n\nimpl Serialize<L2_TO_L1_MESSAGE_LENGTH> for L2ToL1Message {\n fn serialize(self) -> [Field; L2_TO_L1_MESSAGE_LENGTH] {\n [self.recipient.to_field(), self.content, self.counter as Field]\n }\n}\n\nimpl Deserialize<L2_TO_L1_MESSAGE_LENGTH> for L2ToL1Message {\n fn deserialize(values: [Field; L2_TO_L1_MESSAGE_LENGTH]) -> Self {\n Self {\n recipient: EthAddress::from_field(values[0]),\n content: values[1],\n counter: values[2] as u32,\n }\n }\n}\n\nimpl L2ToL1Message {\n pub fn scope(self, contract_address: AztecAddress) -> ScopedL2ToL1Message {\n ScopedL2ToL1Message { message: self, contract_address }\n }\n}\n\nstruct ScopedL2ToL1Message {\n message: L2ToL1Message,\n contract_address: AztecAddress,\n}\n\nimpl Ordered for ScopedL2ToL1Message {\n fn counter(self) -> u32 {\n self.message.counter\n }\n}\n\nimpl Eq for ScopedL2ToL1Message {\n fn eq(self, other: ScopedL2ToL1Message) -> bool {\n (self.message == other.message)\n & (self.contract_address == other.contract_address) \n }\n}\n\nimpl Empty for ScopedL2ToL1Message {\n fn empty() -> Self {\n ScopedL2ToL1Message {\n message: L2ToL1Message::empty(),\n contract_address: AztecAddress::empty(),\n }\n }\n}\n\nimpl Serialize<SCOPED_L2_TO_L1_MESSAGE_LENGTH> for ScopedL2ToL1Message {\n fn serialize(self) -> [Field; SCOPED_L2_TO_L1_MESSAGE_LENGTH] {\n array_concat(self.message.serialize(), [self.contract_address.to_field()])\n }\n}\n\nimpl Deserialize<SCOPED_L2_TO_L1_MESSAGE_LENGTH> for ScopedL2ToL1Message {\n fn deserialize(values: [Field; SCOPED_L2_TO_L1_MESSAGE_LENGTH]) -> Self {\n let mut reader = Reader::new(values);\n let res = Self {\n message: reader.read_struct(L2ToL1Message::deserialize),\n contract_address: reader.read_struct(AztecAddress::deserialize),\n };\n reader.finish();\n res\n }\n}\n\n#[test]\nfn serialization_of_empty_l2() {\n let item = L2ToL1Message::empty();\n let serialized = item.serialize();\n let deserialized = L2ToL1Message::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n\n#[test]\nfn serialization_of_empty_scoped_l2() {\n let item = ScopedL2ToL1Message::empty();\n let serialized = item.serialize();\n let deserialized = ScopedL2ToL1Message::deserialize(serialized);\n assert(item.eq(deserialized));\n}\n" }, "195": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr", "source": "use dep::std::cmp::Eq;\nuse 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, N>(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<N> 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<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> 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<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n" }, "199": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr", "source": "use crate::{\n constants::CONTENT_COMMITMENT_LENGTH, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice\n};\n\nstruct ContentCommitment {\n tx_tree_height: Field,\n txs_effects_hash: Field,\n in_hash: Field,\n out_hash: Field,\n}\n\nimpl Serialize<CONTENT_COMMITMENT_LENGTH> for ContentCommitment {\n fn serialize(self) -> [Field; CONTENT_COMMITMENT_LENGTH] {\n let mut fields: BoundedVec<Field, CONTENT_COMMITMENT_LENGTH> = BoundedVec::new();\n\n fields.push(self.tx_tree_height);\n fields.push(self.txs_effects_hash);\n fields.push(self.in_hash);\n fields.push(self.out_hash);\n\n fields.storage\n }\n}\n\nimpl Deserialize<CONTENT_COMMITMENT_LENGTH> for ContentCommitment {\n fn deserialize(serialized: [Field; CONTENT_COMMITMENT_LENGTH]) -> Self {\n let tx_tree_height = serialized[0];\n\n let txs_effects_hash = serialized[1];\n\n let in_hash = serialized[2];\n\n let out_hash = serialized[3];\n\n Self {\n tx_tree_height,\n txs_effects_hash,\n in_hash,\n out_hash,\n }\n }\n}\n\nimpl Empty for ContentCommitment {\n fn empty() -> Self {\n Self {\n tx_tree_height: 0,\n txs_effects_hash: 0,\n in_hash: 0,\n out_hash: 0,\n }\n }\n}\n\nimpl Eq for ContentCommitment {\n fn eq(self, other: Self) -> bool {\n (self.tx_tree_height == other.tx_tree_height)\n & (self.txs_effects_hash == other.txs_effects_hash)\n & (self.in_hash == other.in_hash)\n & (self.out_hash == other.out_hash)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let empty = ContentCommitment::empty();\n let serialized = empty.serialize();\n let deserialized = ContentCommitment::deserialize(serialized);\n\n assert(empty.eq(deserialized));\n}\n" }, "202": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/header.nr", "source": "use crate::{\n abis::{\n append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n global_variables::{GlobalVariables, GLOBAL_VARIABLES_LENGTH}\n},\n constants::{GENERATOR_INDEX__BLOCK_HASH, HEADER_LENGTH, STATE_REFERENCE_LENGTH, CONTENT_COMMITMENT_LENGTH},\n hash::pedersen_hash, state_reference::StateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice, content_commitment::ContentCommitment\n};\n\n// docs:start:header\nstruct Header {\n last_archive: AppendOnlyTreeSnapshot,\n content_commitment: ContentCommitment,\n state: StateReference,\n global_variables: GlobalVariables,\n}\n// docs:end:header\n\nimpl Eq for Header {\n fn eq(self, other: Self) -> bool {\n self.last_archive.eq(other.last_archive) &\n self.content_commitment.eq(other.content_commitment) &\n self.state.eq(other.state) &\n self.global_variables.eq(other.global_variables)\n }\n}\n\nimpl Serialize<HEADER_LENGTH> for Header {\n fn serialize(self) -> [Field; HEADER_LENGTH] {\n let mut fields: BoundedVec<Field, HEADER_LENGTH> = BoundedVec::new();\n\n fields.extend_from_array(self.last_archive.serialize());\n fields.extend_from_array(self.content_commitment.serialize());\n fields.extend_from_array(self.state.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<HEADER_LENGTH> for Header {\n fn deserialize(serialized: [Field; HEADER_LENGTH]) -> Self {\n let mut offset = 0;\n\n let last_archive_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let content_commitment_fields = arr_copy_slice(serialized, [0; CONTENT_COMMITMENT_LENGTH], offset);\n offset = offset + CONTENT_COMMITMENT_LENGTH;\n\n let state_fields = arr_copy_slice(serialized, [0; STATE_REFERENCE_LENGTH], offset);\n offset = offset + STATE_REFERENCE_LENGTH;\n\n let global_variables_fields = arr_copy_slice(serialized, [0; GLOBAL_VARIABLES_LENGTH], offset);\n\n Header {\n last_archive: AppendOnlyTreeSnapshot::deserialize(last_archive_fields),\n content_commitment: ContentCommitment::deserialize(content_commitment_fields),\n state: StateReference::deserialize(state_fields),\n global_variables: GlobalVariables::deserialize(global_variables_fields),\n }\n }\n}\n\nimpl Empty for Header {\n fn empty() -> Self {\n Self {\n last_archive: AppendOnlyTreeSnapshot::zero(),\n content_commitment: ContentCommitment::empty(),\n state: StateReference::empty(),\n global_variables: GlobalVariables::empty(),\n }\n }\n}\n\nimpl Hash for Header {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__BLOCK_HASH)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let header = Header::empty();\n let serialized = header.serialize();\n let deserialized = Header::deserialize(serialized);\n assert(header.eq(deserialized));\n}\n\n#[test]\nfn hash_smoke() {\n let header = Header::empty();\n let _hashed = header.hash();\n}\n\n#[test]\nfn empty_hash_is_zero() {\n let header = Header::empty();\n let hash = header.hash();\n\n // Value from new_contract_data.test.ts \"computes empty hash\" test\n let test_data_empty_hash = 0x2b2525fb1ae91c903827b8055b9ffaf8444ddf4c2b4dce4a79a3cba426bfbd73;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "203": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr", "source": "use crate::address::{AztecAddress, EthAddress};\nuse crate::recursion::verification_key::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::side_effect::SideEffect;\nuse crate::traits::is_empty;\nuse crate::utils::{uint256::U256, field::field_from_bytes_32_trunc};\nuse crate::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\n};\nuse crate::traits::Hash;\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\nuse crate::merkle_tree::root::root_from_sibling_path;\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = 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\npub fn compute_note_hash_nonce(first_nullifier: Field, note_hash_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n note_hash_index 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 pedersen_hash(\n [\n nonce,\n note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn silo_note_hash(address: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\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 rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\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 = input[offset].to_be_bytes(32);\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: [SideEffect; 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 = logs[offset].value.to_be_bytes(32);\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<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\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 = 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), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5, counter: 1234 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n" }, "204": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/partial_state_reference.nr", "source": "use crate::{\n abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot, constants::PARTIAL_STATE_REFERENCE_LENGTH,\n traits::{Deserialize, Empty, Serialize}\n};\n\nstruct PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot,\n nullifier_tree: AppendOnlyTreeSnapshot,\n public_data_tree: AppendOnlyTreeSnapshot,\n}\n\nimpl Eq for PartialStateReference {\n fn eq(self, other: PartialStateReference) -> bool {\n self.note_hash_tree.eq(other.note_hash_tree) &\n self.nullifier_tree.eq(other.nullifier_tree) &\n self.public_data_tree.eq(other.public_data_tree)\n }\n}\n\nimpl Serialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn serialize(self) -> [Field; PARTIAL_STATE_REFERENCE_LENGTH] {\n let serialized_note_hash_tree = self.note_hash_tree.serialize();\n let serialized_nullifier_tree = self.nullifier_tree.serialize();\n let serialized_public_data_tree = self.public_data_tree.serialize();\n\n [\n serialized_note_hash_tree[0], \n serialized_note_hash_tree[1],\n serialized_nullifier_tree[0],\n serialized_nullifier_tree[1],\n serialized_public_data_tree[0],\n serialized_public_data_tree[1],\n ]\n }\n}\n\nimpl Deserialize<PARTIAL_STATE_REFERENCE_LENGTH> for PartialStateReference {\n fn deserialize(serialized: [Field; PARTIAL_STATE_REFERENCE_LENGTH]) -> PartialStateReference {\n PartialStateReference {\n note_hash_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[0], serialized[1]]\n ),\n nullifier_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[2], serialized[3]]\n ),\n public_data_tree: AppendOnlyTreeSnapshot::deserialize(\n [serialized[4], serialized[5]]\n ),\n }\n }\n}\n\nimpl Empty for PartialStateReference {\n fn empty() -> Self {\n Self {\n note_hash_tree: AppendOnlyTreeSnapshot::zero(),\n nullifier_tree: AppendOnlyTreeSnapshot::zero(),\n public_data_tree: AppendOnlyTreeSnapshot::zero(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let partial = PartialStateReference::empty();\n let _serialized = partial.serialize();\n let _deserialized = PartialStateReference::deserialize(_serialized);\n}\n" }, "206": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/transaction/tx_context.nr", "source": "use crate::{\n constants::{GENERATOR_INDEX__TX_CONTEXT, TX_CONTEXT_LENGTH}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, utils::reader::Reader,\n abis::gas_settings::GasSettings\n};\n\n// docs:start:tx-context\nstruct TxContext {\n chain_id : Field,\n version : Field,\n gas_settings: GasSettings,\n}\n// docs:end:tx-context\n\nimpl TxContext {\n pub fn new(chain_id: Field, version: Field, gas_settings: GasSettings) -> Self {\n TxContext { chain_id, version, gas_settings }\n }\n}\n\nimpl Eq for TxContext {\n fn eq(self, other: Self) -> bool {\n (self.chain_id == other.chain_id) &\n (self.version == other.version) &\n (self.gas_settings.eq(other.gas_settings))\n }\n}\n\nimpl Empty for TxContext {\n fn empty() -> Self {\n TxContext {\n chain_id: 0,\n version: 0,\n gas_settings: GasSettings::empty(),\n }\n }\n}\n\nimpl Serialize<TX_CONTEXT_LENGTH> for TxContext {\n fn serialize(self) -> [Field; TX_CONTEXT_LENGTH] {\n let mut fields: BoundedVec<Field, TX_CONTEXT_LENGTH> = BoundedVec::new();\n\n fields.push(self.chain_id);\n fields.push(self.version);\n fields.extend_from_array(self.gas_settings.serialize());\n\n assert_eq(fields.len(), TX_CONTEXT_LENGTH);\n\n fields.storage\n }\n}\n\nimpl Deserialize<TX_CONTEXT_LENGTH> for TxContext {\n fn deserialize(serialized: [Field; TX_CONTEXT_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n\n let context = Self {\n chain_id: reader.read(),\n version: reader.read(),\n gas_settings: reader.read_struct(GasSettings::deserialize),\n };\n\n reader.finish();\n context\n }\n}\n\nimpl Hash for TxContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__TX_CONTEXT)\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let context = TxContext::empty();\n let serialized = context.serialize();\n let deserialized = TxContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let context = TxContext::empty();\n let hash = context.hash();\n\n // Value from tx_context.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x17e4357684c5a4349b4587c95b0b6161dcb4a3c5b02d4eb2ecc3b02c80193261;\n assert_eq(hash, test_data_empty_hash);\n}\n" }, "212": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/state_reference.nr", "source": "use crate::{\n abis::append_only_tree_snapshot::{AppendOnlyTreeSnapshot, APPEND_ONLY_TREE_SNAPSHOT_LENGTH},\n constants::{PARTIAL_STATE_REFERENCE_LENGTH, STATE_REFERENCE_LENGTH},\n partial_state_reference::PartialStateReference, traits::{Deserialize, Empty, Hash, Serialize},\n utils::arr_copy_slice\n};\n\nstruct StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot,\n partial: PartialStateReference,\n}\n\nimpl Eq for StateReference {\n fn eq(self, other: StateReference) -> bool {\n self.l1_to_l2_message_tree.eq(other.l1_to_l2_message_tree) &\n self.partial.eq(other.partial)\n }\n}\n\nimpl Serialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn serialize(self) -> [Field; STATE_REFERENCE_LENGTH] {\n let mut fields: BoundedVec<Field, STATE_REFERENCE_LENGTH> = BoundedVec::new();\n\n fields.extend_from_array(self.l1_to_l2_message_tree.serialize());\n fields.extend_from_array(self.partial.serialize());\n\n fields.storage\n }\n}\n\nimpl Deserialize<STATE_REFERENCE_LENGTH> for StateReference {\n fn deserialize(serialized: [Field; STATE_REFERENCE_LENGTH]) -> StateReference {\n let mut offset = 0;\n\n let l1_to_l2_message_tree_fields = arr_copy_slice(serialized, [0; APPEND_ONLY_TREE_SNAPSHOT_LENGTH], offset);\n offset = offset + APPEND_ONLY_TREE_SNAPSHOT_LENGTH;\n\n let partial_fields = arr_copy_slice(serialized, [0; PARTIAL_STATE_REFERENCE_LENGTH], offset);\n\n StateReference {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::deserialize(l1_to_l2_message_tree_fields),\n partial: PartialStateReference::deserialize(partial_fields),\n }\n }\n}\n\nimpl Empty for StateReference {\n fn empty() -> Self {\n Self {\n l1_to_l2_message_tree: AppendOnlyTreeSnapshot::zero(),\n partial: PartialStateReference::empty(),\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let state = StateReference::empty();\n let _serialized = state.serialize();\n let _deserialized = StateReference::deserialize(_serialized);\n}\n" }, "22": { "path": "std/field.nr", "source": "mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\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 pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\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 = exponent.to_le_bits(32);\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 fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\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 num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_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] as u8;\n let y_byte = y_bytes[num_bytes - 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\n" }, "222": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr", "source": "struct Reader<N> {\n data: [Field; N],\n offset: u64,\n}\n\nimpl<N> 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_array<K>(&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, K>(&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, K, C>(&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" }, "238": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr", "source": "use crate::{\n constants::ETH_ADDRESS_LENGTH, hash::pedersen_hash,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_LENGTH] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n EthAddress::from_field(fields[0])\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n field.assert_max_bit_size(160);\n Self { inner: field }\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" }, "239": { "path": "/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr", "source": "use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, 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([pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1])\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 = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\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-contracts/contracts/multi_call_entrypoint_contract/src/main.nr", "source": "// An entrypoint contract that allows everything to go through. Only used for testing\n// Pair this with SignerlessWallet to perform multiple actions before any account contracts are deployed (and without authentication)\ncontract MultiCallEntrypoint {\n use dep::std;\n\n use dep::aztec::prelude::AztecAddress;\n use dep::authwit::entrypoint::app::AppPayload;\n\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload) {\n app_payload.execute_calls(&mut context);\n }\n}\n" }, "4": { "path": "std/collections/bounded_vec.nr", "source": "use crate::{cmp::Eq, convert::From};\n\nstruct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: u64,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: u64) -> T {\n assert(index < self.len);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: u64) -> T {\n self.storage[index]\n }\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 pub fn len(self) -> u64 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u64 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&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 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 pub fn extend_from_bounded_vec<Len>(&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 pub fn from_array<Len>(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 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::unsafe::zeroed();\n elem\n }\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\nimpl<T, MaxLen> 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, MaxLen, Len> 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 // TODO: Allow imports from \"super\"\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 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" }, "52": { "path": "/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr", "source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::pedersen_hash, traits::{Hash, Serialize}};\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 = 17;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 420;\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 pedersen_hash(\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_slice(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 false,\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 false,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n" }, "76": { "path": "/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr", "source": "use crate::{\n context::{inputs::PrivateContextInputs, interface::ContextInterface},\n messaging::process_l1_to_l2_message,\n hash::{hash_args_array, ArgsHasher, compute_encrypted_log_hash, compute_unencrypted_log_hash},\n oracle::{\n arguments, returns, call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, set_public_teardown_function_call_internal,\n parse_public_call_stack_item_from_oracle\n},\n header::get_header_at, logs::emit_encrypted_log,\n logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog},\n nullifier_key::{get_nullifier_keys, NullifierKeys}\n}\n};\nuse dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n nullifier_key_validation_request::NullifierKeyValidationRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, side_effect::SideEffect\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_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_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL,\n MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n grumpkin_point::GrumpkinPoint, header::Header, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{is_empty, Deserialize, 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 nullifier_key_validation_requests: BoundedVec<NullifierKeyValidationRequest, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_note_hashes: BoundedVec<NoteHash, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<Nullifier, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_stack_hashes : BoundedVec<Field, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_function_hash: Field,\n new_l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_NEW_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 encrypted_logs_hashes: BoundedVec<SideEffect, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<SideEffect, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n encrypted_log_preimages_length: Field,\n unencrypted_log_preimages_length: Field,\n\n nullifier_key: Option<NullifierKeys>,\n}\n\nimpl ContextInterface for PrivateContext {\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_new_note_hash(&mut self, note_hash: Field) {\n self.new_note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.new_nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n let side_effect_counter = inputs.start_side_effect_counter;\n let mut min_revertible_side_effect_counter = 0;\n if is_empty(inputs.call_context.msg_sender) {\n min_revertible_side_effect_counter = side_effect_counter;\n }\n PrivateContext {\n inputs,\n side_effect_counter,\n min_revertible_side_effect_counter,\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 nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_stack_hashes: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n nullifier_key: Option::none()\n }\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 returns::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 nullifier_key_validation_requests: self.nullifier_key_validation_requests.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_stack_hashes: self.private_call_stack_hashes.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n public_teardown_function_hash: self.public_teardown_function_hash,\n new_l2_to_l1_msgs: self.new_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 encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n encrypted_log_preimages_length: self.encrypted_log_preimages_length + 4,\n unencrypted_log_preimages_length: self.unencrypted_log_preimages_length + 4,\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 self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n self.min_revertible_side_effect_counter = self.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_app_nullifier_secret_key(&mut self, account: AztecAddress) -> Field {\n let keys = if self.nullifier_key.is_none() {\n let keys = get_nullifier_keys(account);\n let request = NullifierKeyValidationRequest {\n master_nullifier_public_key: keys.master_nullifier_public_key,\n app_nullifier_secret_key: keys.app_nullifier_secret_key\n };\n self.nullifier_key_validation_requests.push(request);\n self.nullifier_key = Option::some(keys);\n keys\n } else {\n let keys = self.nullifier_key.unwrap_unchecked();\n // If MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL is larger than 1, need to update the way the key pair is cached.\n assert(MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL == 1);\n assert(keys.account == account, \"Cannot query nullifier key for more than one account per call\");\n keys\n };\n keys.app_nullifier_secret_key\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.new_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_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n // TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n // --> might be a better approach to force devs to make a public function call that emits the log if needed then\n // it would be less easy to accidentally leak information.\n // If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\n pub fn emit_unencrypted_log<T, N, M>(&mut self, log: T) where T: ToBytesForUnencryptedLog<N, M> {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let log_slice = log.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n let side_effect = SideEffect { value: log_hash, counter: self.next_counter() };\n self.unencrypted_logs_hashes.push(side_effect);\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n self.unencrypted_log_preimages_length += 44 + log_slice.len().to_field();\n // call oracle\n let _void = emit_unencrypted_log_private_internal(contract_address, event_selector, log, side_effect.counter);\n }\n\n // This fn exists separately from emit_unencrypted_log because sha hashing the preimage\n // is too large to compile (16,200 fields, 518,400 bytes) => the oracle hashes it\n // It is ONLY used with contract_class_registerer_contract since we already assert correctness:\n // - Contract class -> we will commit to the packed bytecode (currently a TODO)\n // - Private function -> we provide a membership proof\n // - Unconstrained function -> we provide a membership proof\n // Ordinary logs are not protected by the above so this fn shouldn't be called by anything else\n pub fn emit_contract_class_unencrypted_log<N>(&mut self, log: [Field; N]) {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let counter = self.next_counter();\n let log_hash = emit_contract_class_unencrypted_log_private_internal(contract_address, event_selector, log, counter);\n let side_effect = SideEffect { value: log_hash, counter };\n self.unencrypted_logs_hashes.push(side_effect);\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n self.unencrypted_log_preimages_length += 44 + N*32;\n }\n\n pub fn emit_encrypted_log<N, M, L>(\n &mut self,\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ivpk_m: GrumpkinPoint,\n preimage: [Field; N]\n ) where [Field; N]: LensForEncryptedLog<N, M, L> {\n // TODO(1139): perform encryption in the circuit\n // The oracle call should come last, but we require the encrypted value for now\n let counter = self.next_counter();\n let encrypted_log: [Field; M] = emit_encrypted_log(\n contract_address,\n storage_slot,\n note_type_id,\n ivpk_m,\n preimage,\n counter\n );\n let log_hash = compute_encrypted_log_hash(encrypted_log);\n let side_effect = SideEffect { value: log_hash, counter };\n self.encrypted_logs_hashes.push(side_effect);\n let encrypted_log_byte_len = 112 + 32 * (N + 3);\n // + processed log len (4)\n self.encrypted_log_preimages_length += encrypted_log_byte_len + 4;\n }\n\n pub fn call_private_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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<ARGS_COUNT>(\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<RETURNS_COUNT>(\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<RETURNS_COUNT>(\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<ARGS_COUNT>(\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<RETURNS_COUNT>(\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 item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter);\n assert_eq(item.public_inputs.start_side_effect_counter, self.side_effect_counter);\n self.side_effect_counter = item.public_inputs.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 assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n self.private_call_stack_hashes.push(item.hash());\n\n PackedReturns::new(item.public_inputs.returns_hash)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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<ARGS_COUNT>(\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 mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_call_stack_hashes.push(item.hash());\n }\n\n pub fn set_public_teardown_function<ARGS_COUNT>(\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<ARGS_COUNT>(\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 mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_teardown_function_hash = item.hash();\n }\n\n fn validate_call_stack_item_from_oracle(\n self,\n item: PublicCallStackItem,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter);\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\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 nullifier_key_validation_requests: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n private_call_stack_hashes : BoundedVec::new(),\n public_call_stack_hashes : BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs : BoundedVec::new(),\n historical_header: Header::empty(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n encrypted_log_preimages_length: 0,\n unencrypted_log_preimages_length: 0,\n nullifier_key: Option::none(),\n }\n }\n}\n\nstruct PackedReturns {\n packed_returns: Field,\n}\n\nimpl PackedReturns {\n pub fn new(packed_returns: Field) -> Self {\n PackedReturns { packed_returns }\n }\n\n pub fn assert_empty(self) {\n assert_eq(self.packed_returns, 0);\n }\n\n pub fn raw(self) -> Field {\n self.packed_returns\n }\n\n pub fn unpack<N>(self) -> [Field; N] {\n let unpacked: [Field; N] = returns::unpack_returns(self.packed_returns);\n assert_eq(self.packed_returns, hash_args_array(unpacked));\n unpacked\n }\n\n pub fn unpack_into<T, N>(self) -> T where T: Deserialize<N> {\n let unpacked: [Field; N] = self.unpack();\n Deserialize::deserialize(unpacked)\n }\n}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle_private<T>(\n _contract_address: AztecAddress,\n _event_selector: Field,\n _message: T,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, event_selector, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nfn emit_contract_class_unencrypted_log_private<N>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<N>(\n contract_address: AztecAddress,\n event_selector: Field,\n message: [Field; N],\n counter: u32\n) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, event_selector, message, counter)\n}\n\n" }, "96": { "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\n},\n traits::Hash, hash::{pedersen_hash, poseidon2_hash, silo_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_encrypted_log_hash<N, M, L>(encrypted_log: [Field; M]) -> Field where [Field; N]: LensForEncryptedLog<N, M, L> {\n let mut bytes = [0; L];\n // Note that bytes.append(encrypted_log[i].to_be_bytes(31)) results in bound error\n for i in 0..M - 1 {\n let to_add = encrypted_log[i].to_be_bytes(31);\n for j in 0..31 {\n bytes[i*31 + j] = to_add[j];\n }\n }\n // can't assign as L - not in scope error for: L-31*(M-1)\n let num_bytes = bytes.len() as u32 - 31 * (M - 1);\n let to_add_final = encrypted_log[M - 1].to_be_bytes(num_bytes);\n for j in 0..num_bytes {\n bytes[(M-1)*31 + j] = to_add_final[j];\n }\n sha256_to_field(bytes)\n}\n\npub fn compute_unencrypted_log_hash<T, N, M>(\n contract_address: AztecAddress,\n event_selector: Field,\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 event_bytes = event_selector.to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[32 + i] = event_bytes[i];\n }\n let len_bytes = (n as Field).to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[36 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[40 + 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 = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\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 pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub fn compute_siloed_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n silo_nullifier(address, nullifier)\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<N>(&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<N>(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() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH);\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] = pedersen_hash(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] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(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..800 {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x05a1023fef839ac88731f49ae983e172c1b600a3c8f3393ad0ac25d819ac0f0f);\n}\n\n#[test]\nfn compute_enc_log_hash_304() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x0021a0d4aa9989656b592187cf6da1965df53ab2ff2277421e663465cf20d3e9,\n 0x00c3969cc350f3474f8187a33ac1317181961f5f94043b07ce888d85a5d20cb5,\n 0x0058198041ed1547b056955b5141a5a8a1551b0c8d094255ec9daaf3604d9348,\n 0x00247ad96df2e4d984cf795ed7316234743a681f824a45c46253de8bfde48850,\n 0x007fc251f4ce44f4e9aba3dbf6567228be28fac85660156f2825ddb0b0577457,\n 0x009315851323c6bc2aaa42e23fe5f3be97208f2d8167eafdfc5742d94f2f4dd4,\n 0x00b938289e563b0fe01982cd9b8d9e33e3069046768ad01c0fb05e429e7b7909,\n 0x00fbcc257a3211f705b471eee763b0f43876a2b2178fab6d2b09bd2b7e086584,\n 0x000000000000008c3289b5793b7448f4d45ecde039d004b6f037cad10b5c2336\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x001e3c013994947fe28957a876bf1b2c3a69ac69cc92909efd4f2ae9b972f893);\n}\n\n#[test]\nfn compute_enc_log_hash_368() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x002190697d2a50e229a7a077e0951073f7d51e46679f10466153c308b63b1ea9,\n 0x00543e346facc6799b94514c9d461bcc836c04b083b13c2e4544a39130473c1e,\n 0x000df76d59526f8f953bcc7d9f77cdaefd36435931f0d7348f794bc275b42ded,\n 0x00a6d390ee1723af7f7ac1ae4fc81a266b2370fe07040a36d06dbe242e02413e,\n 0x00acbce15b6af1fbe94bd0f7b70f11768265dff77bfe63398f2a053efdfdf26d,\n 0x00b8b131b9f42c689beb095ba4f4a836d4d15c9068d0422e9add6ca82b786329,\n 0x00661a6a654b38f0f97d404ef5553e0efea9ed670561ae86685b31bbb2824fac,\n 0x00113a6b58edfaec0065b365f66ba8d8aa68254b8690035e8d671a17a843f0a1,\n 0x0023f2d2eae8c4449bac8f268a3e62a3faace1fe1401f0efdc8b0ccfbc8fb271,\n 0x00cf6603f8c61993dd2f662c719671c61727a2f4e925fb988b23d31feccd77d9,\n 0x0000000000a402a84b7294671799c38dd805f6a827a3a12633fdf91a57debe1f\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x00a0d651ac0cbc01b72430fa6a05d91738595af6e0229347b4c9968223387aeb);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00846d6969c8c2f61d39cd2762efcb0abb14f88d59c2675910251ef2bcffe9a7);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00880a801230ea08c98a802a11b4786cba474513875f0fc69a615e81c5f9f21c);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00a78b5347813624ecfd26e5b8bc6146f418b0cfcc8296b5112d09b8ebba9496);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x001f3390ea242afee7ce46dafdbdc4bd4f1cf20cd63850d12d60ff9956712c4f);\n}\n" } } }