From 2c2653992b798dd97a5362f49bb4581bd993fc18 Mon Sep 17 00:00:00 2001 From: kp2pml30 Date: Wed, 29 Jul 2026 22:12:05 +0900 Subject: [PATCH] feat(executor): cross-major calls and host protocol rework MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(sdk): call contracts of another major through the host ✨ * refactor(rt): bound recursion with a budget minted by the chain root ♻️ * refactor(exe): carry nested execution state as one explicit group ♻️ * fix(exe): fold the callee's small hash on the nested route 🐛🔒️ * feat(exe): refuse a crossing call while custom runners are loaded ✨ * feat(host): write caller-supplied hello bytes and drop notify_finished ✨ * fix(supervisor): load precompiled modules only for registry runners 🔒️ * fix(sdk): stop exporting nondet permission across the boundary 🐛 --- executor/Cargo.lock | 2 + executor/Cargo.toml | 26 +- executor/codegen/data/host-fns.json | 40 --- executor/crates/common/Cargo.lock | 25 +- executor/crates/common/Cargo.toml | 1 + executor/crates/common/src/host_fns.rs | 128 --------- executor/crates/common/src/lib.rs | 2 +- executor/crates/modules-interfaces/Cargo.lock | 1 + executor/crates/modules-interfaces/Cargo.toml | 1 + executor/crates/sdk-rs/src/abi/consts.rs | 69 +++++ executor/src/exe/precompile.rs | 45 ++- executor/src/exe/run.rs | 78 ++++- executor/src/host/mod.rs | 267 ++++++++++++++++-- executor/src/lib.rs | 142 ++++++++-- executor/src/rt/memlimiter.rs | 8 +- executor/src/rt/mod.rs | 55 ++++ executor/src/rt/supervisor/actions.rs | 13 +- executor/src/rt/supervisor/mod.rs | 2 +- executor/src/rt/vm/mod.rs | 60 ++-- executor/src/wasi/genlayer_sdk.rs | 234 ++++++++++++++- executor/tests/precompile_lookup.rs | 62 ++++ .../wasi/environ_args/environ_args.0.hash | 2 +- .../wasi/hash_random/hash_random.0.hash | 2 +- .../agentic/wasi/id_repr/id_repr.0.hash | 2 +- .../agentic/wasi/set_order/set_order.0.hash | 2 +- .../agentic/wasi/wasi_clock/wasi_clock.0.hash | 2 +- .../wasi/wasi_random/wasi_random.0.hash | 2 +- .../stable/bench/read_tree_map.0.hash | 2 +- .../stable/bench/read_tree_map.0_0.hash | 2 +- .../stable/exploits/call_wasi_extra.0.hash | 2 +- .../exploits/disagree_in_sandbox.0.hash | 2 +- tests/integration/stable/exploits/flt.0.hash | 2 +- .../stable/exploits/fork_bomb.0.hash | 2 +- .../stable/exploits/method_init.0.hash | 2 +- .../stable/exploits/method_init.0_0.hash | 2 +- .../stable/exploits/method_private.0.hash | 2 +- .../stable/exploits/method_private.0_0.hash | 2 +- tests/integration/stable/exploits/oom.0.hash | 2 +- tests/integration/stable/exploits/rec.0.hash | 2 +- .../stable/exploits/rec_1023.0.hash | 2 +- .../stable/exploits/rec_1024.0.hash | 2 +- .../stable/exploits/storage_rw_long.0.hash | 2 +- .../stable/exploits/storage_rw_long.0_0.hash | 2 +- .../stable/exploits/unreachable.0.hash | 2 +- .../leader_errors/leader_no_nondet.0.hash | 2 +- .../leader_errors/leader_no_nondet.0_0.hash | 2 +- .../nondet/leader_errors/simple_leader.0.hash | 2 +- .../leader_errors/simple_leader.0_0.hash | 2 +- .../leader_errors/simple_valid_err_err.0.hash | 2 +- .../simple_valid_err_err.0_0.hash | 2 +- .../simple_valid_err_exit.0.hash | 2 +- .../simple_valid_err_exit.0_0.hash | 2 +- .../simple_valid_err_exit_wrong_err.0.hash | 2 +- .../simple_valid_err_exit_wrong_err.0_0.hash | 2 +- .../simple_valid_err_nerr.0.hash | 2 +- .../simple_valid_err_nerr.0_0.hash | 2 +- .../nondet/metod_det_get_webpage.0.hash | 2 +- .../nondet/metod_det_get_webpage.0_0.hash | 2 +- .../integration/stable/nondet/trivial.0.hash | 2 +- .../stable/nondet/trivial.0_0.hash | 2 +- .../nondet/validator/rollback_agree.0.hash | 2 +- .../nondet/validator/rollback_agree.0_0.hash | 2 +- .../nondet/validator/rollback_disagree.0.hash | 2 +- .../validator/rollback_disagree.0_0.hash | 2 +- .../nondet/validator/rollback_imm.0.hash | 2 +- .../nondet/validator/rollback_imm.0_0.hash | 2 +- .../nondet/validator/rollback_imm.1.hash | 2 +- .../nondet/validator/rollback_imm.1_0.hash | 2 +- .../stable/nondet/validator/sync.0.hash | 2 +- .../stable/nondet/validator/sync.0_0.hash | 2 +- .../stable/nondet/validator/sync_err.0.hash | 2 +- .../stable/nondet/validator/sync_err.0_0.hash | 2 +- .../stable/py/balances/balance.0.hash | 2 +- .../stable/py/balances/balance_eth.0.hash | 2 +- .../py/balances/sandbox_overspend.0.hash | 2 +- .../py/balances/sandbox_overspend_2.0.hash | 2 +- .../stable/py/balances/undefined_all.0.hash | 2 +- .../stable/py/balances/undefined_all.0_0.hash | 2 +- .../py/balances/undefined_all.0_0_0.hash | 2 +- .../stable/py/balances/undefined_all.jsonnet | 4 +- .../py/balances/undefined_method.0.hash | 2 +- .../py/balances/undefined_method.0_0.hash | 2 +- .../py/balances/undefined_method.0_0_0.hash | 2 +- .../py/balances/undefined_method.jsonnet | 4 +- .../balances/undefined_method_payable.0.hash | 2 +- .../undefined_method_payable.0_0.hash | 2 +- .../undefined_method_payable.0_0_0.hash | 2 +- .../balances/undefined_method_payable.jsonnet | 4 +- .../py/balances/undefined_receive.0.hash | 2 +- .../py/balances/undefined_receive.0_0.hash | 2 +- .../py/balances/undefined_receive.0_0_0.hash | 2 +- .../py/balances/undefined_receive.jsonnet | 4 +- .../stable/py/embeddings/simple.0.hash | 2 +- .../stable/py/embeddings/simple.0_0.hash | 2 +- .../stable/py/embeddings/simple_det.0.hash | 2 +- .../stable/py/embeddings/simple_det.0_0.hash | 2 +- .../py/embeddings/simple_tokenizer.0.hash | 2 +- .../py/embeddings/simple_tokenizer.0_0.hash | 2 +- .../stable/py/embeddings/vecdb.0.hash | 2 +- .../stable/py/events/post_event.0.hash | 2 +- .../stable/py/intercontract/call_view.0.hash | 2 +- .../py/intercontract/call_view.0_0.hash | 2 +- .../py/intercontract/call_view.0_0_0.hash | 2 +- .../stable/py/intercontract/call_view.jsonnet | 2 +- .../py/intercontract/call_view_iface.0.hash | 2 +- .../py/intercontract/call_view_iface.0_0.hash | 2 +- .../intercontract/call_view_iface.0_0_0.hash | 2 +- .../py/intercontract/call_view_iface.jsonnet | 2 +- .../stable/py/intercontract/deploy.0.hash | 2 +- .../py/intercontract/deploy_salt.0.hash | 2 +- .../py/intercontract/send_message.0.hash | 2 +- .../py/intercontract/send_message_eth.0.hash | 2 +- .../py/intercontract/send_message_on.0.hash | 2 +- .../py/intercontract/send_message_on.0_0.hash | 2 +- .../intercontract/send_message_on.0_0_0.hash | 2 +- .../py/intercontract/send_message_on.jsonnet | 6 +- .../stable/py/other/meth/method_init.0.hash | 2 +- .../other/meth/method_init_wrong_name.0.hash | 2 +- .../other/meth/method_init_wrong_name.jsonnet | 2 +- .../stable/py/other/meth/method_public.0.hash | 2 +- .../py/other/meth/method_public.0_0.hash | 2 +- .../stable/py/other/meth/method_retn.0.hash | 2 +- .../stable/py/other/meth/method_retn.0_0.hash | 2 +- .../py/other/meth/method_retn_view.0.hash | 2 +- .../py/other/meth/method_retn_view.0_0.hash | 2 +- .../py/other/meth/method_rollback.0.hash | 2 +- .../py/other/meth/method_rollback.0_0.hash | 2 +- .../stable/py/other/ret/returns.0.hash | 2 +- .../stable/py/other/ret/returns.0_0.hash | 2 +- .../stable/py/other/ret/returns.1.hash | 2 +- .../stable/py/other/ret/returns.1_0.hash | 2 +- .../stable/py/other/ret/returns.2.hash | 2 +- .../stable/py/other/ret/returns.2_0.hash | 2 +- .../stable/py/other/ret/returns.3.hash | 2 +- .../stable/py/other/ret/returns.3_0.hash | 2 +- .../stable/py/other/ret/returns.4.hash | 2 +- .../stable/py/other/ret/returns.4_0.hash | 2 +- .../stable/py/other/ret/returns.5.hash | 2 +- .../stable/py/other/ret/returns.5_0.hash | 2 +- .../stable/py/other/ret/returns.6.hash | 2 +- .../stable/py/other/ret/returns.6_0.hash | 2 +- .../stable/py/other/ret/returns.7.hash | 2 +- .../stable/py/other/ret/returns.7_0.hash | 2 +- .../stable/py/other/ret/returns.8.hash | 2 +- .../stable/py/other/ret/returns.8_0.hash | 2 +- .../stable/py/other/ret/returns.9.hash | 2 +- .../stable/py/other/ret/returns.9_0.hash | 2 +- .../stable/py/pitfalls/error_msg.0.hash | 2 +- .../stable/py/pitfalls/error_msg.0_0.hash | 2 +- .../py/pitfalls/error_msg_overridden.0.hash | 2 +- .../py/pitfalls/error_msg_overridden.0_0.hash | 2 +- .../stable/py/pitfalls/multi_contract.0.hash | 2 +- .../stable/py/pitfalls/pub_ctor.0.hash | 2 +- .../stable/py/pitfalls/store_proxy.0.hash | 2 +- .../stable/py/rollbacks/call_view.0.hash | 2 +- .../stable/py/rollbacks/call_view.0_0.hash | 2 +- .../stable/py/rollbacks/call_view.0_0_0.hash | 2 +- .../stable/py/rollbacks/call_view.jsonnet | 2 +- .../stable/py/rollbacks/nondet.0.hash | 2 +- .../stable/py/rollbacks/simple.0.hash | 2 +- .../py/sandbox/det/s/assign-json.0.hash | 2 +- .../py/sandbox/det/s/assign-json.0_0.hash | 2 +- .../stable/py/sandbox/det/s/exit.0.hash | 2 +- .../stable/py/sandbox/det/s/exit.0_0.hash | 2 +- .../stable/py/sandbox/det/s/print.0.hash | 2 +- .../stable/py/sandbox/det/s/print.0_0.hash | 2 +- .../stable/py/sandbox/det/s/rollback.0.hash | 2 +- .../stable/py/sandbox/det/s/rollback.0_0.hash | 2 +- .../stable/py/sandbox/det/s/sandbox.0.hash | 2 +- .../stable/py/sandbox/det/s/sandbox.0_0.hash | 2 +- .../py/sandbox/det/sandbox_write.0.hash | 2 +- .../py/sandbox/non-det/s/assign-json.0.hash | 2 +- .../py/sandbox/non-det/s/assign-json.0_0.hash | 2 +- .../stable/py/sandbox/non-det/s/exit.0.hash | 2 +- .../stable/py/sandbox/non-det/s/exit.0_0.hash | 2 +- .../stable/py/sandbox/non-det/s/print.0.hash | 2 +- .../py/sandbox/non-det/s/print.0_0.hash | 2 +- .../py/sandbox/non-det/s/rollback.0.hash | 2 +- .../py/sandbox/non-det/s/rollback.0_0.hash | 2 +- .../stable/py/schemas/complex_types.0.hash | 2 +- .../stable/py/schemas/complex_types.0_0.hash | 2 +- .../stable/py/schemas/prim_types.0.hash | 2 +- .../stable/py/schemas/prim_types.0_0.hash | 2 +- .../stable/py/schemas/ret-float.0.hash | 2 +- .../stable/py/schemas/ret-float.0_0.hash | 2 +- .../stable/py/schemas/ret-tuple.0.hash | 2 +- .../stable/py/schemas/ret-tuple.0_0.hash | 2 +- .../integration/stable/py/schemas/ret.0.hash | 2 +- .../stable/py/schemas/ret.0_0.hash | 2 +- .../stable/py/schemas/trivial.0.hash | 2 +- .../stable/py/schemas/trivial.0_0.hash | 2 +- .../stable/runners/dup-dependency.0.hash | 2 +- .../stable/runners/env-template.0.hash | 2 +- .../stable/runners/malformed_runner.0.hash | 2 +- .../stable/runners/no_runner.0.hash | 2 +- .../stable/runners/zip/no-zip.0.hash | 2 +- .../stable/self-run/datetime.0.hash | 2 +- .../integration/stable/self-run/floats.0.hash | 2 +- .../stable/self-run/formats.0.hash | 2 +- .../stable/self-run/issue_163.0.hash | 2 +- .../stable/self-run/module/np.0.hash | 2 +- .../stable/self-run/module/pil.0.hash | 2 +- tests/integration/stable/self-run/re.0.hash | 2 +- .../stable/self-run/typing_is_ok.0.hash | 2 +- .../stable/storage/alloc_generic.0.hash | 2 +- .../stable/storage/alloc_generic_err.0.hash | 2 +- tests/integration/stable/storage/base.0.hash | 2 +- .../integration/stable/storage/floats.0.hash | 2 +- .../integration/stable/storage/gvm-89.0.hash | 2 +- .../stable/storage/gvm-89.0_0.hash | 2 +- .../storage/locking/default-frozen.0.hash | 2 +- .../storage/locking/default-frozen.0_0.hash | 2 +- .../storage/locking/default-frozen.0_0_0.hash | 2 +- .../storage/locking/default-frozen.jsonnet | 4 +- .../stable/storage/locking/modify_ctor.0.hash | 2 +- .../storage/locking/modify_ctor.0_0.hash | 2 +- .../storage/locking/modify_ctor.jsonnet | 2 +- .../storage/locking/modify_later.0.hash | 2 +- .../storage/locking/modify_later.0_0.hash | 2 +- .../storage/locking/modify_later.0_0_0.hash | 2 +- .../storage/locking/modify_later.jsonnet | 4 +- tests/integration/stable/storage/np.0.hash | 2 +- .../stable/storage/persists.0.hash | 2 +- .../stable/storage/persists.0_0.hash | 2 +- .../stable/storage/read_nondet.0.hash | 2 +- .../stable/storage/storage_tree_map.0.hash | 2 +- .../integration/stable/storage/to_str.0.hash | 2 +- .../stable/storage/tree_map_nested.0.hash | 2 +- 228 files changed, 1195 insertions(+), 496 deletions(-) delete mode 100644 executor/codegen/data/host-fns.json delete mode 100644 executor/crates/common/src/host_fns.rs create mode 100644 executor/tests/precompile_lookup.rs diff --git a/executor/Cargo.lock b/executor/Cargo.lock index e0bb0a2..a4023e7 100644 --- a/executor/Cargo.lock +++ b/executor/Cargo.lock @@ -1057,6 +1057,7 @@ dependencies = [ "dashmap", "genlayer_calldata", "genlayer_sdk", + "genvm_modules_interfaces", "hex", "libc", "num-bigint", @@ -1090,6 +1091,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", + "sha3", "tokio", ] diff --git a/executor/Cargo.toml b/executor/Cargo.toml index 45fa310..973b077 100644 --- a/executor/Cargo.toml +++ b/executor/Cargo.toml @@ -3,10 +3,28 @@ name = "genvm" version = "0.2.0" edition = "2021" -[profile.dev.package.wasmtime] -opt-level = 2 -[profile.dev.package.wasmparser] -opt-level = 2 +# Wasm compilation (`genvm precompile`, and the first run of any contract) is +# unusable when cranelift is built unoptimized: a profile of `precompile` +# attributes ~80% of its samples to the crates below, so they are optimized even +# in dev while genvm's own code stays at opt-level 0. Generic code (hashbrown, +# smallvec, core) is monomorphized into whichever crate instantiates it, so +# optimizing these covers it too. +[profile.dev.package] +cranelift-assembler-x64.opt-level = 2 +cranelift-bforest.opt-level = 2 +cranelift-bitset.opt-level = 2 +cranelift-codegen.opt-level = 2 +cranelift-control.opt-level = 2 +cranelift-entity.opt-level = 2 +cranelift-frontend.opt-level = 2 +gimli.opt-level = 2 +log.opt-level = 2 +object.opt-level = 2 +regalloc2.opt-level = 2 +wasmparser.opt-level = 2 +wasmtime.opt-level = 2 +wasmtime-environ.opt-level = 2 +wasmtime-internal-cranelift.opt-level = 2 [profile.dev] incremental = false diff --git a/executor/codegen/data/host-fns.json b/executor/codegen/data/host-fns.json deleted file mode 100644 index ef96e7f..0000000 --- a/executor/codegen/data/host-fns.json +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "type": "enum", - "repr": "u8", - "name": "methods", - "values": { - "storage_read": 0, - "consume_fuel": 1, - "eth_call": 2, - "get_balance": 3, - "remaining_fuel_as_gen": 4, - "notify_nondet_disagreement": 5, - "consume_result": 6, - "notify_finished": 7 - } - }, - { - "type": "enum", - "repr": "u8", - "name": "errors", - "values": { - "ok": 0, - "absent": 1, - "forbidden": 2, - "out_of_storage_gas": 3 - } - }, - { - "type": "const", - "name": "current_major", - "repr": "u8", - "value": 0 - }, - { - "type": "const", - "name": "current_major_str", - "repr": "str", - "value": "v0.0.0" - } -] diff --git a/executor/crates/common/Cargo.lock b/executor/crates/common/Cargo.lock index 152337b..3fb2805 100644 --- a/executor/crates/common/Cargo.lock +++ b/executor/crates/common/Cargo.lock @@ -217,9 +217,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -527,6 +527,7 @@ dependencies = [ "dashmap", "genlayer_calldata", "genlayer_sdk", + "genvm_modules_interfaces", "hex", "libc", "num-bigint", @@ -544,6 +545,26 @@ dependencies = [ "tokio", ] +[[package]] +name = "genvm_modules_interfaces" +version = "0.1.0" +dependencies = [ + "anyhow", + "bytes", + "chrono", + "genlayer_calldata", + "num-bigint", + "num-traits", + "primitive-types", + "regex", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha3", + "tokio", +] + [[package]] name = "getrandom" version = "0.2.16" diff --git a/executor/crates/common/Cargo.toml b/executor/crates/common/Cargo.toml index 4e8e305..b7fa6a0 100644 --- a/executor/crates/common/Cargo.toml +++ b/executor/crates/common/Cargo.toml @@ -11,6 +11,7 @@ genlayer_calldata = { path = "../calldata" } genlayer_sdk = { path = "../sdk-rs", default-features = false, features = [ "arbitrary", ] } +genvm_modules_interfaces = { path = "../modules-interfaces" } anyhow = { version = "1.0.97", features = ["backtrace"] } arbitrary = "1.4.2" diff --git a/executor/crates/common/src/host_fns.rs b/executor/crates/common/src/host_fns.rs deleted file mode 100644 index b85596a..0000000 --- a/executor/crates/common/src/host_fns.rs +++ /dev/null @@ -1,128 +0,0 @@ -// This file is auto-generated. Do not edit! - -#![allow(dead_code, clippy::redundant_static_lifetimes)] - -use serde::{Deserialize, Serialize}; - -#[derive( - Debug, - PartialEq, - Clone, - Copy, - Serialize, - Deserialize, - ::genlayer_calldata::Encode, - ::genlayer_calldata::Decode, -)] -#[repr(u8)] -pub enum Methods { - StorageRead = 0, - ConsumeFuel = 1, - EthCall = 2, - GetBalance = 3, - RemainingFuelAsGen = 4, - NotifyNondetDisagreement = 5, - ConsumeResult = 6, - NotifyFinished = 7, -} - -impl Methods { - pub const SIZE: usize = 8; - pub fn value(self) -> u8 { - match self { - Methods::StorageRead => 0, - Methods::ConsumeFuel => 1, - Methods::EthCall => 2, - Methods::GetBalance => 3, - Methods::RemainingFuelAsGen => 4, - Methods::NotifyNondetDisagreement => 5, - Methods::ConsumeResult => 6, - Methods::NotifyFinished => 7, - } - } - pub fn str_snake_case(self) -> &'static str { - match self { - Methods::StorageRead => "storage_read", - Methods::ConsumeFuel => "consume_fuel", - Methods::EthCall => "eth_call", - Methods::GetBalance => "get_balance", - Methods::RemainingFuelAsGen => "remaining_fuel_as_gen", - Methods::NotifyNondetDisagreement => "notify_nondet_disagreement", - Methods::ConsumeResult => "consume_result", - Methods::NotifyFinished => "notify_finished", - } - } -} - -impl TryFrom for Methods { - type Error = (); - - fn try_from(value: u8) -> Result { - match value { - 0 => Ok(Methods::StorageRead), - 1 => Ok(Methods::ConsumeFuel), - 2 => Ok(Methods::EthCall), - 3 => Ok(Methods::GetBalance), - 4 => Ok(Methods::RemainingFuelAsGen), - 5 => Ok(Methods::NotifyNondetDisagreement), - 6 => Ok(Methods::ConsumeResult), - 7 => Ok(Methods::NotifyFinished), - _ => Err(()), - } - } -} -#[derive( - Debug, - PartialEq, - Clone, - Copy, - Serialize, - Deserialize, - ::genlayer_calldata::Encode, - ::genlayer_calldata::Decode, -)] -#[repr(u8)] -pub enum Errors { - Ok = 0, - Absent = 1, - Forbidden = 2, - OutOfStorageGas = 3, -} - -impl Errors { - pub const SIZE: usize = 4; - pub fn value(self) -> u8 { - match self { - Errors::Ok => 0, - Errors::Absent => 1, - Errors::Forbidden => 2, - Errors::OutOfStorageGas => 3, - } - } - pub fn str_snake_case(self) -> &'static str { - match self { - Errors::Ok => "ok", - Errors::Absent => "absent", - Errors::Forbidden => "forbidden", - Errors::OutOfStorageGas => "out_of_storage_gas", - } - } -} - -impl TryFrom for Errors { - type Error = (); - - fn try_from(value: u8) -> Result { - match value { - 0 => Ok(Errors::Ok), - 1 => Ok(Errors::Absent), - 2 => Ok(Errors::Forbidden), - 3 => Ok(Errors::OutOfStorageGas), - _ => Err(()), - } - } -} -pub const CURRENT_MAJOR: u8 = 0; -pub const CURRENT_MAJOR_STR: &'static str = "v0.0.0"; - -// EOF diff --git a/executor/crates/common/src/lib.rs b/executor/crates/common/src/lib.rs index 1ea6dcd..78fbe42 100644 --- a/executor/crates/common/src/lib.rs +++ b/executor/crates/common/src/lib.rs @@ -19,7 +19,7 @@ pub mod templater; pub mod version; pub mod expr; -pub mod host_fns; +pub use genvm_modules_interfaces::host_fns; pub mod util; #[cfg(not(debug_assertions))] diff --git a/executor/crates/modules-interfaces/Cargo.lock b/executor/crates/modules-interfaces/Cargo.lock index fabd90f..bf3b325 100644 --- a/executor/crates/modules-interfaces/Cargo.lock +++ b/executor/crates/modules-interfaces/Cargo.lock @@ -288,6 +288,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", + "sha3", "tokio", ] diff --git a/executor/crates/modules-interfaces/Cargo.toml b/executor/crates/modules-interfaces/Cargo.toml index 46e32c2..1a3a7c4 100644 --- a/executor/crates/modules-interfaces/Cargo.toml +++ b/executor/crates/modules-interfaces/Cargo.toml @@ -24,6 +24,7 @@ serde = { version = "1.0.219", features = ["rc", "derive"] } serde_bytes = "0.11.17" serde_derive = "1.0.219" serde_json = "1.0.140" +sha3 = "0.10" tokio = { version = "1.44.1", features = [ "rt", "rt-multi-thread", diff --git a/executor/crates/sdk-rs/src/abi/consts.rs b/executor/crates/sdk-rs/src/abi/consts.rs index e3d790f..93d2101 100644 --- a/executor/crates/sdk-rs/src/abi/consts.rs +++ b/executor/crates/sdk-rs/src/abi/consts.rs @@ -224,6 +224,9 @@ pub mod __VmError { impl OomRam { pub const fn val(&self) -> VmError { VmError(Cow::Borrowed("OOM RAM")) } + pub const fn prefix_(&self) -> &'static str { + "OOM RAM" + } pub const fn table(&self) -> VmError { VmError(Cow::Borrowed("OOM RAM table")) } pub const fn memory(&self) -> VmError { VmError(Cow::Borrowed("OOM RAM memory")) } pub const fn limit(&self) -> VmError { VmError(Cow::Borrowed("OOM RAM limit")) } @@ -232,6 +235,9 @@ pub mod __VmError { pub struct OomReceiptMessage; impl OomReceiptMessage { + pub const fn prefix_(&self) -> &'static str { + "OOM receipt message" + } pub const fn internal(&self) -> VmError { VmError(Cow::Borrowed("OOM receipt message internal")) } pub const fn external(&self) -> VmError { VmError(Cow::Borrowed("OOM receipt message external")) } } @@ -239,6 +245,9 @@ pub mod __VmError { pub struct OomReceipt; impl OomReceipt { + pub const fn prefix_(&self) -> &'static str { + "OOM receipt" + } pub const fn nondet_output(&self) -> VmError { VmError(Cow::Borrowed("OOM receipt nondet_output")) } pub const fn message(&self) -> OomReceiptMessage { OomReceiptMessage } } @@ -246,6 +255,9 @@ pub mod __VmError { pub struct OomFees; impl OomFees { + pub const fn prefix_(&self) -> &'static str { + "OOM fees" + } pub const fn internal(&self) -> VmError { VmError(Cow::Borrowed("OOM fees internal")) } pub const fn external(&self) -> VmError { VmError(Cow::Borrowed("OOM fees external")) } } @@ -254,6 +266,9 @@ pub mod __VmError { impl Oom { pub const fn val(&self) -> VmError { VmError(Cow::Borrowed("OOM")) } + pub const fn prefix_(&self) -> &'static str { + "OOM" + } pub const fn storage(&self) -> VmError { VmError(Cow::Borrowed("OOM storage")) } pub const fn ram(&self) -> OomRam { OomRam } pub const fn receipt(&self) -> OomReceipt { OomReceipt } @@ -263,6 +278,9 @@ pub mod __VmError { pub struct InvalidContractWasm; impl InvalidContractWasm { + pub const fn prefix_(&self) -> &'static str { + "invalid_contract wasm" + } pub const fn validating(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract wasm validating")) } pub const fn linking(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract wasm linking")) } pub const fn entrypoint(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract wasm entrypoint")) } @@ -272,6 +290,9 @@ pub mod __VmError { impl InvalidContract { pub const fn val(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract")) } + pub const fn prefix_(&self) -> &'static str { + "invalid_contract" + } pub const fn absent_runner_comment(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract absent_runner_comment")) } pub const fn not_utf8_text(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract not_utf8_text")) } pub const fn malformed_runner(&self) -> VmError { VmError(Cow::Borrowed("invalid_contract malformed_runner")) } @@ -324,6 +345,54 @@ impl VmError { pub const fn host() -> __VmError::Host { __VmError::Host } } +#[rustfmt::skip] +impl VmError { + /// Whether `s` is a well-formed `vm_error` path. + pub fn is_valid_(s: &str) -> bool { + if matches!(s, + "timeout" | + "absent" | + "OOM" | + "OOM RAM" | + "OOM RAM table" | + "OOM RAM memory" | + "OOM RAM limit" | + "OOM storage" | + "OOM receipt nondet_output" | + "OOM receipt message internal" | + "OOM receipt message external" | + "OOM fees internal" | + "OOM fees external" | + "invalid_contract" | + "invalid_contract absent_runner_comment" | + "invalid_contract not_utf8_text" | + "invalid_contract malformed_runner" | + "invalid_contract major_mismatch" | + "invalid_contract wasm validating" | + "invalid_contract wasm linking" | + "invalid_contract wasm entrypoint" + ) { + return true; + } + if let Some(rest) = s.strip_prefix("exit_code ") { + if rest.parse::().is_ok_and(|v| v.to_string() == rest) { + return true; + } + } + if let Some(rest) = s.strip_prefix("wasm_trap ") { + if !rest.is_empty() { + return true; + } + } + if let Some(rest) = s.strip_prefix("host ") { + if !rest.is_empty() { + return true; + } + } + false + } +} + pub const EVENT_MAX_TOPICS: u32 = 4; // EOF diff --git a/executor/src/exe/precompile.rs b/executor/src/exe/precompile.rs index ac4e832..26ac256 100644 --- a/executor/src/exe/precompile.rs +++ b/executor/src/exe/precompile.rs @@ -15,6 +15,48 @@ pub struct Args { info: bool, } +/// Writes `data` to a uniquely named sibling of `path`, then renames it onto +/// `path`. +/// +/// The reader `deserialize_file`s whatever sits at the final path without +/// validating it, so a crash mid-write must not leave a truncated module there. +/// The temp name mixes pid, an in-process counter and the wall clock, so +/// concurrent writers never pick the same one; the fsync keeps the rename from +/// exposing a name whose contents are still only in page cache. +fn write_atomically(path: &std::path::Path, data: &[u8]) -> anyhow::Result<()> { + use std::io::Write as _; + + static COUNTER: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); + + let stamp = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map_or(0, |since_epoch| since_epoch.as_nanos()); + let mut tmp_name = path + .file_name() + .expect("precompiled wasm path has no file name") + .to_owned(); + tmp_name.push(format!( + ".tmp-{}-{}-{stamp}", + std::process::id(), + COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed), + )); + let tmp_path = path.with_file_name(tmp_name); + + let write_tmp = || -> std::io::Result<()> { + let mut file = std::fs::File::create(&tmp_path)?; + file.write_all(data)?; + file.sync_all()?; + std::fs::rename(&tmp_path, path) + }; + + if let Err(e) = write_tmp() { + let _ = std::fs::remove_file(&tmp_path); + return Err(e).with_context(|| format!("writing {tmp_path:?} and renaming it to {path:?}")); + } + + Ok(()) +} + fn compile_single_file_single_mode( result_path: &std::path::Path, engine: &wasmtime::Engine, @@ -40,8 +82,7 @@ fn compile_single_file_single_mode( let sz = precompiled.len(); - std::fs::write(result_path, precompiled) - .with_context(|| format!("writing to {result_path:?}"))?; + write_atomically(result_path, &precompiled)?; log_info!("size" = sz, result:? = result_path, engine = engine_type, runner:? = runner_path, runner_path:? = path_in_runner, duration:? = time_start.elapsed(); "wasm writing done"); diff --git a/executor/src/exe/run.rs b/executor/src/exe/run.rs index 87b2758..dd2fae3 100644 --- a/executor/src/exe/run.rs +++ b/executor/src/exe/run.rs @@ -13,6 +13,45 @@ use genvm::{ const EXECUTION_DATA_HELP: &str = "path to file containing encoded execution data (use '-' for stdin, 'fd://N' for file descriptor N)"; +fn fill_nested_fee_buckets( + is_nested: bool, + max_bucket_no: usize, + bucket_totals: &mut Vec, +) { + if is_nested && bucket_totals.is_empty() { + bucket_totals.resize(max_bucket_no + 1, primitive_types::U256::zero()); + } +} + +/// Rejects permissions a nested run cannot act on whatever its caller derived. +/// +/// A delegated run has no module connection, no fee allocation and no writable +/// storage, so accepting one of these would let it start and then fail at the +/// first use. The manager checks the same thing when it builds the envelope; +/// this executor does not get to assume that whoever spawned it did. +fn check_nested_permissions( + permissions: genvm_modules_interfaces::NestedPermissions, +) -> Result<()> { + use genvm_modules_interfaces::NestedPermissions as P; + + for (bit, name) in [ + (P::SPAWN_NONDET, "spawn_nondet"), + (P::WRITE_STORAGE, "write_storage"), + (P::SEND_MESSAGES, "send_messages"), + ( + P::USE_BALANCE_FOR_MESSAGE_FEES, + "use_balance_for_message_fees", + ), + ] { + anyhow::ensure!( + !permissions.contains(bit), + "nested execution data asserts `{name}`, which a run crossing a major boundary never carries" + ); + } + + Ok(()) +} + #[derive(clap::Args, Debug)] pub struct Args { #[arg( @@ -83,6 +122,17 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { let message = &execution_data.message; let host_data = rt::parse_host_data(&execution_data)?; + let can_write_storage = match &execution_data.nested { + Some(nested) => { + check_nested_permissions(nested.permissions)?; + nested + .permissions + .contains(genvm_modules_interfaces::NestedPermissions::WRITE_STORAGE) + } + None => args.permissions.contains('w'), + }; + let is_nested = execution_data.nested.is_some(); + let runtime = config .base .create_rt() @@ -109,7 +159,7 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { .collect::>(); metrics.hosts = Box::from(metrics_for_each_host); - let bucket_totals = execution_data + let mut bucket_totals = execution_data .bucket_totals .iter() .map(|bi| { @@ -138,6 +188,7 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { .max() .unwrap_or(0); + fill_nested_fee_buckets(is_nested, max_bucket_no as usize, &mut bucket_totals); anyhow::ensure!( (max_bucket_no as usize) < bucket_totals.len(), "fees config references bucket {max_bucket_no} but only {} bucket(s) provided", @@ -154,6 +205,9 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { config.fees.clone(), execution_data.gas_data.clone(), )?, + det_fuel_budget: genvm::rt::DetFuelBudget::new( + execution_data.nested.as_ref().map(|n| n.remaining_det_fuel), + ), llm_consumption: tokio::sync::Mutex::new(primitive_types::U256::zero()), }); @@ -163,7 +217,11 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { .enumerate() .map(|(id, uri)| { let metrics = shared_data.gep(|x| &x.metrics.hosts[id]); - genvm::Host::connect(uri, metrics) + let hello_data = execution_data + .host_hello_data + .get(id) + .map_or(&[][..], bytes::Bytes::as_ref); + genvm::Host::connect(uri, metrics, hello_data) .with_context(|| format!("connecting host {id} to {uri}")) }) .collect::>()?; @@ -183,8 +241,12 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { // Charge the per-bucket up-front fees now that the hosts are connected. If a // bucket cannot cover its `subtract_on_start`, report the resulting VM error // to the host as a normal receipt instead of crashing during setup. - if let Some(insufficient_err) = runtime.block_on(shared_data.data_fees_limit.consume_initial()) - { + let insufficient_err = if is_nested { + None + } else { + runtime.block_on(shared_data.data_fees_limit.consume_initial()) + }; + if let Some(insufficient_err) = insufficient_err { let host_for = |method: genvm::host::host_fns::Methods| -> usize { let m = method as usize; if m < method_hosts.len() { @@ -216,9 +278,9 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { hosts[host_for(genvm::host::host_fns::Methods::ConsumeResult)] .consume_result(&result) .context("consume result")?; - hosts[host_for(genvm::host::host_fns::Methods::NotifyFinished)] - .notify_finished() - .context("notify finished")?; + for host in &mut hosts { + host.flush().context("flush host before exit")?; + } runtime.shutdown_timeout(std::time::Duration::from_millis(30)); @@ -251,6 +313,8 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { gas_data: execution_data.gas_data.clone(), initial_time_units_allocation: execution_data.initial_time_units_allocation, leader_nondet_results: execution_data.leader_nondet_results.clone(), + memory_limit: execution_data.nested.as_ref().map(|n| n.memory_limit), + can_write_storage, }, host_data, shared_data, diff --git a/executor/src/host/mod.rs b/executor/src/host/mod.rs index b8eb458..27296a1 100644 --- a/executor/src/host/mod.rs +++ b/executor/src/host/mod.rs @@ -38,9 +38,9 @@ impl Host { pub fn new(sock: Box, metrics: sync::DArc) -> Host { Self { sock, metrics } } - pub fn connect(addr: &str, metrics: sync::DArc) -> Result { + pub fn connect(addr: &str, metrics: sync::DArc, hello_data: &[u8]) -> Result { const UNIX: &str = "unix://"; - let sock: Box = if let Some(addr_suff) = addr.strip_prefix(UNIX) { + let mut sock: Box = if let Some(addr_suff) = addr.strip_prefix(UNIX) { Box::new(bufreaderwriter::seq::BufReaderWriterSeq::new_writer( std::os::unix::net::UnixStream::connect(std::path::Path::new(addr_suff)) .with_context(|| format!("connecting to {addr}"))?, @@ -57,6 +57,12 @@ impl Host { .with_context(|| format!("connecting to {addr}"))?, )) }; + if !hello_data.is_empty() { + sock.write_all(hello_data) + .with_context(|| format!("writing host hello to {addr}"))?; + sock.flush() + .with_context(|| format!("flushing host hello to {addr}"))?; + } Ok(Host { sock, metrics }) } } @@ -134,6 +140,10 @@ pub fn write_result_to_sock(sock: &mut dyn Sock, res: &Result) -> Re pub struct LockedSlotsSet(Box<[SlotID]>); impl LockedSlotsSet { + pub fn empty() -> Self { + Self(Box::new([])) + } + pub fn contains(&self, slot: SlotID) -> bool { self.0.binary_search(&slot).is_ok() } @@ -169,6 +179,7 @@ impl FullResult { Self { reported: genvm_modules_interfaces::ReportedResult { execution_hash: bytes::Bytes::new(), + small_hash: bytes::Bytes::new(), kind: genvm_modules_interfaces::ResultCode::InternalError, data: calldata::Value::Str(msg).into(), backtrace: None, @@ -259,9 +270,23 @@ impl FullResult { } let execution_hash = bytes::Bytes::from(sha3::Digest::finalize(hasher.0).to_vec()); + // The route-invariant half of the same outcome. A caller in another + // executor folds this, exactly as an in-process caller folds + // `RunResult::small_hash`, so the two routes agree. + let small_hash = bytes::Bytes::from( + genvm_modules_interfaces::small_hash( + convert_result_code(rt_result.kind), + &rt_result.data, + &rt_result.subvm_hashes, + &rt_result.wasm_store_hashes, + ) + .to_vec(), + ); + Self { reported: genvm_modules_interfaces::ReportedResult { execution_hash, + small_hash, data: rt_result.data, backtrace: rt_result.backtrace.map(convert_backtrace), @@ -583,6 +608,39 @@ impl Host { Ok(()) } + pub fn resolve_callcontract_executor( + &mut self, + contract_address: calldata::Address, + state_mode: StorageType, + advisory_major: u8, + ) -> Result> { + log_trace!("resolve_callcontract_executor"); + + let mut sock = self.lock_sock(); + sock.write_all(&[host_fns::Methods::ResolveCallcontractExecutor as u8])?; + sock.write_all(&contract_address.raw())?; + sock.write_all(&[state_mode as u8, advisory_major])?; + + handle_host_error(&mut **sock, "resolve_callcontract_executor")?; + let encoded = read_bytes(&mut **sock, "resolve_callcontract_executor result")?; + calldata::decode_obj(&encoded).context("decoding resolve_callcontract_executor result") + } + + pub fn run_nested( + &mut self, + envelope: &genvm_modules_interfaces::NestedRunEnvelope, + ) -> Result { + log_trace!("run_nested"); + + let encoded = calldata::encode_obj(envelope); + let mut sock = self.lock_sock(); + sock.write_all(&[host_fns::Methods::RunNested as u8])?; + write_slice(&mut **sock, &encoded)?; + + let reply = read_bytes(&mut **sock, "run_nested result")?; + calldata::decode_obj(&reply).context("decoding run_nested result") + } + pub fn consume_result(&mut self, res: &Result) -> Result<()> { log_trace!("consume_result"); @@ -611,21 +669,6 @@ impl Host { Ok(()) } - pub fn notify_finished(&mut self) -> Result<()> { - log_trace!("notify_finished"); - - let mut sock = self.lock_sock(); - sock.write_all(&[host_fns::Methods::NotifyFinished as u8])?; - sock.flush()?; - - let mut int_buf = [0; 1]; - sock.read_exact(&mut int_buf)?; - - log_debug!("notify_finished: ACK"); - - Ok(()) - } - pub fn consume_fuel(&mut self, gas: primitive_types::U256) -> Result<()> { log_trace!("consume_fuel"); @@ -695,6 +738,10 @@ impl Host { Ok(()) } + + pub fn flush(&mut self) -> Result<()> { + self.lock_sock().flush().context("flushing host socket") + } } pub struct MultiHost { @@ -718,4 +765,190 @@ impl MultiHost { }; self.hosts[idx].lock().await } + + pub async fn flush_all(&self) -> Result<()> { + for host in &self.hosts { + host.lock().await.flush()?; + } + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::{Read, Write}; + use std::os::unix::net::UnixListener; + use std::path::PathBuf; + use std::thread; + + fn metrics() -> sync::DArc { + sync::DArc::new(Metrics::default()) + } + + fn bind_socket(name: &str) -> (PathBuf, String, UnixListener) { + let suffix = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .expect("system time before epoch") + .as_nanos(); + let path = std::env::temp_dir().join(format!( + "genvm-host-{name}-{}-{suffix}.sock", + std::process::id() + )); + let _ = std::fs::remove_file(&path); + let listener = UnixListener::bind(&path).expect("bind unix listener"); + let addr = format!("unix://{}", path.display()); + (path, addr, listener) + } + + fn connect_consume_fuel_and_read(hello_data: &[u8], read_len: usize) -> Vec { + let (path, addr, listener) = bind_socket("hello"); + let reader = thread::spawn(move || { + let (mut stream, _) = listener.accept().expect("accept host connection"); + let mut buf = vec![0; read_len]; + stream.read_exact(&mut buf).expect("read host bytes"); + buf + }); + + let mut host = Host::connect(&addr, metrics(), hello_data).expect("connect host"); + host.consume_fuel(primitive_types::U256::from(7)) + .expect("consume fuel"); + let buf = reader.join().expect("reader thread"); + let _ = std::fs::remove_file(path); + buf + } + + #[test] + fn writes_hello_before_first_method_byte() { + let hello_data = b"hello-prefix"; + let buf = connect_consume_fuel_and_read(hello_data, hello_data.len() + 1 + 32); + + assert_eq!(&buf[..hello_data.len()], hello_data); + assert_eq!(buf[hello_data.len()], host_fns::Methods::ConsumeFuel as u8); + } + + #[test] + fn short_hello_vector_means_empty_for_missing_host_index() { + let host_hello_data = [bytes::Bytes::from_static(b"host-zero-only")]; + let hello_data = host_hello_data.get(1).map_or(&[][..], bytes::Bytes::as_ref); + let buf = connect_consume_fuel_and_read(hello_data, 1 + 32); + + assert_eq!(buf[0], host_fns::Methods::ConsumeFuel as u8); + } + + fn resolve_reply(reply: Option) -> Option { + let (path, addr, listener) = bind_socket("resolve"); + let server = thread::spawn(move || { + let (mut stream, _) = listener.accept().expect("accept host connection"); + let mut request = [0; 23]; + stream + .read_exact(&mut request) + .expect("read resolve request"); + assert_eq!( + request[0], + host_fns::Methods::ResolveCallcontractExecutor as u8 + ); + assert_eq!(&request[1..21], &[7; 20]); + assert_eq!(request[21], StorageType::LatestFinal as u8); + assert_eq!(request[22], 2); + + let encoded = calldata::encode_obj(&reply); + stream + .write_all(&[host_fns::Errors::Ok as u8]) + .expect("write host status"); + stream + .write_all(&(encoded.len() as u32).to_le_bytes()) + .expect("write resolve length"); + stream.write_all(&encoded).expect("write resolve reply"); + }); + + let mut host = Host::connect(&addr, metrics(), &[]).expect("connect host"); + let result = host + .resolve_callcontract_executor( + calldata::Address::from([7; 20]), + StorageType::LatestFinal, + 2, + ) + .expect("resolve executor"); + server.join().expect("server thread"); + let _ = std::fs::remove_file(path); + result + } + + #[test] + fn resolve_callcontract_executor_preserves_null_and_empty_payload() { + assert_eq!(resolve_reply(None), None); + assert_eq!( + resolve_reply(Some(bytes::Bytes::new())), + Some(bytes::Bytes::new()) + ); + } + + #[test] + fn run_nested_uses_length_prefixed_calldata_frames() { + let (path, addr, listener) = bind_socket("nested"); + let server = thread::spawn(move || { + let (mut stream, _) = listener.accept().expect("accept host connection"); + let mut method = [0; 1]; + stream.read_exact(&mut method).expect("read nested method"); + assert_eq!(method[0], host_fns::Methods::RunNested as u8); + + let mut len = [0; 4]; + stream.read_exact(&mut len).expect("read nested length"); + let mut body = vec![0; u32::from_le_bytes(len) as usize]; + stream.read_exact(&mut body).expect("read nested body"); + let envelope: genvm_modules_interfaces::NestedRunEnvelope = + calldata::decode_obj(&body).expect("decode nested envelope"); + assert_eq!( + envelope.routing_payload, + bytes::Bytes::from_static(b"route") + ); + assert_eq!(envelope.remaining_recursion, 4); + + let reply = genvm_modules_interfaces::NestedRunReply { + result: genvm_modules_interfaces::NestedRunResult { + kind: genvm_modules_interfaces::ResultCode::Return, + data: calldata::Value::Null.into(), + }, + small_hash: bytes::Bytes::from(vec![9; 32]), + effect_free: true, + }; + let encoded = calldata::encode_obj(&reply); + stream + .write_all(&(encoded.len() as u32).to_le_bytes()) + .expect("write nested length"); + stream.write_all(&encoded).expect("write nested reply"); + }); + + let envelope = genvm_modules_interfaces::NestedRunEnvelope { + routing_payload: bytes::Bytes::from_static(b"route"), + calldata: bytes::Bytes::from_static(b"call"), + message: genvm_modules_interfaces::MessageData { + contract_address: calldata::Address::zero(), + sender_address: calldata::Address::zero(), + origin_address: calldata::Address::zero(), + signer_address: calldata::Address::zero(), + chain_id: num_bigint::BigInt::ZERO, + value: num_bigint::BigInt::ZERO, + is_init: false, + datetime: chrono::DateTime::parse_from_rfc3339("2026-07-28T00:00:00Z") + .unwrap() + .to_utc(), + }, + stack: Vec::new(), + permissions: genvm_modules_interfaces::NestedPermissions::DETERMINISTIC, + state_mode: genvm_modules_interfaces::NestedStorageType::LatestNonFinal, + topmost_runner_id: genvm_modules_interfaces::NestedRunnerId("contract".to_owned()), + remaining_recursion: 4, + remaining_det_fuel: primitive_types::U256::from(10), + memory_limit: 1024, + }; + let mut host = Host::connect(&addr, metrics(), &[]).expect("connect host"); + let reply = host.run_nested(&envelope).expect("run nested"); + assert!(reply.effect_free); + assert_eq!(reply.small_hash, bytes::Bytes::from(vec![9; 32])); + + server.join().expect("server thread"); + let _ = std::fs::remove_file(path); + } } diff --git a/executor/src/lib.rs b/executor/src/lib.rs index 10993a3..1223046 100644 --- a/executor/src/lib.rs +++ b/executor/src/lib.rs @@ -68,6 +68,11 @@ pub struct CreateSupervisorNamedArgs { pub gas_data: std::collections::BTreeMap, pub initial_time_units_allocation: u32, pub leader_nondet_results: Option>, + pub memory_limit: Option, + /// Whether this execution holds the storage-write permission, however it + /// was granted. Slot locks bound what a run may write, so this -- not the + /// route the run arrived by -- decides whether they are read. + pub can_write_storage: bool, } pub fn create_supervisor( @@ -113,7 +118,8 @@ pub fn create_supervisor( )), }; - let limiter_det = rt::memlimiter::Limiter::new("det"); + let limiter_det = + rt::memlimiter::Limiter::with_limit("det", named.memory_limit.unwrap_or(u32::MAX)); let storage_host_idx = if (host::host_fns::Methods::StorageRead as usize) < named.method_hosts.len() { @@ -122,13 +128,20 @@ pub fn create_supervisor( 0 }; - let locked_slots = hosts[storage_host_idx] - .get_locked_slots_for_sender( - calldata::Address::from(message.contract_address.raw()), - calldata::Address::from(message.sender_address.raw()), - &limiter_det, - ) - .context("reading locked slots")?; + // Slot locks only ever reject a write, so a run that cannot write does not + // need them -- and paying to read a set it can never consult would charge + // memory for nothing. + let locked_slots = if named.can_write_storage { + hosts[storage_host_idx] + .get_locked_slots_for_sender( + calldata::Address::from(message.contract_address.raw()), + calldata::Address::from(message.sender_address.raw()), + &limiter_det, + ) + .context("reading locked slots")? + } else { + host::LockedSlotsSet::empty() + }; let multi_host = host::MultiHost::new(hosts, named.method_hosts); @@ -149,12 +162,13 @@ pub fn create_supervisor( fn convert_message_data( message: genvm_modules_interfaces::MessageData, + stack: Vec, ) -> genlayer_sdk::abi::entry::MessageData { genlayer_sdk::abi::entry::MessageData { contract_address: message.contract_address, sender_address: message.sender_address, origin_address: message.origin_address, - stack: Vec::new(), + stack, chain_id: message.chain_id, value: message.value, is_init: message.is_init, @@ -162,6 +176,41 @@ fn convert_message_data( } } +fn convert_nested_storage_type( + state_mode: genvm_modules_interfaces::NestedStorageType, +) -> public_abi::StorageType { + match state_mode { + genvm_modules_interfaces::NestedStorageType::Default => public_abi::StorageType::Default, + genvm_modules_interfaces::NestedStorageType::LatestFinal => { + public_abi::StorageType::LatestFinal + } + genvm_modules_interfaces::NestedStorageType::LatestNonFinal => { + public_abi::StorageType::LatestNonFinal + } + } +} + +fn convert_nested_permissions( + permissions: genvm_modules_interfaces::NestedPermissions, + state_mode: public_abi::StorageType, + topmost_runner_id: runners::Id, +) -> wasi::base::Config { + use genvm_modules_interfaces::NestedPermissions as P; + + wasi::base::Config { + needs_error_fingerprint: true, + is_deterministic: permissions.contains(P::DETERMINISTIC), + can_read_storage: permissions.contains(P::READ_STORAGE), + can_write_storage: permissions.contains(P::WRITE_STORAGE), + can_spawn_nondet: permissions.contains(P::SPAWN_NONDET), + can_send_messages: permissions.contains(P::SEND_MESSAGES), + can_call_others: permissions.contains(P::CALL_OTHERS), + can_register_runners: permissions.contains(P::REGISTER_RUNNERS), + state_mode, + topmost_runner_id, + } +} + fn convert_on(on: genvm_modules_interfaces::On) -> genlayer_sdk::abi::gl_call::On { match on { genvm_modules_interfaces::On::Finalized => genlayer_sdk::abi::gl_call::On::Finalized, @@ -231,26 +280,40 @@ fn convert_message_allocation_node( } pub async fn run_with_impl( - entry_data: genvm_modules_interfaces::ExecutionData, + mut entry_data: genvm_modules_interfaces::ExecutionData, supervisor: Arc, permissions: &str, ) -> anyhow::Result { let storage_pages_limit = supervisor.get_storage_limiter(); + // Everything a nested run imports arrives together or not at all, so unpack + // it once here rather than probing the same option at four call sites. + let (imported_state_mode, imported_permissions, imported_runner_id, stack) = + match entry_data.nested.take() { + Some(nested) => ( + Some(convert_nested_storage_type(nested.state_mode)), + Some(nested.permissions), + Some(nested.topmost_runner_id), + nested.stack, + ), + None => (None, None, None, Vec::new()), + }; + let storage_read_mode = imported_state_mode.unwrap_or(public_abi::StorageType::LatestNonFinal); + let mut topmost_storage = rt::vm::storage::Storage::new( entry_data.message.contract_address, storage_pages_limit, wasi::genlayer_sdk::StorageHostHolder( supervisor.host.clone(), wasi::genlayer_sdk::ReadToken { - mode: public_abi::StorageType::LatestNonFinal, + mode: storage_read_mode, account: entry_data.message.contract_address, }, ), ); let topmost_runner_id = match async { - anyhow::Ok(if let Some(code) = &entry_data.code { + let id = if let Some(code) = &entry_data.code { log_debug!("using provided code for execution"); topmost_storage.write_code(code).await?; @@ -280,10 +343,21 @@ pub async fn run_with_impl( runners::Id::Chain { address: entry_data.message.contract_address, - on: runners::ChainState::Accepted, + // No code was supplied, so nothing seeded a deploy-state cell: + // such an id could never be loaded from chain. + on: runners::ChainState::for_vm(false, storage_read_mode), slot: code_slot, } - }) + }; + + match &imported_runner_id { + Some(imported) => { + rt::supervisor::actions::resolve_runner_id(&supervisor, &id, &imported.0) + .await + .context("resolving imported topmost runner id") + } + None => Ok(id), + } } .await { @@ -300,11 +374,13 @@ pub async fn run_with_impl( }; let data_fees_limit = supervisor.shared_data.gep(|x| &x.data_fees_limit); - - let essential_data = Box::new(wasi::genlayer_sdk::SingleVMData { - depth: 0, - // Permission model: doc/website/src/spec/03-vm/05-permissions.rst - conf: wasi::base::Config { + let conf = match imported_permissions { + Some(imported) => convert_nested_permissions( + imported, + imported_state_mode.unwrap_or(public_abi::StorageType::Default), + topmost_runner_id, + ), + None => wasi::base::Config { needs_error_fingerprint: true, is_deterministic: true, can_read_storage: true, @@ -316,8 +392,22 @@ pub async fn run_with_impl( state_mode: crate::public_abi::StorageType::Default, topmost_runner_id, }, + }; + + let essential_data = Box::new(wasi::genlayer_sdk::SingleVMData { + // A budget minted elsewhere is a remainder, not an authority: a chain + // root on a line with a looser limit must not buy depth this executor + // does not offer. + remaining_recursion: entry_data + .remaining_recursion + .map_or(public_abi::top_limits::VM_RECURSION, |supplied| { + supplied.min(public_abi::top_limits::VM_RECURSION) + }), + signer_address: entry_data.message.signer_address, + // Permission model: docs/website/src/spec/03-vm/02-meta-properties.rst + conf, message_data: ExtendedMessage { - message: convert_message_data(entry_data.message), + message: convert_message_data(entry_data.message, stack), entry_kind: public_abi::EntryKind::Main, entry_data: entry_data.calldata, entry_stage_data: calldata::Value::Null, @@ -431,13 +521,11 @@ pub async fn run_with( host.consume_result(&res).context("consume result")?; } - { - let mut host = supervisor - .host - .lock_for(host::host_fns::Methods::NotifyFinished) - .await; - host.notify_finished().context("notify finished")?; - } + supervisor + .host + .flush_all() + .await + .context("flush hosts before exit")?; host::all_useful_work_done(); diff --git a/executor/src/rt/memlimiter.rs b/executor/src/rt/memlimiter.rs index 384f90b..6054c0a 100644 --- a/executor/src/rt/memlimiter.rs +++ b/executor/src/rt/memlimiter.rs @@ -50,12 +50,16 @@ impl Limiter { } pub fn new(id: &'static str) -> Self { + Self::with_limit(id, u32::MAX) + } + + pub fn with_limit(id: &'static str, limit: u32) -> Self { Self(Arc::new(LimiterInner { id, consumed_memory: AtomicU32::new(0), data: Arc::new(LimiterInnerData { - remaining_memory: Arc::new(AtomicU32::new(u32::MAX)), - least_remaining_memory: Arc::new(AtomicU32::new(u32::MAX)), + remaining_memory: Arc::new(AtomicU32::new(limit)), + least_remaining_memory: Arc::new(AtomicU32::new(limit)), }), })) } diff --git a/executor/src/rt/mod.rs b/executor/src/rt/mod.rs index c26a914..733c857 100644 --- a/executor/src/rt/mod.rs +++ b/executor/src/rt/mod.rs @@ -46,6 +46,28 @@ impl DetNondet { } } +pub struct DetFuelBudget(tokio::sync::Mutex>); + +impl DetFuelBudget { + pub fn new(initial: Option) -> Self { + Self(tokio::sync::Mutex::new(initial)) + } + + async fn remaining(&self, host_remaining: primitive_types::U256) -> primitive_types::U256 { + match *self.0.lock().await { + Some(imported) => imported.min(host_remaining), + None => host_remaining, + } + } + + async fn consume(&self, consumed: primitive_types::U256) { + let mut budget = self.0.lock().await; + if let Some(remaining) = budget.as_mut() { + *remaining = remaining.saturating_sub(consumed); + } + } +} + /// basic data that is shared across all VMs pub struct SharedData { pub is_sync: bool, @@ -53,9 +75,23 @@ pub struct SharedData { pub debug_mode: genvm_common::DebugMode, pub metrics: crate::Metrics, pub data_fees_limit: fees::DataLimit, + pub det_fuel_budget: DetFuelBudget, pub llm_consumption: tokio::sync::Mutex, } +impl SharedData { + pub async fn remaining_det_fuel( + &self, + host_remaining: primitive_types::U256, + ) -> primitive_types::U256 { + self.det_fuel_budget.remaining(host_remaining).await + } + + pub async fn consume_det_fuel(&self, consumed: primitive_types::U256) { + self.det_fuel_budget.consume(consumed).await; + } +} + pub fn parse_host_data( zelf: &genvm_modules_interfaces::ExecutionData, ) -> anyhow::Result { @@ -106,6 +142,25 @@ async fn spawn_apply_run_inner( vm.run().await } +#[cfg(test)] +mod tests { + use super::*; + + #[tokio::test] + async fn imported_deterministic_fuel_is_the_initial_budget() { + let budget = DetFuelBudget::new(Some(primitive_types::U256::from(10))); + assert_eq!( + budget.remaining(primitive_types::U256::from(20)).await, + primitive_types::U256::from(10) + ); + budget.consume(primitive_types::U256::from(3)).await; + assert_eq!( + budget.remaining(primitive_types::U256::from(20)).await, + primitive_types::U256::from(7) + ); + } +} + use anyhow::Context; use genvm_common::log_debug; diff --git a/executor/src/rt/supervisor/actions.rs b/executor/src/rt/supervisor/actions.rs index 74357df..dbaa231 100644 --- a/executor/src/rt/supervisor/actions.rs +++ b/executor/src/rt/supervisor/actions.rs @@ -416,6 +416,17 @@ impl Ctx<'_, '_> { return Ok(None); }; + // `deserialize_file` below trusts the file as native code without looking + // at the wasm it was built from, so only ids the precompiler can actually + // have written may derive a path here. `precompile` only ever emits + // artifacts for runners listed in `all.json`. Every other id must fall + // through to a normal compile instead of picking up whatever happens to + // sit at that path, notably `custom:`, which an attacker chooses + // via RegisterRunner and which parses as a plain `name:hash` pair. + if !self.supervisor.runner_cache.has_in_all(id, hash) { + return Ok(None); + } + let special_name = caching::path_in_zip_to_hash(path); let Some(cache_dir) = &self.supervisor.wasm_mod_cache.cache_dir else { return Ok(None); @@ -435,7 +446,7 @@ impl Ctx<'_, '_> { cache_dir.set_extension(caching::DET_NON_DET_PRECOMPILED_SUFFIX.non_det); let non_det_mod = cache_dir; - if !det_mod.exists() { + if !non_det_mod.exists() { return Ok(None); } diff --git a/executor/src/rt/supervisor/mod.rs b/executor/src/rt/supervisor/mod.rs index 6385f23..c928f98 100644 --- a/executor/src/rt/supervisor/mod.rs +++ b/executor/src/rt/supervisor/mod.rs @@ -364,7 +364,7 @@ pub async fn spawn( vm: Box, limiter: rt::memlimiter::Limiter, ) -> std::result::Result, rt::SpawnError> { - if vm.depth >= public_abi::top_limits::VM_RECURSION { + if vm.remaining_recursion == 0 { return Err(rt::SpawnError { error: rt::errors::Error::vm(public_abi::VmError::oom().val()).into(), state: Box::new(rt::SpawnErrorState::Unspawned(vm)), diff --git a/executor/src/rt/vm/mod.rs b/executor/src/rt/vm/mod.rs index d28e4a8..49f4a2b 100644 --- a/executor/src/rt/vm/mod.rs +++ b/executor/src/rt/vm/mod.rs @@ -1,6 +1,5 @@ use crate::{domain, public_abi, rt, wasi}; -use genlayer_calldata::codec::Encode; use genlayer_sdk::abi; use genvm_common::*; use itertools::Itertools; @@ -288,46 +287,35 @@ impl calldata::Writer for &mut Sha3Writer { } impl RunResult { - fn small_hash_impl(&self) -> std::result::Result<[u8; 32], std::convert::Infallible> { - use sha3::Digest; - - let mut hasher = Sha3Writer(sha3::Sha3_256::new()); + /// Fingerprint an in-process caller folds for this child. + /// + /// Deliberately the same definition a caller in another executor folds for a + /// child reached over the nested protocol (see + /// [`genvm_modules_interfaces::small_hash`]) -- if the two ever drift, the + /// same call hashes differently depending on how the host routed it. + pub fn small_hash(&self) -> [u8; 32] { + use genvm_modules_interfaces::{small_hash, ResultCode}; + use sha3::Digest as _; - let mut enc = calldata::Encoder::new(&mut hasher); + let subvm_hashes = self.vm_data.det_subvm_hashes.clone().finalize(); + let wasm_store_hashes = &self.wasm_store_hashes; - enc.start_map(4)?; - enc.push_map_k("kind")?; - match &self.run_ok { - RunOk::Return(_) => enc.push_str("Return")?, - RunOk::UserError(_) => enc.push_str("UserError")?, - RunOk::VMError(_, _) => enc.push_str("VMError")?, - } - enc.push_map_k("result")?; match &self.run_ok { RunOk::Return(buf) => { - buf.encode(&mut enc)?; + small_hash(ResultCode::Return, buf, &subvm_hashes, wasm_store_hashes) } - RunOk::UserError(buf) => { - enc.push_str(buf)?; - } - RunOk::VMError(data, _) => { - enc.push_str(&data.0)?; - } - } - - enc.push_map_k("subvm_hashes")?; - enc.push_bytes(&self.vm_data.det_subvm_hashes.clone().finalize())?; - - enc.push_map_k("wasm_store_hashes")?; - self.wasm_store_hashes.encode(&mut enc)?; - - Ok(hasher.0.finalize().into()) - } - - pub fn small_hash(&self) -> [u8; 32] { - match self.small_hash_impl() { - Ok(hash) => hash, - Err(e) => match e {}, + RunOk::UserError(message) => small_hash( + ResultCode::UserError, + &calldata::Value::Str(message.clone()), + &subvm_hashes, + wasm_store_hashes, + ), + RunOk::VMError(data, _) => small_hash( + ResultCode::VmError, + &calldata::Value::Str(data.0.to_string()), + &subvm_hashes, + wasm_store_hashes, + ), } } } diff --git a/executor/src/wasi/genlayer_sdk.rs b/executor/src/wasi/genlayer_sdk.rs index 16b9e7f..f2b7aa3 100644 --- a/executor/src/wasi/genlayer_sdk.rs +++ b/executor/src/wasi/genlayer_sdk.rs @@ -27,6 +27,61 @@ fn oom_trap(error: abi::consts::VmError) -> generated::types::Error { )) } +fn cross_major_internal(operation: &str, error: impl std::fmt::Display) -> generated::types::Error { + generated::types::Error::trap(crate::anyhow_to_wasmtime( + rt::errors::Error::internal(format!("{operation}: {error}")).into(), + )) +} + +fn nested_run_ok( + reply: genvm_modules_interfaces::NestedRunReply, +) -> anyhow::Result<(rt::vm::RunOk, bytes::Bytes)> { + anyhow::ensure!( + reply.effect_free, + "nested CallContract result contains effects" + ); + anyhow::ensure!( + reply.small_hash.len() == 32, + "nested CallContract small hash has length {}, expected 32", + reply.small_hash.len() + ); + + let run_ok = match reply.result.kind { + genvm_modules_interfaces::ResultCode::Return => rt::vm::RunOk::Return(reply.result.data), + genvm_modules_interfaces::ResultCode::UserError => { + let data = reply.result.data.materialize()?; + match data { + calldata::Value::Str(message) => rt::vm::RunOk::UserError(message), + payload => { + // User errors on this line are strings, so a callee raising + // structured data produced something this ABI cannot carry. + // That is the callee's ordinary failure, not a fault, so it + // must stay a contract-visible error rather than become an + // internal one. The payload is dropped and survives only + // here, which is the sole record of what actually failed. + log_error!(payload:? = payload; "nested CallContract user error is not a string"); + rt::vm::RunOk::VMError( + public_abi::VmError::invalid_contract().major_mismatch(), + None, + ) + } + } + } + genvm_modules_interfaces::ResultCode::VmError => { + let data = reply.result.data.materialize()?; + let calldata::Value::Str(code) = data else { + anyhow::bail!("nested CallContract VM error is not a string"); + }; + rt::vm::RunOk::VMError(public_abi::VmError(std::borrow::Cow::Owned(code)), None) + } + genvm_modules_interfaces::ResultCode::InternalError => { + anyhow::bail!("nested executor returned an internal error"); + } + }; + + Ok((run_ok, reply.small_hash)) +} + /// Named arguments for [`consume_message_fee_internal`]. struct ConsumeInternalArgs { is_deploy: bool, @@ -273,7 +328,14 @@ impl VMDataAccumulator { pub struct SingleVMData { pub conf: base::Config, - pub depth: u32, + /// Recursion budget left to this VM and everything it spawns, inherited + /// from the chain root rather than counted up from zero, so a chain that + /// crosses executor lines keeps the bound its root minted. + pub remaining_recursion: u32, + /// Transaction signer. This line's contract-facing message has no such + /// field, so it is carried beside the message rather than inside it, to be + /// forwarded to executors that do expose it. + pub signer_address: calldata::Address, pub message_data: ExtendedMessage, pub supervisor: Arc, pub storage: rt::vm::storage::Storage, @@ -281,6 +343,15 @@ pub struct SingleVMData { pub det_subvm_hashes: sha3::Sha3_256, } +impl SingleVMData { + /// How deep this VM sits, for logs only. Exact while the chain stays on + /// one line; an approximation once it crosses into a line whose own limit + /// differs. + pub fn depth(&self) -> u32 { + public_abi::top_limits::VM_RECURSION.saturating_sub(self.remaining_recursion) + } +} + pub struct Context { pub data: SingleVMData, @@ -710,7 +781,10 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { } if state == public_abi::StorageType::Default { - state = public_abi::StorageType::LatestNonFinal; + state = match self.context.data.conf.state_mode { + public_abi::StorageType::Default => public_abi::StorageType::LatestNonFinal, + inherited => inherited, + }; } let supervisor = self.context.data.supervisor.clone(); @@ -726,8 +800,6 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .fork(public_abi::EntryKind::Main, calldata_encoded.into()); my_data.message.stack.push(my_data.message.contract_address); - let calldata_encoded = calldata::encode_obj(&calldata); - let mut child_storage = rt::vm::storage::Storage::new( address, supervisor.get_storage_limiter(), @@ -740,6 +812,18 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { ), ); + // Roots on this line carry no major field, so the executor + // has nothing to read: it reports the never-written default and + // leaves the decision entirely to the host. + const ADVISORY_MAJOR: u8 = 0; + + let routing_payload = supervisor + .host + .lock_for(host::host_fns::Methods::ResolveCallcontractExecutor) + .await + .resolve_callcontract_executor(address, state, ADVISORY_MAJOR) + .map_err(|e| cross_major_internal("resolving CallContract executor", e))?; + let code_slot = child_storage .check_major_and_resolve_code_slot() .await @@ -748,8 +832,9 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { })?; let vm_data = Box::new(SingleVMData { - depth: self.context.data.depth + 1, - // Permission model: doc/website/src/spec/03-vm/05-permissions.rst + remaining_recursion: self.context.data.remaining_recursion.saturating_sub(1), + signer_address: self.context.data.signer_address, + // Permission model: docs/website/src/spec/03-vm/02-meta-properties.rst conf: base::Config { needs_error_fingerprint: true, is_deterministic: true, @@ -803,6 +888,111 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { det_subvm_hashes: Default::default(), }); + if let Some(routing_payload) = routing_payload { + if vm_data.remaining_recursion == 0 { + return Err(oom_trap(public_abi::VmError::oom().val())); + } + // Custom runners are process-local: the envelope carries no + // archives, so a callee in another executor could not load + // them and would silently run with an empty set. Refuse the + // call instead, so the caller sees a canonical error rather + // than a child that resolves `custom:` ids differently per + // route. + if !vm_data.accumulator.custom_runners.is_empty() { + return Err(generated::types::Errno::Inval.into()); + } + use genvm_modules_interfaces::{ + NestedPermissions as P, NestedRunEnvelope, NestedRunnerId, + NestedStorageType, + }; + + let mut nested_calldata = calldata::decode(&vm_data.message_data.entry_data) + .map_err(|e| { + cross_major_internal("decoding nested CallContract calldata", e) + })?; + super::method_compat::method_legacy_to_new(&mut nested_calldata); + let nested_calldata = bytes::Bytes::from(calldata::encode(&nested_calldata)); + + let host_remaining_fuel = supervisor + .host + .lock_for(host::host_fns::Methods::RemainingFuelAsGen) + .await + .remaining_fuel_as_gen() + .map_err(|e| { + cross_major_internal("reading nested deterministic fuel", e) + })?; + let remaining_det_fuel = supervisor + .shared_data + .remaining_det_fuel(host_remaining_fuel) + .await; + + let mut permissions = P::default(); + if vm_data.conf.is_deterministic { + permissions |= P::DETERMINISTIC; + } + if vm_data.conf.can_read_storage { + permissions |= P::READ_STORAGE; + } + if vm_data.conf.can_write_storage { + permissions |= P::WRITE_STORAGE; + } + if vm_data.conf.can_send_messages { + permissions |= P::SEND_MESSAGES; + } + if vm_data.conf.can_call_others { + permissions |= P::CALL_OTHERS; + } + // This line lets a `CallContract` child inherit the parent's + // nondet permission; the boundary does not, so a callee on + // another line is never handed authority its own derivation + // would have cleared. + if vm_data.conf.can_register_runners { + permissions |= P::REGISTER_RUNNERS; + } + + let state_mode = match vm_data.conf.state_mode { + public_abi::StorageType::Default => NestedStorageType::Default, + public_abi::StorageType::LatestFinal => NestedStorageType::LatestFinal, + public_abi::StorageType::LatestNonFinal => { + NestedStorageType::LatestNonFinal + } + }; + let message = &vm_data.message_data.message; + let envelope = NestedRunEnvelope { + routing_payload, + calldata: nested_calldata, + message: genvm_modules_interfaces::MessageData { + contract_address: message.contract_address, + sender_address: message.sender_address, + origin_address: message.origin_address, + signer_address: vm_data.signer_address, + chain_id: message.chain_id.clone(), + value: message.value.clone(), + is_init: message.is_init, + datetime: message.datetime, + }, + stack: message.stack.clone(), + permissions, + state_mode, + topmost_runner_id: NestedRunnerId("contract".to_owned()), + remaining_recursion: vm_data.remaining_recursion, + remaining_det_fuel, + memory_limit: supervisor.limiter.get(true).get_remaining_memory(), + }; + + let reply = supervisor + .host + .lock_for(host::host_fns::Methods::RunNested) + .await + .run_nested(&envelope) + .map_err(|e| cross_major_internal("running nested executor", e))?; + let (run_ok, small_hash) = nested_run_ok(reply) + .map_err(|e| cross_major_internal("reading nested result", e))?; + + self.context.data.det_subvm_hashes.update(&small_hash); + return self.set_vm_run_result(run_ok).map(|x| x.0); + } + let res = rt::spawn_apply_run(&supervisor, vm_data) .await .map_err(|e| generated::types::Error::trap(crate::anyhow_to_wasmtime(e)))?; @@ -1006,7 +1196,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { ); log_debug!( - depth = self.context.data.depth, + depth = self.context.data.depth(), emissions_total = self.context.data.accumulator.emissions.len(); "PostMessage emission pushed to accumulator" ); @@ -1204,7 +1394,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { return Err(generated::types::Errno::Inval.into()); } - let remaining_fuel_as_gen = self + let host_remaining_fuel = self .context .data .supervisor @@ -1213,6 +1403,13 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .await .remaining_fuel_as_gen() .map_err(|e| generated::types::Error::trap(crate::anyhow_to_wasmtime(e)))?; + let remaining_fuel_as_gen = self + .context + .data + .supervisor + .shared_data + .remaining_det_fuel(host_remaining_fuel) + .await; let sup = self.context.data.supervisor.clone(); let response_format = prompt_payload.response_format; @@ -1240,6 +1437,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .lock_for(host::host_fns::Methods::ConsumeFuel) .await .consume_fuel(result.consumed_gen)?; + sup.shared_data.consume_det_fuel(result.consumed_gen).await; if result.consumed_gen == primitive_types::U256::MAX { return Err(rt::errors::Error::vm(abi::consts::VmError::timeout()).into()); @@ -1288,7 +1486,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { ); // Get remaining fuel from host - let remaining_fuel_as_gen = self + let host_remaining_fuel = self .context .data .supervisor @@ -1297,6 +1495,13 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .await .remaining_fuel_as_gen() .map_err(|e| generated::types::Error::trap(crate::anyhow_to_wasmtime(e)))?; + let remaining_fuel_as_gen = self + .context + .data + .supervisor + .shared_data + .remaining_det_fuel(host_remaining_fuel) + .await; let sup = self.context.data.supervisor.clone(); let task = taskify(async move { @@ -1319,6 +1524,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .lock_for(host::host_fns::Methods::ConsumeFuel) .await .consume_fuel(*consumed_gen)?; + sup.shared_data.consume_det_fuel(*consumed_gen).await; if *consumed_gen == primitive_types::U256::MAX { return Err( rt::errors::Error::vm(abi::consts::VmError::timeout()).into() @@ -1853,8 +2059,9 @@ impl ContextVFS<'_> { }; let vm_data = Box::new(SingleVMData { - depth: self.context.data.depth + 1, - // Permission model: doc/website/src/spec/03-vm/05-permissions.rst + remaining_recursion: self.context.data.remaining_recursion.saturating_sub(1), + signer_address: self.context.data.signer_address, + // Permission model: docs/website/src/spec/03-vm/02-meta-properties.rst conf: base::Config { needs_error_fingerprint: false, is_deterministic: false, @@ -1949,8 +2156,9 @@ impl ContextVFS<'_> { let stolen_data = fake_my_data; let vm_data = Box::new(SingleVMData { - depth: self.context.data.depth + 1, - // Permission model: doc/website/src/spec/03-vm/05-permissions.rst + remaining_recursion: self.context.data.remaining_recursion.saturating_sub(1), + signer_address: self.context.data.signer_address, + // Permission model: docs/website/src/spec/03-vm/02-meta-properties.rst conf: base::Config { needs_error_fingerprint: false, is_deterministic: zelf_conf.is_deterministic, diff --git a/executor/tests/precompile_lookup.rs b/executor/tests/precompile_lookup.rs new file mode 100644 index 0000000..00dc836 --- /dev/null +++ b/executor/tests/precompile_lookup.rs @@ -0,0 +1,62 @@ +//! The precompile cache is read with `Module::deserialize_file`, which trusts the +//! file as native code. Only runners the precompiler actually writes artifacts +//! for, the ones listed in `all.json`, may derive a path into it. + +use genvm::runners; + +const HASH: &str = "cnn3rjeozkptmzmzt4ymzznvkqfdedcvpapscmyt6r6cyzjrzsgq"; + +fn unique_dir(tag: &str) -> std::path::PathBuf { + static COUNTER: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0); + let n = COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + let path = std::env::temp_dir().join(format!("genvm-{tag}-{}-{n}", std::process::id())); + std::fs::create_dir_all(&path).unwrap(); + path +} + +/// A registry holding exactly one builtin runner, `py-genlayer:HASH`. +fn registry_with_one_builtin() -> (std::path::PathBuf, runners::cache::Reader) { + let root = unique_dir("registry"); + let runners_dir = root.join("runners"); + std::fs::create_dir_all(&runners_dir).unwrap(); + std::fs::write( + root.join("all.json"), + format!(r#"{{"py-genlayer": ["{HASH}"]}}"#), + ) + .unwrap(); + + let reader = runners::cache::Reader::new(&runners_dir, &root, false).unwrap(); + (root, reader) +} + +#[test] +fn verify_runner_alone_accepts_custom_ids() { + // This is why the registry lookup exists: `custom:`, an id an attacker + // picks via RegisterRunner, is a well-formed `name:hash` pair, so the charset + // check waves it through. `chain:` and `contract` are excluded only + // incidentally, by their colon count. + assert_eq!( + runners::verify_runner(&format!("custom:{HASH}")), + Some(("custom", HASH)), + ); +} + +#[test] +fn custom_runner_is_not_in_the_registry() { + let (root, reader) = registry_with_one_builtin(); + + assert!( + reader.has_in_all("py-genlayer", HASH), + "the builtin the registry lists must be found", + ); + assert!( + !reader.has_in_all("custom", HASH), + "a custom: runner must never resolve a precompiled artifact", + ); + assert!( + !reader.has_in_all("py-genlayer", "not-the-listed-hash"), + "a builtin name with an unlisted hash must not resolve either", + ); + + std::fs::remove_dir_all(&root).unwrap(); +} diff --git a/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash b/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash index 26352cc..a2728c4 100644 --- a/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash +++ b/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDQgEEAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCBvcwppbXBvcnQgc3lzCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgVGVzdCAxOiBBbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzCgkJZW52X3ZhcnMgPSBkaWN0KG9zLmVudmlyb24pCgkJZm9yIGsgaW4gc29ydGVkKGVudl92YXJzLmtleXMoKSk6CgkJCXByaW50KGYnZW52X3trfT17ZW52X3ZhcnNba119JykKCgkJIyBUZXN0IDI6IHN5cy5hcmd2CgkJcHJpbnQoZidzeXNfYXJndj17c3lzLmFyZ3Z9JykKCgkJIyBUZXN0IDM6IHN5cy5wYXRoCgkJZm9yIGksIHAgaW4gZW51bWVyYXRlKHN5cy5wYXRoKToKCQkJcHJpbnQoZidzeXNfcGF0aF97aX09e3B9JykKCgkJIyBUZXN0IDQ6IHN5cy5wbGF0Zm9ybQoJCXByaW50KGYnc3lzX3BsYXRmb3JtPXtzeXMucGxhdGZvcm19JykKCgkJIyBUZXN0IDU6IHN5cy52ZXJzaW9uCgkJcHJpbnQoZidzeXNfdmVyc2lvbj17c3lzLnZlcnNpb259JykKCgkJIyBUZXN0IDY6IHN5cy5ieXRlb3JkZXIKCQlwcmludChmJ3N5c19ieXRlb3JkZXI9e3N5cy5ieXRlb3JkZXJ9JykKCgkJIyBUZXN0IDc6IHN5cy5tYXhzaXplCgkJcHJpbnQoZidzeXNfbWF4c2l6ZT17c3lzLm1heHNpemV9JykKCgkJIyBUZXN0IDg6IG9zLm5hbWUKCQlwcmludChmJ29zX25hbWU9e29zLm5hbWV9JykKCgkJIyBUZXN0IDk6IG9zLmdldGN3ZCgpCgkJdHJ5OgoJCQljd2QgPSBvcy5nZXRjd2QoKQoJCQlwcmludChmJ29zX2N3ZD17Y3dkfScpCgkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgoJCQlwcmludChmJ29zX2N3ZF9lcnJvcj17ZX0nKQoKCQkjIFRlc3QgMTA6IG9zLmdldHBpZCgpIC0gc2hvdWxkIHRoaXMgYmUgZGV0ZXJtaW5pc3RpYz8KCQl0cnk6CgkJCXBpZCA9IG9zLmdldHBpZCgpCgkJCXByaW50KGYnb3NfcGlkPXtwaWR9JykKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGYnb3NfcGlkX2Vycm9yPXtlfScpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +KuPewP32WRSjpb8t1Yq+L79p6BAXj3+3QiR7/24xD1E= diff --git a/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash b/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash index 5cd43e5..1ee973b 100644 --- a/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash +++ b/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDSo0EAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCBzeXMKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJIyBUZXN0IDE6IFBZVEhPTkhBU0hTRUVEIHZhbHVlCgkJdHJ5OgoJCQlpbXBvcnQgb3MKCgkJCXNlZWQgPSBvcy5lbnZpcm9uLmdldCgnUFlUSE9OSEFTSFNFRUQnLCAnTk9UX1NFVCcpCgkJCXByaW50KGYnUFlUSE9OSEFTSFNFRUQ9e3NlZWR9JykKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGYnUFlUSE9OSEFTSFNFRURfZXJyb3I9e2V9JykKCgkJIyBUZXN0IDI6IGhhc2goKSBvZiBzdHJpbmdzIC0gYWZmZWN0ZWQgYnkgaGFzaCByYW5kb21pemF0aW9uCgkJZm9yIHMgaW4gWydoZWxsbycsICd3b3JsZCcsICd0ZXN0JywgJycsICdhJywgJ2RldGVybWluaXNtJ106CgkJCWggPSBoYXNoKHMpCgkJCXByaW50KGYnaGFzaF97c309e2h9JykKCgkJIyBUZXN0IDM6IGhhc2goKSBvZiBieXRlcwoJCWZvciBiIGluIFtiJ2hlbGxvJywgYid0ZXN0JywgYicnXToKCQkJaCA9IGhhc2goYikKCQkJcHJpbnQoZidoYXNoX2J5dGVzX3tifT17aH0nKQoKCQkjIFRlc3QgNDogaGFzaCgpIG9mIHR1cGxlcyAoZGVwZW5kcyBvbiBlbGVtZW50IGhhc2hlcykKCQloID0gaGFzaCgoMSwgMiwgJ2hlbGxvJykpCgkJcHJpbnQoZidoYXNoX3R1cGxlPXtofScpCgoJCSMgVGVzdCA1OiBoYXNoKCkgb2YgZnJvemVuc2V0IChkZXBlbmRzIG9uIGVsZW1lbnQgaGFzaGVzKQoJCWggPSBoYXNoKGZyb3plbnNldChbMSwgMiwgM10pKQoJCXByaW50KGYnaGFzaF9mcm96ZW5zZXQ9e2h9JykKCgkJIyBUZXN0IDY6IGhhc2goKSBvZiBpbnRlZ2VycyAoc2hvdWxkIGJlIGRldGVybWluaXN0aWMpCgkJZm9yIGkgaW4gWzAsIDEsIC0xLCA0MiwgMioqNjNdOgoJCQloID0gaGFzaChpKQoJCQlwcmludChmJ2hhc2hfaW50X3tpfT17aH0nKQoKCQkjIFRlc3QgNzogc3lzLmhhc2hfaW5mbwoJCXByaW50KGYnaGFzaF9hbGdvcml0aG09e3N5cy5oYXNoX2luZm8uYWxnb3JpdGhtfScpCgkJcHJpbnQoZidoYXNoX2JpdHM9e3N5cy5oYXNoX2luZm8uaGFzaF9iaXRzfScpCgkJcHJpbnQoZidoYXNoX3NlZWRfYml0cz17c3lzLmhhc2hfaW5mby5zZWVkX2JpdHN9JykKAAAAAAAAAAAAAAAAAAAABQ== +EUYdsFr6hDq3oFict1tFmniMif1iZky+7L6xOK2upD0= diff --git a/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash b/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash index 226f63b..d196148 100644 --- a/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash +++ b/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash @@ -1 +1 @@ -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 diff --git a/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash b/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash index 4cce67e..7e3b218 100644 --- a/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash +++ b/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDVDYFAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgVGVzdCAxOiBTZXQgaXRlcmF0aW9uIG9yZGVyIChhZmZlY3RlZCBieSBoYXNoIHJhbmRvbWl6YXRpb24pCgkJcyA9IHsnYXBwbGUnLCAnYmFuYW5hJywgJ2NoZXJyeScsICdkYXRlJywgJ2VsZGVyYmVycnknLCAnZmlnJywgJ2dyYXBlJ30KCQlvcmRlciA9IGxpc3QocykKCQlwcmludChmJ3NldF9vcmRlcj17b3JkZXJ9JykKCgkJIyBUZXN0IDI6IERpY3QgZnJvbSBzZXQtbGlrZSBjb25zdHJ1Y3Rpb24KCQlkID0ge2s6IGkgZm9yIGksIGsgaW4gZW51bWVyYXRlKHMpfQoJCXByaW50KGYnZGljdF9mcm9tX3NldD17bGlzdChkLmtleXMoKSl9JykKCgkJIyBUZXN0IDM6IGZyb3plbnNldCByZXByIChvcmRlciBtYXkgdmFyeSkKCQlmcyA9IGZyb3plbnNldChbJ3gnLCAneScsICd6JywgJ3cnLCAnYScsICdiJ10pCgkJcHJpbnQoZidmcm96ZW5zZXRfcmVwcj17cmVwcihmcyl9JykKCgkJIyBUZXN0IDQ6IHNldCBvcGVyYXRpb25zIHRoYXQgcHJvZHVjZSBuZXcgc2V0cwoJCXMxID0geydhJywgJ2InLCAnYycsICdkJ30KCQlzMiA9IHsnYycsICdkJywgJ2UnLCAnZid9CgkJdW5pb24gPSBsaXN0KHMxIHwgczIpCgkJcHJpbnQoZidzZXRfdW5pb25fb3JkZXI9e3VuaW9ufScpCgkJaW50ZXIgPSBsaXN0KHMxICYgczIpCgkJcHJpbnQoZidzZXRfaW50ZXJfb3JkZXI9e2ludGVyfScpCgkJZGlmZiA9IGxpc3QoczEgLSBzMikKCQlwcmludChmJ3NldF9kaWZmX29yZGVyPXtkaWZmfScpCgoJCSMgVGVzdCA1OiBMYXJnZSBzZXQgdG8gYW1wbGlmeSBvcmRlcmluZyBkaWZmZXJlbmNlcwoJCWJpZ19zZXQgPSB7ZidpdGVtX3tpfScgZm9yIGkgaW4gcmFuZ2UoNTApfQoJCWJpZ19vcmRlciA9IGxpc3QoYmlnX3NldCkKCQlwcmludChmJ2JpZ19zZXRfZmlyc3RfMTA9e2JpZ19vcmRlcls6MTBdfScpCgkJcHJpbnQoZidiaWdfc2V0X2hhc2g9e2hhc2goZnJvemVuc2V0KGJpZ19zZXQpKX0nKQoKCQkjIFRlc3QgNjogRGljdCBvcmRlcmluZyBhZnRlciBkZWxldGlvbnMgYW5kIHJlLWluc2VydGlvbnMKCQlkMiA9IHt9CgkJZm9yIGkgaW4gcmFuZ2UoMjApOgoJCQlkMltmJ2tleV97aX0nXSA9IGkKCQlmb3IgaSBpbiByYW5nZSgwLCAyMCwgMik6CgkJCWRlbCBkMltmJ2tleV97aX0nXQoJCWZvciBpIGluIHJhbmdlKDIwLCAzMCk6CgkJCWQyW2Yna2V5X3tpfSddID0gaQoJCXByaW50KGYnZGljdF9rZXlzX2FmdGVyX211dGF0aW9ucz17bGlzdChkMi5rZXlzKCkpfScpCgAAAAAAAAU= +fbBMtEzNz4eg6D01XqnIOkXhS5uqCgPmaGnwM6n+6Jg= diff --git a/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash b/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash index 777006c..7293ceb 100644 --- a/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash +++ b/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDWn0FAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCB0aW1lCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgVGVzdCAxOiB0aW1lLnRpbWUoKSAtIHNob3VsZCB1c2UgV0FTSSBjbG9ja190aW1lX2dldAoJCXQgPSB0aW1lLnRpbWUoKQoJCXByaW50KGYndGltZV90aW1lPXt0fScpCgoJCSMgVGVzdCAyOiB0aW1lLnRpbWVfbnMoKQoJCXRfbnMgPSB0aW1lLnRpbWVfbnMoKQoJCXByaW50KGYndGltZV9ucz17dF9uc30nKQoKCQkjIFRlc3QgMzogdGltZS5tb25vdG9uaWMoKSAtIG1pZ2h0IGRpZmZlcgoJCXRyeToKCQkJbSA9IHRpbWUubW9ub3RvbmljKCkKCQkJcHJpbnQoZidtb25vdG9uaWM9e219JykKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGYnbW9ub3RvbmljX2Vycm9yPXtlfScpCgoJCSMgVGVzdCA0OiB0aW1lLm1vbm90b25pY19ucygpCgkJdHJ5OgoJCQltX25zID0gdGltZS5tb25vdG9uaWNfbnMoKQoJCQlwcmludChmJ21vbm90b25pY19ucz17bV9uc30nKQoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJcHJpbnQoZidtb25vdG9uaWNfbnNfZXJyb3I9e2V9JykKCgkJIyBUZXN0IDU6IHRpbWUucGVyZl9jb3VudGVyKCkgLSBsaWtlbHkgbm9uLWRldGVybWluaXN0aWMKCQl0cnk6CgkJCXAgPSB0aW1lLnBlcmZfY291bnRlcigpCgkJCXByaW50KGYncGVyZl9jb3VudGVyPXtwfScpCgkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgoJCQlwcmludChmJ3BlcmZfY291bnRlcl9lcnJvcj17ZX0nKQoKCQkjIFRlc3QgNjogdGltZS5wcm9jZXNzX3RpbWUoKQoJCXRyeToKCQkJcHQgPSB0aW1lLnByb2Nlc3NfdGltZSgpCgkJCXByaW50KGYncHJvY2Vzc190aW1lPXtwdH0nKQoJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJcHJpbnQoZidwcm9jZXNzX3RpbWVfZXJyb3I9e2V9JykKCgkJIyBUZXN0IDc6IHRpbWUuY2xvY2tfZ2V0dGltZSB3aXRoIHZhcmlvdXMgY2xvY2sgSURzCgkJZm9yIGNsb2NrX2lkX25hbWUgaW4gWwoJCQknQ0xPQ0tfUkVBTFRJTUUnLAoJCQknQ0xPQ0tfTU9OT1RPTklDJywKCQkJJ0NMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCcsCgkJCSdDTE9DS19USFJFQURfQ1BVVElNRV9JRCcsCgkJXToKCQkJdHJ5OgoJCQkJY2lkID0gZ2V0YXR0cih0aW1lLCBjbG9ja19pZF9uYW1lLCBOb25lKQoJCQkJaWYgY2lkIGlzIG5vdCBOb25lOgoJCQkJCXZhbCA9IHRpbWUuY2xvY2tfZ2V0dGltZShjaWQpCgkJCQkJcHJpbnQoZidjbG9ja19nZXR0aW1lX3tjbG9ja19pZF9uYW1lfT17dmFsfScpCgkJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCQkJCXByaW50KGYnY2xvY2tfZ2V0dGltZV97Y2xvY2tfaWRfbmFtZX1fZXJyb3I9e2V9JykKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +IFGOR9oPyEpbfUF0W4nMydmB8cY3wFNwtBEDgb2kL6w= diff --git a/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash b/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash index 1af4760..1200ac7 100644 --- a/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash +++ b/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDJlACAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCBvcwppbXBvcnQgcmFuZG9tCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCSMgVGVzdCAxOiBvcy51cmFuZG9tIChXQVNJIHJhbmRvbV9nZXQpCgkJcmFuZF9ieXRlcyA9IG9zLnVyYW5kb20oMTYpCgkJcHJpbnQoZid1cmFuZG9tX2hleD17cmFuZF9ieXRlcy5oZXgoKX0nKQoKCQkjIFRlc3QgMjogcmFuZG9tIG1vZHVsZSAodXNlcyBvcy51cmFuZG9tIGZvciBzZWVkKQoJCXZhbCA9IHJhbmRvbS5yYW5kaW50KDAsIDIqKjY0KQoJCXByaW50KGYncmFuZG9tX2ludD17dmFsfScpCgoJCSMgVGVzdCAzOiByYW5kb20ucmFuZG9tKCkgZmxvYXQKCQl2YWwyID0gcmFuZG9tLnJhbmRvbSgpCgkJcHJpbnQoZidyYW5kb21fZmxvYXQ9e3ZhbDJ9JykKCgkJIyBUZXN0IDQ6IE11bHRpcGxlIHVyYW5kb20gY2FsbHMgdG8gY2hlY2sgc2VxdWVuY2UKCQlmb3IgaSBpbiByYW5nZSg1KToKCQkJYiA9IG9zLnVyYW5kb20oOCkKCQkJcHJpbnQoZid1cmFuZG9tX3NlcV97aX09e2IuaGV4KCl9JykKAAAAAAAAAAAAAAAABQ== +aLVHhHKJlbPnjfVLWY+gE5b8TLTKHiel86CojliRXUs= diff --git a/tests/integration/stable/bench/read_tree_map.0.hash b/tests/integration/stable/bench/read_tree_map.0.hash index 0cb61b0..c93f6b9 100644 --- a/tests/integration/stable/bench/read_tree_map.0.hash +++ b/tests/integration/stable/bench/read_tree_map.0.hash @@ -1 +1 @@ -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AAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAQEAAAACAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAQMAAAADAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAABAAAAAgAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAcBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAgAAAAgAAAAAAAAAAAABAAAAAgAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAACQECAAAABQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAALAQEAAAAEAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAwBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BAQAAAAIAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA8BAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAABABAgAAAAQAAAAAAAAAAAADAAAABAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAATAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAQQAAAAGAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAABUBBAAAAAYAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAEBAAAABQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwECAAAAAwAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAEBAAAAAgAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEBAAAAAgAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQEDAAAABAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACgBAQAAAAIAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACkBAQAAAAIAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACoBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACsBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAQEAAAACAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAALwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAECAAAABAAAAAAAAAAAAAEAAAACAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAANAEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAANQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAANgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAANwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAADgBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgEBAAAAAgAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAADwBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD0BAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD4BAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAARAEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEUBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEYBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEcBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEkBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEoBAQAAAAIAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEsBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABMAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAATQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAATgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAATwEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFMBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABUAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFcBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFgBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFkBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFoBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFsBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFwBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABdAQEAAAACAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABeAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABfAQEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQEBAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAGIBAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAGMBAAAVowLALmLyw3r4Bg+K0Le+B/oZqSWyPKCFvMVeBnJPbRISBgAA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MihsZW4oc2VsZi5ub2RlcykpCgkJCQlub2RlLmNoaWxkcmVuW2tdID0gY2hpbGRfaW5kZXgKCQkJCXNlbGYubm9kZXMuYXBwZW5kX25ld19nZXQoKQoJCQlub2RlX2luZGV4ID0gY2hpbGRfaW5kZXgKCgkJbm9kZSA9IHNlbGYubm9kZXNbbm9kZV9pbmRleF0KCQlub2RlLnZhbHVlID0gdmFsdWUKCQlub2RlLmhhc192YWx1ZSA9IFRydWUKCglkZWYgZ2V0KHNlbGYsIGl0czogSXRlcmFibGVbS10pIC0+IFQgfCBOb25lOgoJCW5vZGVfaW5kZXggPSAwCgkJZm9yIGsgaW4gaXRzOgoJCQlub2RlID0gc2VsZi5ub2Rlc1tub2RlX2luZGV4XQoJCQljaGlsZF9pbmRleCA9IG5vZGUuY2hpbGRyZW4uZ2V0KGspCgkJCWlmIGNoaWxkX2luZGV4IGlzIE5vbmU6CgkJCQlyZXR1cm4gTm9uZQoJCQlub2RlX2luZGV4ID0gY2hpbGRfaW5kZXgKCgkJbm9kZSA9IHNlbGYubm9kZXNbbm9kZV9pbmRleF0KCQlpZiBub2RlLmhhc192YWx1ZToKCQkJcmV0dXJuIG5vZGUudmFsdWUKCQllbHNlOgoJCQlyZXR1cm4gTm9uZQoKCmRlZiBzdHJfdG9fa2V5cyhzOiBzdHIpIC0+IGxpc3RbdThdOgoJcmV0dXJuIFt1OChvcmQoYykpIGZvciBjIGluIHNdCgoKcmFuZF9zdHJfY2hhcnMgPSAnYWJjZGVmZ2hpamtsbW4nCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJdHJpZTogVHJpZVt1OCwgdThdCgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXNlbGYudHJpZS5fX2luaXRfXygpCgkJZm9yIGkgaW4gcmFuZ2UoMTAwKToKCQkJcyA9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShyYW5kX3N0cl9jaGFycykgZm9yIF8gaW4gcmFuZ2UoMTApKQoJCQlzZWxmLnRyaWUuaW5zZXJ0KHN0cl90b19rZXlzKHMpLCB1OChpKSkKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmVuY2goc2VsZikgLT4gTm9uZToKCQlzdW0gPSAw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 diff --git a/tests/integration/stable/bench/read_tree_map.0_0.hash b/tests/integration/stable/bench/read_tree_map.0_0.hash index 9942c25..06fbc29 100644 --- a/tests/integration/stable/bench/read_tree_map.0_0.hash +++ b/tests/integration/stable/bench/read_tree_map.0_0.hash @@ -1 +1 @@ -LQEAAAUF +P2cryrwYBeXVf+fk1X9XGxMYsMx+XDzbmJB+w7hIisc= diff --git a/tests/integration/stable/exploits/call_wasi_extra.0.hash b/tests/integration/stable/exploits/call_wasi_extra.0.hash index 6ca34f3..63a0d66 100644 --- a/tests/integration/stable/exploits/call_wasi_extra.0.hash +++ b/tests/integration/stable/exploits/call_wasi_extra.0.hash @@ -1 +1 @@ -LRFkZXhpdF9jb2RlIDMwAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDHKoBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKaW1wb3J0IF9nZW5sYXllcl93YXNpIGFzIHdhc2kKaW1wb3J0IGdlbmxheWVyLnB5LmNhbGxkYXRhIGFzIGNhbGxkYXRhCmltcG9ydCBvcwoKaW1wb3J0IGNsb3VkcGlja2xlCgoKZGVmIGZvbygpOgoJcHJpbnQoJ3dlIHdpbGwgaGF2ZSBhbiBpbmZpbml0ZSBsb29wLi4uJykKCgp0cnk6CglmZCA9IHdhc2kuZ2xfY2FsbCgKCQljYWxsZGF0YS5lbmNvZGUoCgkJCXsKCQkJCSdTYW5kYm94JzogewoJCQkJCSdhX2V4dHJhX2ZpZWxkJzogVHJ1ZSwKCQkJCQknZGF0YSc6IGNsb3VkcGlja2xlLmR1bXBzKGZvbyksCgkJCQl9CgkJCX0KCQkpLAoJKQpleGNlcHQgRXhjZXB0aW9uIGFzIGU6CglwcmludChlKQoJZXhpdCgzMCkKCnByaW50KG9zLmZkb3BlbihmZCkucmVhZCgpKQoKZXhpdCgwKQoAAAAAAAAAAAAAAAAAAAAAAAAF +CJgvNSVnWirkvmJsO6eJqJe00aAAsUU5NNts5tVnWjg= diff --git a/tests/integration/stable/exploits/disagree_in_sandbox.0.hash b/tests/integration/stable/exploits/disagree_in_sandbox.0.hash index 7d784a8..a8866b4 100644 --- a/tests/integration/stable/exploits/disagree_in_sandbox.0.hash +++ b/tests/integration/stable/exploits/disagree_in_sandbox.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFCoBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCWRlZiBmbigpOgoJCQl0cnk6CgkJCQlnbC52bS5ydW5fbm9uZGV0KGxhbWJkYTogTm9uZSwgbGFtYmRhIHg6IEZhbHNlKQoJCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCQlwcmludChlKQoKCQlwcmludCgncHJlIHNwYXduJykKCQlyZXMgPSBnbC52bS5zcGF3bl9zYW5kYm94KGZuKQoJCXByaW50KGYncmVzPXtyZXN9JykKAAAAAAAAAAAAAAAAAAAAAAAABQ== +F6SlkggfEjL+zdtDPYJU6q7PbMBiH2urHLHr1WObz1Q= diff --git a/tests/integration/stable/exploits/flt.0.hash b/tests/integration/stable/exploits/flt.0.hash index 2f81be2..ea6ec78 100644 --- a/tests/integration/stable/exploits/flt.0.hash +++ b/tests/integration/stable/exploits/flt.0.hash @@ -1 +1 @@ -LRHcAXdhc21fdHJhcCBEZXRlcm1pbmlzdGljTW9kZQANFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgwyyAAAAAGFzbQEAAAABDQNgAABgAX8AYAF8AXwCJAEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQlwcm9jX2V4aXQAAQMDAgIABQQBAIECBxMCBl9zdGFydAACBm1lbW9yeQIAClMCPAEBfEQAAAAAAADwPyEBAkAgAEQAAAAAAAAAAGUNACAARAAAAAAAAOC/oBABRM3MzMzMzPQ/oiEBCyABCxQARAAAAAAAAABAEAGqQQJrEAAACwAAAAAAAAAAAAAF +MzmpNP8G/Z0iWWXk0/5XJTUeP/UqWArbF62uL7BHZS4= diff --git a/tests/integration/stable/exploits/fork_bomb.0.hash b/tests/integration/stable/exploits/fork_bomb.0.hash index 76c99f1..6fbda3d 100644 --- a/tests/integration/stable/exploits/fork_bomb.0.hash +++ b/tests/integration/stable/exploits/fork_bomb.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOAAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKZGVmIGJvbWIoKToKCXJlcyA9IGdsLnZtLnNwYXduX3NhbmRib3goYm9tYikKCWlmIGlzaW5zdGFuY2UocmVzLCBnbC52bS5WTUVycm9yKToKCQlwcmludChyZXMubWVzc2FnZSkKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJYm9tYigpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +O1XSZee/GIMTPO3hJIIkfHLU9t946KviqLtFxFDnJDA= diff --git a/tests/integration/stable/exploits/method_init.0.hash b/tests/integration/stable/exploits/method_init.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/exploits/method_init.0.hash +++ b/tests/integration/stable/exploits/method_init.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/exploits/method_init.0_0.hash b/tests/integration/stable/exploits/method_init.0_0.hash index 131eae2..bed5303 100644 --- a/tests/integration/stable/exploits/method_init.0_0.hash +++ b/tests/integration/stable/exploits/method_init.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +sfJxEyJfMVenNFc8hcCfM5INI8wJrMyzqBxOBVOyNlI= diff --git a/tests/integration/stable/exploits/method_private.0.hash b/tests/integration/stable/exploits/method_private.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/exploits/method_private.0.hash +++ b/tests/integration/stable/exploits/method_private.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/exploits/method_private.0_0.hash b/tests/integration/stable/exploits/method_private.0_0.hash index 131eae2..b9e6c1a 100644 --- a/tests/integration/stable/exploits/method_private.0_0.hash +++ b/tests/integration/stable/exploits/method_private.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +1d3iSufVx1/7srPpG93C1mtEkWfrc27Sc+dzeJ2UK7g= diff --git a/tests/integration/stable/exploits/oom.0.hash b/tests/integration/stable/exploits/oom.0.hash index dc2aae1..5eb00e8 100644 --- a/tests/integration/stable/exploits/oom.0.hash +++ b/tests/integration/stable/exploits/oom.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEADRWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMIdQAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CgpzeiA9IDEwMjQKYWxsID0gW10Kd2hpbGUgVHJ1ZToKCXByaW50KHN6KQoJYWxsLmFwcGVuZChsaXN0KHJhbmdlKHN6KSkpCglzeiAqPSA4CgAAAAAAAAAF +caXQSTceOy5zcp8g4fAebuOudprVgMW8uthrXn6+jZw= diff --git a/tests/integration/stable/exploits/rec.0.hash b/tests/integration/stable/exploits/rec.0.hash index d577020..539c142 100644 --- a/tests/integration/stable/exploits/rec.0.hash +++ b/tests/integration/stable/exploits/rec.0.hash @@ -1 +1 @@ -LRG8AXdhc21fdHJhcCBTdGFja092ZXJmbG93AA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDBkQAAAAAYXNtAQAAAAEIAmAAAGAAAX4DAwIBAAUEAQCBAgcTAgZfc3RhcnQAAQZtZW1vcnkCAAoQAggAEABCAXwPCwUAEAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +i5a3V+TELIMhB00hf/blkdU8QLzLMrTfuzqnl3rAphM= diff --git a/tests/integration/stable/exploits/rec_1023.0.hash b/tests/integration/stable/exploits/rec_1023.0.hash index 1c044ad..ff4011b 100644 --- a/tests/integration/stable/exploits/rec_1023.0.hash +++ b/tests/integration/stable/exploits/rec_1023.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDBlEAAAAAYXNtAQAAAAEIAmAAAGABfgADAwIBAAUEAQCBAgcTAgZfc3RhcnQAAQZtZW1vcnkCAAodAhIAIABCAFUEQCAAQgF9EAALDwsIAEL+BxAADwsAAAAAAAAAAAAAAAU= +aVE4Vl7LHNwdIasYShYyDI836Kq4V/sTK9bzVAcis/U= diff --git a/tests/integration/stable/exploits/rec_1024.0.hash b/tests/integration/stable/exploits/rec_1024.0.hash index 7e75e9f..bef42d1 100644 --- a/tests/integration/stable/exploits/rec_1024.0.hash +++ b/tests/integration/stable/exploits/rec_1024.0.hash @@ -1 +1 @@ -LRG8AXdhc21fdHJhcCBTdGFja092ZXJmbG93AA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDBlEAAAAAYXNtAQAAAAEIAmAAAGABfgADAwIBAAUEAQCBAgcTAgZfc3RhcnQAAQZtZW1vcnkCAAodAhIAIABCAFUEQCAAQgF9EAALDwsIAEL/BxAAAAsAAAAAAAAAAAAAAAU= +CjEjCzHHM9sSYSoridFC/GZZpSlzZhjiRg00hhbS918= diff --git a/tests/integration/stable/exploits/storage_rw_long.0.hash b/tests/integration/stable/exploits/storage_rw_long.0.hash index dca9bdd..91009ad 100644 --- a/tests/integration/stable/exploits/storage_rw_long.0.hash +++ b/tests/integration/stable/exploits/storage_rw_long.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEADRWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMKjwAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CgppbXBvcnQgX2dlbmxheWVyX3dhc2kgYXMgd2FzaQoKYnVmID0gYnl0ZWFycmF5KDMpCndhc2kuc3RvcmFnZV9yZWFkKGInXHgwMCcgKiAzMiwgMioqMzIgLSAxLCBidWYpCmV4aXQoMCkKAAAAAAAAAAAAAAAAAAU= +gyepzwUR4xKPBTrIQQk4YICKicBLHUfLfyl5QXeORqY= diff --git a/tests/integration/stable/exploits/storage_rw_long.0_0.hash b/tests/integration/stable/exploits/storage_rw_long.0_0.hash index a0b6635..8d00edb 100644 --- a/tests/integration/stable/exploits/storage_rw_long.0_0.hash +++ b/tests/integration/stable/exploits/storage_rw_long.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEADRWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMKhQAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CgppbXBvcnQgX2dlbmxheWVyX3dhc2kgYXMgd2FzaQoKd2FzaS5zdG9yYWdlX3dyaXRlKGInXHgwMCcgKiAzMiwgMioqMzIgLSAxLCBiJ1x4MDBceDAwJykKZXhpdCgwKQopCmV4aXQoMCkKAAAAAAAAAAAAAAAAAAU= +FjnbscBvjsWTp2tBIK/8vWaLezOi16vqsUsDSa6hWKc= diff --git a/tests/integration/stable/exploits/unreachable.0.hash b/tests/integration/stable/exploits/unreachable.0.hash index a317cbb..b064460 100644 --- a/tests/integration/stable/exploits/unreachable.0.hash +++ b/tests/integration/stable/exploits/unreachable.0.hash @@ -1 +1 @@ -LRGEAndhc21fdHJhcCBVbnJlYWNoYWJsZUNvZGVSZWFjaGVkAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDBCUAAAAAYXNtAQAAAAEEAWAAAAMCAQAHCgEGX3N0YXJ0AAAKBQEDAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +0jdeTvJDncN55evXOfohroHnffO5j+hvGvgVLc99Urk= diff --git a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash +++ b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash index 74ce31e..a1be830 100644 --- a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash @@ -1 +1 @@ -LRE0YWJzZW50AAUF +kCJihiQ/nwCfBwL4IfN0fFPVzluUUCFeCp33NrRpCLU= diff --git a/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash b/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash index 131eae2..462db15 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +kcYfXzKN3KEDf0SjC2HHP92u6CosyQ+89QkEmyckVFs= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash index 131eae2..462db15 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +kcYfXzKN3KEDf0SjC2HHP92u6CosyQ+89QkEmyckVFs= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash index 4467e51..dccca94 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDIABQU= +n6jm5se+7tASVrEeTuyXPzLzoxa32ZPwPMGj7g+GzLQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash index defc9c5..e7acfa2 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash @@ -1 +1 @@ -LQlcZXhpdF9jb2RlIDEABQU= +hcZlCwd5fful7etGr42H/cfd8+IVu1oEc5X4o1goMcA= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash index 28c13dc..9817617 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmKToKCQlkZWYgZG9fZm4oKToKCQkJcmFpc2UgRXhjZXB0aW9uKCkKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgYmFyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlyZXR1cm4KCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgoc2VsZik6CgkJZGVmIGRvX2ZuKCk6CgkJCWV4aXQoMikKCgkJZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShkb19mbikKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXgyKHNlbGYpOgoJCWRlZiBkb19mbigpOgoJCQlub25fZXhpc3RlbnRfZm4oKSAgIyBub3FhCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZG9fZm4pCgAAAAAABQ== +nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash index 131eae2..f6796b3 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +ZIjSfK7PFYWWRDksMDSxlWOxe9RkVn4Mp6HldBFtWBU= diff --git a/tests/integration/stable/nondet/metod_det_get_webpage.0.hash b/tests/integration/stable/nondet/metod_det_get_webpage.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/nondet/metod_det_get_webpage.0.hash +++ b/tests/integration/stable/nondet/metod_det_get_webpage.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash b/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash index 131eae2..87cccdc 100644 --- a/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash +++ b/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +nXvxdsA9eMbY4GQA2OFY3+1Y9GtnihsgkA8pKWFacWE= diff --git a/tests/integration/stable/nondet/trivial.0.hash b/tests/integration/stable/nondet/trivial.0.hash index a6eced8..9ebd4b9 100644 --- a/tests/integration/stable/nondet/trivial.0.hash +++ b/tests/integration/stable/nondet/trivial.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEgUBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGluaXQoc2VsZik6CgkJZXZhbCgicHJpbnQoJ2luaXQgZnJvbSBldmFsIScpIikKCgkJZGVmIHJ1bigpOgoJCQlwcmludCgnd293LCBub25kZXQnKQoJCQlyZXR1cm4gJ3dlYiBwYWdlPycKCgkJcmV0dXJuIGdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +dkBSpd/CmlrZ/ER4ufDF+cs6BtVk3sLw8GpDWxeOX5U= diff --git a/tests/integration/stable/nondet/trivial.0_0.hash b/tests/integration/stable/nondet/trivial.0_0.hash index 7ee50db..56490ed 100644 --- a/tests/integration/stable/nondet/trivial.0_0.hash +++ b/tests/integration/stable/nondet/trivial.0_0.hash @@ -1 +1 @@ -LQFMd2ViIHBhZ2U/AAUF +XXP6+fmv8V3o49GlzjmOxstfFkzRV5ZDw3rysHbXnkg= diff --git a/tests/integration/stable/nondet/validator/rollback_agree.0.hash b/tests/integration/stable/nondet/validator/rollback_agree.0.hash index 0f39185..79305d9 100644 --- a/tests/integration/stable/nondet/validator/rollback_agree.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_agree.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDtgAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlyYWlzZSBnbC52bS5Vc2VyRXJyb3IoJ3JvbGxiYWNrJykKCgkJcHJpbnQoZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShydW4pKQoAAAAABQ== +wLqOKhNv4nncyBgTnCr0k14EmJZJhm7GAVK1OO81gKA= diff --git a/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash b/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash index 42274ec..17ced80 100644 --- a/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash @@ -1 +1 @@ -LQlEcm9sbGJhY2sABQU= +wtDPdJemlqnE1oWAzHRtXbLLpU884PRdu1g2S14WTYQ= diff --git a/tests/integration/stable/nondet/validator/rollback_disagree.0.hash b/tests/integration/stable/nondet/validator/rollback_disagree.0.hash index 0f39185..79305d9 100644 --- a/tests/integration/stable/nondet/validator/rollback_disagree.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_disagree.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDtgAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlyYWlzZSBnbC52bS5Vc2VyRXJyb3IoJ3JvbGxiYWNrJykKCgkJcHJpbnQoZ2wuZXFfcHJpbmNpcGxlLnN0cmljdF9lcShydW4pKQoAAAAABQ== +wLqOKhNv4nncyBgTnCr0k14EmJZJhm7GAVK1OO81gKA= diff --git a/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash b/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash index c677e6b..672ad6b 100644 --- a/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash @@ -1 +1 @@ -LQl0b3RoZXIgcm9sbGJhY2sABQU= +niYFya1V+FAnnrEcfnjQ5IaLbrNFx/6zEGZGPSLm93k= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.0.hash b/tests/integration/stable/nondet/validator/rollback_imm.0.hash index c8be28a..48bd61c 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOMAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlnbC5hZHZhbmNlZC51c2VyX2Vycm9yX2ltbWVkaWF0ZSgncm9sbGJhY2snKQoKCQlwcmludChnbC5lcV9wcmluY2lwbGUuc3RyaWN0X2VxKHJ1bikpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +nkUFY7hTP2Ic3jGaDqsvMbWxfqG2rK97IL6QpDFxpRE= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash b/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash index 42274ec..3768293 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash @@ -1 +1 @@ -LQlEcm9sbGJhY2sABQU= +tIR4HuQ6trd0FnFR0aV7jOXy05/OUeVIdpJPDGgyQoM= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.1.hash b/tests/integration/stable/nondet/validator/rollback_imm.1.hash index c8be28a..48bd61c 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.1.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.1.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOMAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlnbC5hZHZhbmNlZC51c2VyX2Vycm9yX2ltbWVkaWF0ZSgncm9sbGJhY2snKQoKCQlwcmludChnbC5lcV9wcmluY2lwbGUuc3RyaWN0X2VxKHJ1bikpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +nkUFY7hTP2Ic3jGaDqsvMbWxfqG2rK97IL6QpDFxpRE= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash b/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash index c677e6b..0b61bce 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash @@ -1 +1 @@ -LQl0b3RoZXIgcm9sbGJhY2sABQU= +Up4uJyy5hE39rmTjD+GZTrLqmWgwBsFIuQ6aLZEjkrY= diff --git a/tests/integration/stable/nondet/validator/sync.0.hash b/tests/integration/stable/nondet/validator/sync.0.hash index cb62b0d..6def75b 100644 --- a/tests/integration/stable/nondet/validator/sync.0.hash +++ b/tests/integration/stable/nondet/validator/sync.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOIAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlwcmludCgnU0hPVUxEIE5PVCBCRSBQUklOVEVEJykKCQkJcmV0dXJuIDEwCgoJCXByaW50KGdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuKSkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +SSM4vl43AOd20ypJ3Pl7QzrG3o0McVkg7jiy4PpzryY= diff --git a/tests/integration/stable/nondet/validator/sync.0_0.hash b/tests/integration/stable/nondet/validator/sync.0_0.hash index 9942c25..624ff24 100644 --- a/tests/integration/stable/nondet/validator/sync.0_0.hash +++ b/tests/integration/stable/nondet/validator/sync.0_0.hash @@ -1 +1 @@ -LQEAAAUF +rsE1gabEJ2wcoWRM/+juGuRSjX86VkjZs8TIhOK68tE= diff --git a/tests/integration/stable/nondet/validator/sync_err.0.hash b/tests/integration/stable/nondet/validator/sync_err.0.hash index cb62b0d..6def75b 100644 --- a/tests/integration/stable/nondet/validator/sync_err.0.hash +++ b/tests/integration/stable/nondet/validator/sync_err.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOIAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZik6CgkJZGVmIHJ1bigpOgoJCQlwcmludCgnU0hPVUxEIE5PVCBCRSBQUklOVEVEJykKCQkJcmV0dXJuIDEwCgoJCXByaW50KGdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuKSkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +SSM4vl43AOd20ypJ3Pl7QzrG3o0McVkg7jiy4PpzryY= diff --git a/tests/integration/stable/nondet/validator/sync_err.0_0.hash b/tests/integration/stable/nondet/validator/sync_err.0_0.hash index 14442be..5f57120 100644 --- a/tests/integration/stable/nondet/validator/sync_err.0_0.hash +++ b/tests/integration/stable/nondet/validator/sync_err.0_0.hash @@ -1 +1 @@ -LQk8Tm8gaWRlYQAFBQ== +UMRnANXg4dOJhGZkn/t4FZ2HpDo5wmUbfABa1j44+ps= diff --git a/tests/integration/stable/py/balances/balance.0.hash b/tests/integration/stable/py/balances/balance.0.hash index 5ebda7a..a328c59 100644 --- a/tests/integration/stable/py/balances/balance.0.hash +++ b/tests/integration/stable/py/balances/balance.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDLsMCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdtYWluIHNlbGYnLCBzZWxmLmJhbGFuY2UpCgkJcHJpbnQoJ21haW4gQXQoc2VsZiknLCBnbC5nZXRfY29udHJhY3RfYXQoZ2wubWVzc2FnZS5jb250cmFjdF9hZGRyZXNzKS5iYWxhbmNlKQoJCXByaW50KCc9PT0gdHJhbnNmZXIgPT09JykKCQlnbC5nZXRfY29udHJhY3RfYXQoZ2wubWVzc2FnZS5zZW5kZXJfYWRkcmVzcykuZW1pdF90cmFuc2Zlcih2YWx1ZT11MjU2KDUpKQoJCXByaW50KCdtYWluIHNlbGYnLCBzZWxmLmJhbGFuY2UpCgkJcHJpbnQoJ21haW4gQXQoc2VsZiknLCBnbC5nZXRfY29udHJhY3RfYXQoZ2wubWVzc2FnZS5jb250cmFjdF9hZGRyZXNzKS5iYWxhbmNlKQoKCQlwcmludCgnPT09IGNhbGwgLnZpZXcoKSA9PT0nKQoJCWdsLmdldF9jb250cmFjdF9hdChnbC5tZXNzYWdlLmNvbnRyYWN0X2FkZHJlc3MpLnZpZXcoKS5uZXN0ZWQoKQoKCUBnbC5wdWJsaWMudmlldwoJZGVmIG5lc3RlZChzZWxmKToKCQlwcmludCgnbmVzdGVkIHNlbGYnLCBzZWxmLmJhbGFuY2UpCgkJcHJpbnQoJ25lc3RlZCBBdChzZWxmKScsIGdsLmdldF9jb250cmFjdF9hdChnbC5tZXNzYWdlLmNvbnRyYWN0X2FkZHJlc3MpLmJhbGFuY2UpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8AbmmIdF3BhQeYrixzustPR/cwFxY4lVCGVIIH00PjE= diff --git a/tests/integration/stable/py/balances/balance_eth.0.hash b/tests/integration/stable/py/balances/balance_eth.0.hash index 16271c5..88f2f53 100644 --- a/tests/integration/stable/py/balances/balance_eth.0.hash +++ b/tests/integration/stable/py/balances/balance_eth.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDMgIDAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKQGdsLmV2bS5jb250cmFjdF9pbnRlcmZhY2UKY2xhc3MgRXRoQ29udHJhY3Q6CgljbGFzcyBWaWV3OgoJCXBhc3MKCgljbGFzcyBXcml0ZToKCQlwYXNzCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdtYWluIHNlbGYnLCBzZWxmLmJhbGFuY2UpCgkJcHJpbnQoJ21haW4gQXQoc2VsZiknLCBFdGhDb250cmFjdChnbC5tZXNzYWdlLmNvbnRyYWN0X2FkZHJlc3MpLmJhbGFuY2UpCgkJcHJpbnQoJz09PSB0cmFuc2ZlciA9PT0nKQoKCQlFdGhDb250cmFjdChnbC5tZXNzYWdlLnNlbmRlcl9hZGRyZXNzKS5lbWl0X3RyYW5zZmVyKHZhbHVlPXUyNTYoNSkpCgkJcHJpbnQoJ21haW4gc2VsZicsIHNlbGYuYmFsYW5jZSkKCQlwcmludCgnbWFpbiBBdChzZWxmKScsIEV0aENvbnRyYWN0KGdsLm1lc3NhZ2UuY29udHJhY3RfYWRkcmVzcykuYmFsYW5jZSkKCgkJcHJpbnQoJz09PSBjYWxsIC52aWV3KCkgPT09JykKCQlnbC5nZXRfY29udHJhY3RfYXQoZ2wubWVzc2FnZS5jb250cmFjdF9hZGRyZXNzKS52aWV3KCkubmVzdGVkKCkKCglAZ2wucHVibGljLnZpZXcKCWRlZiBuZXN0ZWQoc2VsZik6CgkJcHJpbnQoJ25lc3RlZCBzZWxmJywgc2VsZi5iYWxhbmNlKQoJCXByaW50KCduZXN0ZWQgQXQoc2VsZiknLCBFdGhDb250cmFjdChnbC5tZXNzYWdlLmNvbnRyYWN0X2FkZHJlc3MpLmJhbGFuY2UpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +dumPlg3xVOUnE+BeiV5rYf9TSh92IJTHeebFl95mDVE= diff --git a/tests/integration/stable/py/balances/sandbox_overspend.0.hash b/tests/integration/stable/py/balances/sandbox_overspend.0.hash index 61c09b7..8fe1f3c 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend.0.hash +++ b/tests/integration/stable/py/balances/sandbox_overspend.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDRkAEAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCWJhbGFuY2VfYmVmb3JlID0gc2VsZi5iYWxhbmNlCgkJdGFyZ2V0ID0gZ2wubWVzc2FnZS5zZW5kZXJfYWRkcmVzcwoKCQkjIEZpcnN0IHRyYW5zZmVyOiBzcGVuZCA2MCBvdXQgb2YgMTAwCgkJZ2wuZ2V0X2NvbnRyYWN0X2F0KHRhcmdldCkuZW1pdF90cmFuc2Zlcih2YWx1ZT11MjU2KDYwKSkKCQliYWxhbmNlX2FmdGVyX2ZpcnN0ID0gc2VsZi5iYWxhbmNlCgkJcHJpbnQoZidiYWxhbmNlIGJlZm9yZT17YmFsYW5jZV9iZWZvcmV9IGFmdGVyX2ZpcnN0X3NlbmQ9e2JhbGFuY2VfYWZ0ZXJfZmlyc3R9JykKCgkJIyBOb3cgc3Bhd24gYSBzYW5kYm94IHdpdGggd3JpdGUgb3BzIGFsbG93ZWQuCgkJIyBCVUc6IHRoZSBzYW5kYm94IGdldHMgYSBmcmVzaCBtZXNzYWdlc19kZWNyZW1lbnRlZD0wLAoJCSMgc28gaXQgdGhpbmtzIHRoZSBmdWxsIGJhbGFuY2UgaXMgc3RpbGwgYXZhaWxhYmxlLgoJCWRlZiBzYW5kYm94X2ZuKCk6CgkJCSMgU2Vjb25kIHRyYW5zZmVyOiBzcGVuZCBhbm90aGVyIDYwIGluc2lkZSBzYW5kYm94CgkJCSMgVGhpcyBzaG91bGQgZmFpbCAodG90YWwgMTIwID4gMTAwKSBidXQgdGhlIHNhbmRib3gKCQkJIyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHBhcmVudCdzIDYwIGFscmVhZHkgc3BlbnQuCgkJCWdsLmdldF9jb250cmFjdF9hdCh0YXJnZXQpLmVtaXRfdHJhbnNmZXIodmFsdWU9dTI1Nig2MCkpCgkJCXJldHVybiBzZWxmLmJhbGFuY2UKCgkJcmVzdWx0ID0gZ2wudm0uc3Bhd25fc2FuZGJveChzYW5kYm94X2ZuLCBhbGxvd193cml0ZV9vcHM9VHJ1ZSkKCQlwcmludChmJ3NhbmRib3ggcmVzdWx0PXtyZXN1bHR9JykKCQlwcmludChmJ2JhbGFuY2UgZmluYWw9e3NlbGYuYmFsYW5jZX0nKQoJCSMgSWYgd2UgcmVhY2ggaGVyZSB3aXRoIGJvdGggdHJhbnNmZXJzIGFjY2VwdGVkLAoJCSMgdG90YWwgc3BlbnQgaXMgMTIwIGJ1dCBiYWxhbmNlIHdhcyBvbmx5IDEwMCA9PiBvdmVyc3BlbmQgYnVnCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +wDV+0rauq63+gF7ZNXTsVD9MLdBXNio921gSMd3CQjk= diff --git a/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash b/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash index 785f096..92d0966 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash +++ b/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKGYCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXRhcmdldCA9IGdsLm1lc3NhZ2Uuc2VuZGVyX2FkZHJlc3MKCgkJcHJpbnQoZidiYWxhbmNlIGJlZm9yZT17c2VsZi5iYWxhbmNlfScpCgoJCWRlZiBzYW5kYm94X2ZuKCk6CgkJCWdsLmdldF9jb250cmFjdF9hdCh0YXJnZXQpLmVtaXRfdHJhbnNmZXIodmFsdWU9dTI1Nig2MCkpCgkJCXJldHVybiBzZWxmLmJhbGFuY2UKCgkJcmVzdWx0ID0gZ2wudm0uc3Bhd25fc2FuZGJveChzYW5kYm94X2ZuLCBhbGxvd193cml0ZV9vcHM9VHJ1ZSkKCQlwcmludChmJ3NhbmRib3ggcmVzdWx0PXtyZXN1bHR9IGJhbGFuY2UgYWZ0ZXIgc2FuZGJveD17c2VsZi5iYWxhbmNlfScpCgoJCXRyeToKCQkJZ2wuZ2V0X2NvbnRyYWN0X2F0KHRhcmdldCkuZW1pdF90cmFuc2Zlcih2YWx1ZT11MjU2KDYwKSkKCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGYndHJhbnNmZXIgZmFpbGVkIHdpdGggZXJyb3I6IHtlfScpCgoJCXByaW50KGYnYmFsYW5jZSBmaW5hbD17c2VsZi5iYWxhbmNlfScpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +ML4v23Ol2orfKV98yDYEATKo+FgPzKZ/vqpSuFy6+O8= diff --git a/tests/integration/stable/py/balances/undefined_all.0.hash b/tests/integration/stable/py/balances/undefined_all.0.hash index f61df15..7bf0795 100644 --- a/tests/integration/stable/py/balances/undefined_all.0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDCGEAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCXBhc3MKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +irtLI2rN/oHjrDlwYkljBPEaR8StP0g1dbinXZo2J6s= diff --git a/tests/integration/stable/py/balances/undefined_all.0_0.hash b/tests/integration/stable/py/balances/undefined_all.0_0.hash index 131eae2..229dce0 100644 --- a/tests/integration/stable/py/balances/undefined_all.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +l9sm53Ug3wz274H6u8wQjfw5YSPtaCeACkac3qJSmGM= diff --git a/tests/integration/stable/py/balances/undefined_all.0_0_0.hash b/tests/integration/stable/py/balances/undefined_all.0_0_0.hash index 131eae2..bccd191 100644 --- a/tests/integration/stable/py/balances/undefined_all.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0_0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +svuS28+K+kz6tYNBogWqGXM7a4cxiPhOiwzxiYKUMsU= diff --git a/tests/integration/stable/py/balances/undefined_all.jsonnet b/tests/integration/stable/py/balances/undefined_all.jsonnet index 6c7f9ce..0b863f4 100644 --- a/tests/integration/stable/py/balances/undefined_all.jsonnet +++ b/tests/integration/stable/py/balances/undefined_all.jsonnet @@ -6,7 +6,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, @@ -19,7 +19,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, diff --git a/tests/integration/stable/py/balances/undefined_method.0.hash b/tests/integration/stable/py/balances/undefined_method.0.hash index 3437439..fdf7a80 100644 --- a/tests/integration/stable/py/balances/undefined_method.0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIgYCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKaW1wb3J0IHR5cGluZwoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBfX2hhbmRsZV91bmRlZmluZWRfbWV0aG9kX18oCgkJc2VsZiwgbWV0aG9kX25hbWU6IHN0ciwgYXJnczogbGlzdFt0eXBpbmcuQW55XSwga3dhcmdzOiBkaWN0W3N0ciwgdHlwaW5nLkFueV0KCSk6CgkJcHJpbnQoCgkJCXsKCQkJCSdtZSc6ICdfX2hhbmRsZV91bmRlZmluZWRfbWV0aG9kX18nLAoJCQkJJ21ldGhvZF9uYW1lJzogbWV0aG9kX25hbWUsCgkJCQknYXJncyc6IGFyZ3MsCgkJCQkna3dhcmdzJzoga3dhcmdzLAoJCQkJJ3ZhbHVlJzogZ2wubWVzc2FnZS52YWx1ZSwKCQkJfQoJCSkKCglAZ2wucHVibGljLndyaXRlLnBheWFibGUKCWRlZiBfX3JlY2VpdmVfXyhzZWxmKToKCQlwcmludCh7J21lJzogJ19fcmVjZWl2ZV9fJywgJ3ZhbHVlJzogZ2wubWVzc2FnZS52YWx1ZX0pCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +CVco/ZIXRsnhsdwnUiHOpS6M21/OFOpnVWsKr8UJmSU= diff --git a/tests/integration/stable/py/balances/undefined_method.0_0.hash b/tests/integration/stable/py/balances/undefined_method.0_0.hash index 9942c25..f83204e 100644 --- a/tests/integration/stable/py/balances/undefined_method.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0_0.hash @@ -1 +1 @@ -LQEAAAUF +4ryjI6rvz8L0/vw0hcjJcMPF5YTKJy7l4Lg6S/B80PI= diff --git a/tests/integration/stable/py/balances/undefined_method.0_0_0.hash b/tests/integration/stable/py/balances/undefined_method.0_0_0.hash index 9942c25..f97c5fb 100644 --- a/tests/integration/stable/py/balances/undefined_method.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +iAUkGZWdh5+XCDaTTvGvHmPhggtC4yzf+LWCo82RsbA= diff --git a/tests/integration/stable/py/balances/undefined_method.jsonnet b/tests/integration/stable/py/balances/undefined_method.jsonnet index 136f8e6..202f306 100644 --- a/tests/integration/stable/py/balances/undefined_method.jsonnet +++ b/tests/integration/stable/py/balances/undefined_method.jsonnet @@ -6,7 +6,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, @@ -19,7 +19,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0.hash index 1f88d22..5792e4f 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIg4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKaW1wb3J0IHR5cGluZwoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUucGF5YWJsZQoJZGVmIF9faGFuZGxlX3VuZGVmaW5lZF9tZXRob2RfXygKCQlzZWxmLCBtZXRob2RfbmFtZTogc3RyLCBhcmdzOiBsaXN0W3R5cGluZy5BbnldLCBrd2FyZ3M6IGRpY3Rbc3RyLCB0eXBpbmcuQW55XQoJKToKCQlwcmludCgKCQkJewoJCQkJJ21lJzogJ19faGFuZGxlX3VuZGVmaW5lZF9tZXRob2RfXycsCgkJCQknbWV0aG9kX25hbWUnOiBtZXRob2RfbmFtZSwKCQkJCSdhcmdzJzogYXJncywKCQkJCSdrd2FyZ3MnOiBrd2FyZ3MsCgkJCQkndmFsdWUnOiBnbC5tZXNzYWdlLnZhbHVlLAoJCQl9CgkJKQoKCUBnbC5wdWJsaWMud3JpdGUucGF5YWJsZQoJZGVmIF9fcmVjZWl2ZV9fKHNlbGYpOgoJCXByaW50KHsnbWUnOiAnX19yZWNlaXZlX18nLCAndmFsdWUnOiBnbC5tZXNzYWdlLnZhbHVlfSkKAAAAAAAAAAAAAAAAAAAF +517OfrPviJlFJAyKX7FTyi9I/lmszxQqf+X1pHPNwJM= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash index 9942c25..67dccba 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash @@ -1 +1 @@ -LQEAAAUF +1wrIepG8CMPplz5hbrEorJT8Qpck2EEamgPXtefPXJ8= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash index 9942c25..819c3e7 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +pG5M/CV8ycw/XoDXXBszys3GrSpZv41rP3+3NrM4/cA= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.jsonnet b/tests/integration/stable/py/balances/undefined_method_payable.jsonnet index 752988a..b71c354 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.jsonnet +++ b/tests/integration/stable/py/balances/undefined_method_payable.jsonnet @@ -6,7 +6,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, @@ -19,7 +19,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, diff --git a/tests/integration/stable/py/balances/undefined_receive.0.hash b/tests/integration/stable/py/balances/undefined_receive.0.hash index b6f9e6d..2e294b8 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDHKEBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKaW1wb3J0IHR5cGluZwoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUucGF5YWJsZQoJZGVmIF9faGFuZGxlX3VuZGVmaW5lZF9tZXRob2RfXygKCQlzZWxmLCBtZXRob2RfbmFtZTogc3RyLCBhcmdzOiBsaXN0W3R5cGluZy5BbnldLCBrd2FyZ3M6IGRpY3Rbc3RyLCB0eXBpbmcuQW55XQoJKToKCQlwcmludCgKCQkJewoJCQkJJ21lJzogJ19faGFuZGxlX3VuZGVmaW5lZF9tZXRob2RfXycsCgkJCQknbWV0aG9kX25hbWUnOiBtZXRob2RfbmFtZSwKCQkJCSdhcmdzJzogYXJncywKCQkJCSdrd2FyZ3MnOiBrd2FyZ3MsCgkJCQkndmFsdWUnOiBnbC5tZXNzYWdlLnZhbHVlLAoJCQl9CgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +ycZXtHHnWvOU1nnRQ2GhOPT5e3JY/bF7kv2SMt3LvaE= diff --git a/tests/integration/stable/py/balances/undefined_receive.0_0.hash b/tests/integration/stable/py/balances/undefined_receive.0_0.hash index 9942c25..05967a4 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0_0.hash @@ -1 +1 @@ -LQEAAAUF +KMQfYuvvGY1+wV+k90wMw9+JPTeB+IrYHU8ztyAANR0= diff --git a/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash b/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash index 9942c25..e34d2c6 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +ogUY7jVH1DUBUmXHy99rPj2gZ+lrwyXerCQmyVCU2C0= diff --git a/tests/integration/stable/py/balances/undefined_receive.jsonnet b/tests/integration/stable/py/balances/undefined_receive.jsonnet index 5f3d729..7dddf3d 100644 --- a/tests/integration/stable/py/balances/undefined_receive.jsonnet +++ b/tests/integration/stable/py/balances/undefined_receive.jsonnet @@ -6,7 +6,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, @@ -19,7 +19,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": [], } |||, diff --git a/tests/integration/stable/py/embeddings/simple.0.hash b/tests/integration/stable/py/embeddings/simple.0.hash index 8df15a3..c710f19 100644 --- a/tests/integration/stable/py/embeddings/simple.0.hash +++ b/tests/integration/stable/py/embeddings/simple.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIOsBAAAjIHsKIyAgICJTZXEiOiBbCiMgICAgIHsgIkRlcGVuZHMiOiAicHktbGliLWdlbmxheWVyLWVtYmVkZGluZ3M6dGVzdCIgfSwKIyAgICAgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CiMgICBdCiMgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgppbXBvcnQgZ2VubGF5ZXJfZW1iZWRkaW5ncyBhcyBnbGUKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmLCBkZXQ6IGJvb2wpOgoJCWVtYmVkZGluZ3NfZ2VuZXJhdG9yID0gZ2xlLlNlbnRlbmNlVHJhbnNmb3JtZXIoJ2FsbC1NaW5pTE0tTDYtdjInKQoKCQlkZWYgbmRfYmxvY2soKToKCQkJcmVhbCA9IGVtYmVkZGluZ3NfZ2VuZXJhdG9yKCd3aGF0IGlzIGdlbmxheWVyPycpCgkJCXByaW50KHJlYWwuc3VtKCkpCgoJCWlmIGRldDoKCQkJbmRfYmxvY2soKQoJCWVsc2U6CgkJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEobmRfYmxvY2spCgAAAAAAAAAAAAAAAAAAAAAABQ== +Psqww5gGcWY4FATWJXHEkwM3D7P/9AhealXCuuANxvQ= diff --git a/tests/integration/stable/py/embeddings/simple.0_0.hash b/tests/integration/stable/py/embeddings/simple.0_0.hash index 9942c25..1ff2561 100644 --- a/tests/integration/stable/py/embeddings/simple.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple.0_0.hash @@ -1 +1 @@ -LQEAAAUF +4oUI2bjeB54xZ1AHYQ0ViKcSUhmnJplHGQMGB+069cY= diff --git a/tests/integration/stable/py/embeddings/simple_det.0.hash b/tests/integration/stable/py/embeddings/simple_det.0.hash index 8df15a3..c710f19 100644 --- a/tests/integration/stable/py/embeddings/simple_det.0.hash +++ b/tests/integration/stable/py/embeddings/simple_det.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIOsBAAAjIHsKIyAgICJTZXEiOiBbCiMgICAgIHsgIkRlcGVuZHMiOiAicHktbGliLWdlbmxheWVyLWVtYmVkZGluZ3M6dGVzdCIgfSwKIyAgICAgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CiMgICBdCiMgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgppbXBvcnQgZ2VubGF5ZXJfZW1iZWRkaW5ncyBhcyBnbGUKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmLCBkZXQ6IGJvb2wpOgoJCWVtYmVkZGluZ3NfZ2VuZXJhdG9yID0gZ2xlLlNlbnRlbmNlVHJhbnNmb3JtZXIoJ2FsbC1NaW5pTE0tTDYtdjInKQoKCQlkZWYgbmRfYmxvY2soKToKCQkJcmVhbCA9IGVtYmVkZGluZ3NfZ2VuZXJhdG9yKCd3aGF0IGlzIGdlbmxheWVyPycpCgkJCXByaW50KHJlYWwuc3VtKCkpCgoJCWlmIGRldDoKCQkJbmRfYmxvY2soKQoJCWVsc2U6CgkJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEobmRfYmxvY2spCgAAAAAAAAAAAAAAAAAAAAAABQ== +Psqww5gGcWY4FATWJXHEkwM3D7P/9AhealXCuuANxvQ= diff --git a/tests/integration/stable/py/embeddings/simple_det.0_0.hash b/tests/integration/stable/py/embeddings/simple_det.0_0.hash index 9942c25..9b50add 100644 --- a/tests/integration/stable/py/embeddings/simple_det.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple_det.0_0.hash @@ -1 +1 @@ -LQEAAAUF +f+yauGrfZVUn+kynMn5FcxNu8+u69hHCG713bYrxcgg= diff --git a/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash b/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash index 7e771e1..24f7f43 100644 --- a/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash +++ b/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGpsBAAAjIHsKIyAgICJTZXEiOiBbCiMgICAgIHsgIkRlcGVuZHMiOiAicHktbGliLXdvcmRfcGllY2VfdG9rZW5pemVyOnRlc3QiIH0sCiMgICAgIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQojICAgXQojIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKaW1wb3J0IHdvcmRfcGllY2VfdG9rZW5pemVyCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgZGV0OiBib29sKToKCQl0b2tlbml6ZXIgPSB3b3JkX3BpZWNlX3Rva2VuaXplci5Xb3JkUGllY2VUb2tlbml6ZXIoKQoKCQlmb3IgdHh0IGluIFsnIyMnLCAnI2hhc2h0YWcnLCAnZW1vamkg8J+agPCfmoDwn5qAJ106CgkJCXByaW50KGYne3R4dH06IHt0b2tlbml6ZXIudG9rZW5pemUodHh0KX0nKQoABQ== +SFeCTKWKlmI8VcpwYHwYsdhk+yKTDD1hKvwp1D5sMvw= diff --git a/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash b/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash index 9942c25..3cf1a17 100644 --- a/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash @@ -1 +1 @@ -LQEAAAUF +sAJQ9s+YaRiPK9FdiECc/cBoTOHWuGqNiKx/6z5yYfQ= diff --git a/tests/integration/stable/py/embeddings/vecdb.0.hash b/tests/integration/stable/py/embeddings/vecdb.0.hash index 1254831..53c8c2f 100644 --- a/tests/integration/stable/py/embeddings/vecdb.0.hash +++ b/tests/integration/stable/py/embeddings/vecdb.0.hash @@ -1 +1 @@ -LQEAAD0VowIhoYw7XQjALrPQfBJfrJU3xQPXxybmmGkvhq9v6upRRgAAAACDAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCNy1Gw62p+JfHTTSbv+DkUMeYFnyfWA+Nr4Xe9X6Ww+oAAAAAgwQBAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAzczMzMzM9D8AAAAAAQAAAAAAAAAAAAAAFaMCnN2bFjS8G1cgPa1WBpyjyG4x+crK62Vpe7OE6Vik+oAAAAAAgwIAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAABWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjArtHW19KeR3j/qGkKz3kHNgU+bllSDToaqVyrtJw9Q7jAAAAAIMCMTIzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowK/3qmf3S8yrjpIVx1Q6ejcB/QQx6foIUwOn3NSI01TlgAAAACDAgAAgD8AAABAAABAQAAAgEAAAKBAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgx7bAQAAIyB7CiMgICAiU2VxIjogWwojICAgICB7ICJEZXBlbmRzIjogInB5LWxpYi1nZW5sYXllci1lbWJlZGRpbmdzOnRlc3QiIH0sCiMgICAgIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQojICAgXQojIH0KCgppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHR5cGluZwpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCBnZW5sYXllcl9lbWJlZGRpbmdzIGFzIGdsZQoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCXg6IGdsZS5WZWNEQltucC5mbG9hdDMyLCB0eXBpbmcuTGl0ZXJhbFs1XSwgc3RyLCBnbGUuRXVjbGlkZWFuRGlzdGFuY2VTcXVhcmVkXQoKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzZWxmLnguaW5zZXJ0KG5wLmFycmF5KFsxLCAyLCAzLCA0LCA1XSwgZHR5cGU9bnAuZmxvYXQzMiksICcxMjMnKQoJCXByaW50KGxpc3Qoc2VsZi54LmtubihucC5vbmVzKDUsIGR0eXBlPW5wLmZsb2F0MzIpLCAxKSkpCgAF +bsD1qVism0InJwKNW80PFmcHu1GgbafVByJqPnHTrm4= diff --git a/tests/integration/stable/py/events/post_event.0.hash b/tests/integration/stable/py/events/post_event.0.hash index 3e13966..fdcf4a9 100644 --- a/tests/integration/stable/py/events/post_event.0.hash +++ b/tests/integration/stable/py/events/post_event.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDJCUCAAAjIHYwLjEuNQojIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgVGVzdEV2ZW50KGdsLkV2ZW50KToKCWRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2lkOiBpbnQsIGFjdGlvbjogc3RyLCAvLCAqKmJsb2IpOiAuLi4KCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJdHJ5OgoJCQkjIFRlc3QgYmFzaWMgZXZlbnQgZW1pc3Npb24KCQkJVGVzdEV2ZW50KDQyLCAnY3JlYXRlJywgdGltZXN0YW1wPTEyMzQ1Njc4OTAsIGRhdGE9J3Rlc3RfZGF0YScpLmVtaXQoKQoKCQkJIyBUZXN0IGV2ZW50IHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMKCQkJVGVzdEV2ZW50KDEwMCwgJ3VwZGF0ZScsIGFtb3VudD01MDAsIGRlc2NyaXB0aW9uPSdVcGRhdGVkIHJlY29yZCcpLmVtaXQoKQoKCQkJcHJpbnQoJ0V2ZW50cyBlbWl0dGVkIHN1Y2Nlc3NmdWxseScpCgkJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgoJCQlwcmludChmJ0Vycm9yIGVtaXR0aW5nIGV2ZW50OiB7ZX0nKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUlgwK0dR31Zfw1VHZOJ5CUOWDJzf589RAzHbKYgb8VI7QNrIMC0QIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAjRjcmVhdGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwMmBmFjdGlvbtECBGRhdGFMdGVzdF9kYXRhCXRpbWVzdGFtcJGtwOUkB3VzZXJfaWQ0Y3JlYXRlJYMCtHUd9WX8NVR2TieQlDlgyc3+fPUQMx2ymIG/FSO0DayDAqEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwI0dXBkYXRlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOsDJgZhY3Rpb26hBgZhbW91bnShHwtkZXNjcmlwdGlvbnRVcGRhdGVkIHJlY29yZAd1c2VyX2lkNHVwZGF0ZQ== +laFpjIw3DYfrlPTArMmXTH5xs97x6BGMFPTCqfy791w= diff --git a/tests/integration/stable/py/intercontract/call_view.0.hash b/tests/integration/stable/py/intercontract/call_view.0.hash index 812a651..e1d5f14 100644 --- a/tests/integration/stable/py/intercontract/call_view.0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPIAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLnZpZXcKCWRlZiBmb28oc2VsZiwgYSwgYik6CgkJcHJpbnQoJ2NvbnRyYWN0IHRvLmZvbycpCgkJaW1wb3J0IGpzb24KCgkJanNvbi5sb2FkcyA9IDExICAjIGV2aWwhCgkJcmV0dXJuIGEgKyBiCgAAAAAAAAAAAAAF +hoRnvUY3Mj/TEIz2TJXlkWUNvOA8TveXHh96fth8ZuE= diff --git a/tests/integration/stable/py/intercontract/call_view.0_0.hash b/tests/integration/stable/py/intercontract/call_view.0_0.hash index e997335..7306c03 100644 --- a/tests/integration/stable/py/intercontract/call_view.0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0_0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPoAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmLCBhZGRyOiBBZGRyZXNzKToKCQlwcmludCgnY29udHJhY3QgZnJvbS5tYWluJykKCQlwcmludChnbC5nZXRfY29udHJhY3RfYXQoYWRkcikudmlldygpLmZvbygxLCAyKSkKAAAF ++PztsaXr4qd5wddfJl2Fu4U8oRWstIRwxYHyv27UTuY= diff --git a/tests/integration/stable/py/intercontract/call_view.0_0_0.hash b/tests/integration/stable/py/intercontract/call_view.0_0_0.hash index 9942c25..d7cbe71 100644 --- a/tests/integration/stable/py/intercontract/call_view.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +0XdjrF2ifPmXO8vTYcc5vPLCnY4WQ6Aq80b/+1THJug= diff --git a/tests/integration/stable/py/intercontract/call_view.jsonnet b/tests/integration/stable/py/intercontract/call_view.jsonnet index 72066ac..e059069 100644 --- a/tests/integration/stable/py/intercontract/call_view.jsonnet +++ b/tests/integration/stable/py/intercontract/call_view.jsonnet @@ -3,7 +3,7 @@ local util = import 'templates/util.jsonnet'; {entry: util.addPaths([simple.run('${jsonnetDir}/call_view_from.py', '${jsonnetDir}/call_view_to.py', ||| { - "method": "main", + "": "main", "args": [Address(toAddr)] } ||| diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0.hash index 812a651..e1d5f14 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPIAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLnZpZXcKCWRlZiBmb28oc2VsZiwgYSwgYik6CgkJcHJpbnQoJ2NvbnRyYWN0IHRvLmZvbycpCgkJaW1wb3J0IGpzb24KCgkJanNvbi5sb2FkcyA9IDExICAjIGV2aWwhCgkJcmV0dXJuIGEgKyBiCgAAAAAAAAAAAAAF +hoRnvUY3Mj/TEIz2TJXlkWUNvOA8TveXHh96fth8ZuE= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash index fae1aac..c1dfe45 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDgBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKQGdsLmNvbnRyYWN0X2ludGVyZmFjZQpjbGFzcyBUb0lmYWNlOgoJY2xhc3MgVmlldzoKCQlkZWYgZm9vKHNlbGYsIGEsIGIpOiAuLi4KCgljbGFzcyBXcml0ZToKCQlwYXNzCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgYWRkcjogQWRkcmVzcyk6CgkJcHJpbnQoJ2NvbnRyYWN0IGZyb20ubWFpbicpCgkJcHJpbnQoVG9JZmFjZShhZGRyKS52aWV3KCkuZm9vKDEsIDIpKQoAAAAABQ== +GuxcONs92KcylFV5KtTL71mLTVRrgPdvjNlnd3LIpA8= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash index 9942c25..8e1c8c1 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +JMT2Jr4llLyHaCrY39Vbk4UUL8mYaZRD5rbGZL+myEQ= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.jsonnet b/tests/integration/stable/py/intercontract/call_view_iface.jsonnet index 65f96b6..4024d6c 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.jsonnet +++ b/tests/integration/stable/py/intercontract/call_view_iface.jsonnet @@ -3,7 +3,7 @@ local util = import 'templates/util.jsonnet'; {entry: util.addPaths([simple.run('${jsonnetDir}/call_view_from_iface.py', '${jsonnetDir}/call_view_to.py', ||| { - "method": "main", + "": "main", "args": [Address(toAddr)] } ||| diff --git a/tests/integration/stable/py/intercontract/deploy.0.hash b/tests/integration/stable/py/intercontract/deploy.0.hash index 793b14e..42a1624 100644 --- a/tests/integration/stable/py/intercontract/deploy.0.hash +++ b/tests/integration/stable/py/intercontract/deploy.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDLIAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCWdsLmRlcGxveV9jb250cmFjdChjb2RlPSdub3QgcmVhbGx5IGEgY29udHJhY3QnLmVuY29kZSgndXRmLTgnKSkKAAAAAAAAAAAAAAU= +gNhYAfgt09tSrUmGHFP+etsUOTqb9gLNEm0xKBX/3uY= diff --git a/tests/integration/stable/py/intercontract/deploy_salt.0.hash b/tests/integration/stable/py/intercontract/deploy_salt.0.hash index 1cf56e1..67aaaa8 100644 --- a/tests/integration/stable/py/intercontract/deploy_salt.0.hash +++ b/tests/integration/stable/py/intercontract/deploy_salt.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEOAAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXJlcyA9IGdsLmRlcGxveV9jb250cmFjdCgKCQkJY29kZT0nbm90IHJlYWxseSBhIGNvbnRyYWN0Jy5lbmNvZGUoJ3V0Zi04JyksIHNhbHRfbm9uY2U9dTI1NigxKQoJCSkKCQlwcmludChyZXMpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +hzKntavz/ozdq7mGpWH4ayO/o5E+wmveqd8dBE0IVRo= diff --git a/tests/integration/stable/py/intercontract/send_message.0.hash b/tests/integration/stable/py/intercontract/send_message.0.hash index dd2111c..ce8ec8a 100644 --- a/tests/integration/stable/py/intercontract/send_message.0.hash +++ b/tests/integration/stable/py/intercontract/send_message.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDK8AAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCWdsLmdldF9jb250cmFjdF9hdChnbC5BZGRyZXNzKGInXHgzMCcgKiAyMCkpLmVtaXQoKS5mb28oMSwgMikKAAAAAAAAAAAAAAAAAAU= +A1QCxeQlVU4hv2yI5/2LaVeXrjUCjGuoZjs/d4gU7t4= diff --git a/tests/integration/stable/py/intercontract/send_message_eth.0.hash b/tests/integration/stable/py/intercontract/send_message_eth.0.hash index 73b9ea7..e64656f 100644 --- a/tests/integration/stable/py/intercontract/send_message_eth.0.hash +++ b/tests/integration/stable/py/intercontract/send_message_eth.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEhsBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKQGdsLmV2bS5jb250cmFjdF9pbnRlcmZhY2UKY2xhc3MgR2hvc3Q6CgljbGFzcyBWaWV3OgoJCXBhc3MKCgljbGFzcyBXcml0ZToKCQlkZWYgdGVzdChzZWxmLCB4OiB1MjU2LCAvKSAtPiBOb25lOiAuLi4KCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJR2hvc3QoQWRkcmVzcyhiJ1x4MzAnICogMjApKS5lbWl0KCkudGVzdCh1MjU2KDEwKSkKAAU= +8DM+JF6f1MwqF0JsTUsRQxNKl4GR8uIcorKuHZC9u6Y= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0.hash b/tests/integration/stable/py/intercontract/send_message_on.0.hash index 456a35f..2361d7d 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMQ+gAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmLCBvbjogc3RyKToKCQl0cnk6CgkJCWdsLmdldF9jb250cmFjdF9hdChnbC5BZGRyZXNzKGInXHgzMCcgKiAyMCkpLmVtaXQob249b24pLmZvbygxLCAyKQoJCWV4Y2VwdCBTeXN0ZW1FcnJvciBhcyBlOgoJCQlwcmludChlKQoAAAU= +7a5ztIogTAUik3RYtjZaKujqagldYUKwfTy/CeiMXJg= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0_0.hash b/tests/integration/stable/py/intercontract/send_message_on.0_0.hash index 9942c25..5163b4e 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0_0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0_0.hash @@ -1 +1 @@ -LQEAAAUF +d+QkD+eRXLQDgkjBbrfzi+KexQdCZfha969iT/zNcqg= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash b/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash index 9942c25..60cd08e 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +tpRxNodE41z6lse5OtfDV1Ly7kZkbUoW7fmKcKLhwVM= diff --git a/tests/integration/stable/py/intercontract/send_message_on.jsonnet b/tests/integration/stable/py/intercontract/send_message_on.jsonnet index ecf904a..58bc6eb 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.jsonnet +++ b/tests/integration/stable/py/intercontract/send_message_on.jsonnet @@ -6,7 +6,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "main", + "": "main", "args": ["finalized"], } ||| @@ -16,7 +16,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": ["accepted"], } ||| @@ -26,7 +26,7 @@ local util = import 'templates/util.jsonnet'; message: msg, "calldata": ||| { - "method": "main", + "": "main", "args": ["random"], } ||| diff --git a/tests/integration/stable/py/other/meth/method_init.0.hash b/tests/integration/stable/py/other/meth/method_init.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/py/other/meth/method_init.0.hash +++ b/tests/integration/stable/py/other/meth/method_init.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash b/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash index 7a6c22e..6d7021f 100644 --- a/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash +++ b/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +ZJJgzNB+9VkcWpwBkqwNor3pVhAnP7gdGLeXKro7/8Q= diff --git a/tests/integration/stable/py/other/meth/method_init_wrong_name.jsonnet b/tests/integration/stable/py/other/meth/method_init_wrong_name.jsonnet index ce80daf..2f24f38 100644 --- a/tests/integration/stable/py/other/meth/method_init_wrong_name.jsonnet +++ b/tests/integration/stable/py/other/meth/method_init_wrong_name.jsonnet @@ -3,7 +3,7 @@ local util = import 'templates/util.jsonnet'; {entry: util.addPaths([simple.run('${jsonnetDir}/methods.py') { "calldata": ||| { - "method": "pub", + "": "pub", "args": [] } |||, diff --git a/tests/integration/stable/py/other/meth/method_public.0.hash b/tests/integration/stable/py/other/meth/method_public.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/py/other/meth/method_public.0.hash +++ b/tests/integration/stable/py/other/meth/method_public.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/py/other/meth/method_public.0_0.hash b/tests/integration/stable/py/other/meth/method_public.0_0.hash index 9942c25..2ae1110 100644 --- a/tests/integration/stable/py/other/meth/method_public.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_public.0_0.hash @@ -1 +1 @@ -LQEAAAUF +tstr3pfV9/kgF6ZTQomzr1dzeA5XheF1UmnNGGp+VOM= diff --git a/tests/integration/stable/py/other/meth/method_retn.0.hash b/tests/integration/stable/py/other/meth/method_retn.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/py/other/meth/method_retn.0.hash +++ b/tests/integration/stable/py/other/meth/method_retn.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/py/other/meth/method_retn.0_0.hash b/tests/integration/stable/py/other/meth/method_retn.0_0.hash index ac9183e..8a61f33 100644 --- a/tests/integration/stable/py/other/meth/method_retn.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_retn.0_0.hash @@ -1 +1 @@ -LQEOAXhRAAUF +RZkwpumNBog7a/YSxKdPnGZar/pGgjEGJHwT3YQlNJU= diff --git a/tests/integration/stable/py/other/meth/method_retn_view.0.hash b/tests/integration/stable/py/other/meth/method_retn_view.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/py/other/meth/method_retn_view.0.hash +++ b/tests/integration/stable/py/other/meth/method_retn_view.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash b/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash index ac9183e..77cc6ad 100644 --- a/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash @@ -1 +1 @@ -LQEOAXhRAAUF +lk1UdO9ttBa7X6nNt9eQpWTg89hxByVolb04C0soM2s= diff --git a/tests/integration/stable/py/other/meth/method_rollback.0.hash b/tests/integration/stable/py/other/meth/method_rollback.0.hash index 7a6c22e..39cc749 100644 --- a/tests/integration/stable/py/other/meth/method_rollback.0.hash +++ b/tests/integration/stable/py/other/meth/method_rollback.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKF4CAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdpbml0JykKCglAZ2wucHVibGljLndyaXRlCglkZWYgcHViKHNlbGYpOgoJCWV2YWwoInByaW50KCdpbml0IGZyb20gcHViIScpIikKCglAZ2wucHVibGljLndyaXRlCglkZWYgcmJhY2soc2VsZik6CgkJZ2wuYWR2YW5jZWQudXNlcl9lcnJvcl9pbW1lZGlhdGUoIm5haCwgSSB3b24ndCBleGVjdXRlIikKCglkZWYgcHJpdihzZWxmKToKCQlldmFsKCJwcmludCgnaW5pdCBmcm9tIHByaXYhJykiKQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiByZXRuKHNlbGYpOgoJCXJldHVybiB7J3gnOiAxMH0KCglAZ2wucHVibGljLnZpZXcKCWRlZiByZXRuX3ZpZXcoc2VsZik6CgkJcmV0dXJuIHsneCc6IDEwfQoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBkZXRfdmlvbChzZWxmKToKCQlnbC5ub25kZXQud2ViLnJlbmRlcigKCQkJJ2h0dHBzOi8vdGVzdC1zZXJ2ZXIuZ2VubGF5ZXIuY29tL3N0YXRpYy9nZW52bS9oZWxsby5odG1sJywKCQkJbW9kZT0ndGV4dCcsCgkJKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= diff --git a/tests/integration/stable/py/other/meth/method_rollback.0_0.hash b/tests/integration/stable/py/other/meth/method_rollback.0_0.hash index ed03985..3cff978 100644 --- a/tests/integration/stable/py/other/meth/method_rollback.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_rollback.0_0.hash @@ -1 +1 @@ -LQmkAW5haCwgSSB3b24ndCBleGVjdXRlAAUF +laxZB4KYjVLGCXIU1PT5/jx6Xxi20amh+rV/0T+oHTE= diff --git a/tests/integration/stable/py/other/ret/returns.0.hash b/tests/integration/stable/py/other/ret/returns.0.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.0.hash +++ b/tests/integration/stable/py/other/ret/returns.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.0_0.hash b/tests/integration/stable/py/other/ret/returns.0_0.hash index 373e647..e511c17 100644 --- a/tests/integration/stable/py/other/ret/returns.0_0.hash +++ b/tests/integration/stable/py/other/ret/returns.0_0.hash @@ -1 +1 @@ -LQEYAQEBAQEBAQEBAQEBAQEBAQEBAQEABQU= +2tjjbCtD83th/FR8WnHw15It8k2SbUyKiymCvFT29dM= diff --git a/tests/integration/stable/py/other/ret/returns.1.hash b/tests/integration/stable/py/other/ret/returns.1.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.1.hash +++ b/tests/integration/stable/py/other/ret/returns.1.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.1_0.hash b/tests/integration/stable/py/other/ret/returns.1_0.hash index fcc9cff..6078d9a 100644 --- a/tests/integration/stable/py/other/ret/returns.1_0.hash +++ b/tests/integration/stable/py/other/ret/returns.1_0.hash @@ -1 +1 @@ -LQEcYWJjAAUF +tNHZd2Q7qNIyOnFYkdxPmS4K8YifH6pIrMmWWql06fg= diff --git a/tests/integration/stable/py/other/ret/returns.2.hash b/tests/integration/stable/py/other/ret/returns.2.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.2.hash +++ b/tests/integration/stable/py/other/ret/returns.2.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.2_0.hash b/tests/integration/stable/py/other/ret/returns.2_0.hash index ae33214..559bcf3 100644 --- a/tests/integration/stable/py/other/ret/returns.2_0.hash +++ b/tests/integration/stable/py/other/ret/returns.2_0.hash @@ -1 +1 @@ -LQHZBwAFBQ== +Q7vlO5JEUySqbNkqBzn6FFiNziJHOnECnkLtmwPDMI4= diff --git a/tests/integration/stable/py/other/ret/returns.3.hash b/tests/integration/stable/py/other/ret/returns.3.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.3.hash +++ b/tests/integration/stable/py/other/ret/returns.3.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.3_0.hash b/tests/integration/stable/py/other/ret/returns.3_0.hash index 1c55f7e..cb79e13 100644 --- a/tests/integration/stable/py/other/ret/returns.3_0.hash +++ b/tests/integration/stable/py/other/ret/returns.3_0.hash @@ -1 +1 @@ -LQEbeHl6AAUF +W9XcLzaksgG0ewUEpKXdtwNmNrCLQdkuQ9nVgmMpero= diff --git a/tests/integration/stable/py/other/ret/returns.4.hash b/tests/integration/stable/py/other/ret/returns.4.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.4.hash +++ b/tests/integration/stable/py/other/ret/returns.4.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.4_0.hash b/tests/integration/stable/py/other/ret/returns.4_0.hash index 911179d..06a252f 100644 --- a/tests/integration/stable/py/other/ret/returns.4_0.hash +++ b/tests/integration/stable/py/other/ret/returns.4_0.hash @@ -1 +1 @@ -LQEQAAUF +u+gDzlHfdsAI68Kf2kgUSAFC4VI6hhiIVQpCmFkXukw= diff --git a/tests/integration/stable/py/other/ret/returns.5.hash b/tests/integration/stable/py/other/ret/returns.5.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.5.hash +++ b/tests/integration/stable/py/other/ret/returns.5.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.5_0.hash b/tests/integration/stable/py/other/ret/returns.5_0.hash index 9942c25..2a7cd09 100644 --- a/tests/integration/stable/py/other/ret/returns.5_0.hash +++ b/tests/integration/stable/py/other/ret/returns.5_0.hash @@ -1 +1 @@ -LQEAAAUF +LFZz1By4iqyKCK9HXVcTd1QsE9BSEGxhWc361bKUTgs= diff --git a/tests/integration/stable/py/other/ret/returns.6.hash b/tests/integration/stable/py/other/ret/returns.6.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.6.hash +++ b/tests/integration/stable/py/other/ret/returns.6.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.6_0.hash b/tests/integration/stable/py/other/ret/returns.6_0.hash index f9aa455..0e825e2 100644 --- a/tests/integration/stable/py/other/ret/returns.6_0.hash +++ b/tests/integration/stable/py/other/ret/returns.6_0.hash @@ -1 +1 @@ -LQEIAAUF +9canHlGwZvVAKXlrvHhmtUDXjF6eR3JUgsJMsAAtbR4= diff --git a/tests/integration/stable/py/other/ret/returns.7.hash b/tests/integration/stable/py/other/ret/returns.7.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.7.hash +++ b/tests/integration/stable/py/other/ret/returns.7.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.7_0.hash b/tests/integration/stable/py/other/ret/returns.7_0.hash index a870ecc..ba9db1f 100644 --- a/tests/integration/stable/py/other/ret/returns.7_0.hash +++ b/tests/integration/stable/py/other/ret/returns.7_0.hash @@ -1 +1 @@ -LQEVGAICAgICAgICAgICAgICAgICAgICGAMDAwMDAwMDAwMDAwMDAwMDAwMDAAUF +OxSHqovJkl46LzxySmZM4oBiauItsXNMj16iTrpc/cM= diff --git a/tests/integration/stable/py/other/ret/returns.8.hash b/tests/integration/stable/py/other/ret/returns.8.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.8.hash +++ b/tests/integration/stable/py/other/ret/returns.8.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.8_0.hash b/tests/integration/stable/py/other/ret/returns.8_0.hash index c2ca057..68cce87 100644 --- a/tests/integration/stable/py/other/ret/returns.8_0.hash +++ b/tests/integration/stable/py/other/ret/returns.8_0.hash @@ -1 +1 @@ -LQEWAWEJAWIdCREZAAUF +YDqflQu/Im4iPDrIw8WiHh0IgjhVJxQmS+AR8G6gKhI= diff --git a/tests/integration/stable/py/other/ret/returns.9.hash b/tests/integration/stable/py/other/ret/returns.9.hash index 7e1c302..0ab215e 100644 --- a/tests/integration/stable/py/other/ret/returns.9.hash +++ b/tests/integration/stable/py/other/ret/returns.9.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGG0BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1haW4oc2VsZiwgaWR4OiBpbnQpOgoJCXJldCA9IFsKCQkJQWRkcmVzcyhiJ1x4MDEnICogMjApLAoJCQknYWJjJywKCQkJMTIzLAoJCQliJ3h5eicsCgkJCVRydWUsCgkJCU5vbmUsCgkJCUZhbHNlLAoJCQlbQWRkcmVzcyhiJ1x4MDInICogMjApLCBBZGRyZXNzKGInXHgwMycgKiAyMCldLAoJCQl7J2EnOiAxLCAnYic6IFsxLCAyLCAzXX0sCgkJXQoJCXByaW50KGYne2lkeH0gWzAuLi57bGVuKHJldCl9KScpCgkJcmV0dXJuIHJldFtpZHhdCgAAAAAAAAAAAAAAAAAAAAU= ++ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= diff --git a/tests/integration/stable/py/other/ret/returns.9_0.hash b/tests/integration/stable/py/other/ret/returns.9_0.hash index 131eae2..429c8f8 100644 --- a/tests/integration/stable/py/other/ret/returns.9_0.hash +++ b/tests/integration/stable/py/other/ret/returns.9_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +Y671Js+C5QIYT+tEH/P04ZFVIJR0G9aXGKQA6jKSLdI= diff --git a/tests/integration/stable/py/pitfalls/error_msg.0.hash b/tests/integration/stable/py/pitfalls/error_msg.0.hash index c05bd0e..241b14c 100644 --- a/tests/integration/stable/py/pitfalls/error_msg.0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDCHYAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKAAAAAAAABQ== +oHiFQoCtCl031e3QHX2DPhGDBvto5836pjcJCNCfJJ8= diff --git a/tests/integration/stable/py/pitfalls/error_msg.0_0.hash b/tests/integration/stable/py/pitfalls/error_msg.0_0.hash index 9942c25..771242b 100644 --- a/tests/integration/stable/py/pitfalls/error_msg.0_0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg.0_0.hash @@ -1 +1 @@ -LQEAAAUF +pWR5PWcwggPSVR+0lNrt1JL+d5uGV9YURBeOjK63sOQ= diff --git a/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash b/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash index 96dddc5..91b5390 100644 --- a/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDs4AAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlLnBheWFibGUKCWRlZiBfX29uX2Vycm9yZWRfbWVzc2FnZV9fKHNlbGYpOgoJCXByaW50KCdlcnJvcmVkIGJ1dCBvaycpCgAAAAAAAAAAAAAAAAAABQ== +zZ/vTTuvN28/+0m8Czc/UVUTbGyj+jX5PZ0Jys80al4= diff --git a/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash b/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash index 9942c25..4f5428d 100644 --- a/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash @@ -1 +1 @@ -LQEAAAUF +PnLgXqtzmp3ZlNuKSjoAERM9/XRlBWLFr9dQaUqZpAo= diff --git a/tests/integration/stable/py/pitfalls/multi_contract.0.hash b/tests/integration/stable/py/pitfalls/multi_contract.0.hash index ab82a4c..5456c66 100644 --- a/tests/integration/stable/py/pitfalls/multi_contract.0.hash +++ b/tests/integration/stable/py/pitfalls/multi_contract.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEADRWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMO0wAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdDEoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdoZWxsbyB3b3JsZCcpCgoKY2xhc3MgQ29udHJhY3QyKGdsLkNvbnRyYWN0KToKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlwcmludCgnaGVsbG8gd29ybGQnKQoAAAAAAAAAAAAF +jgzRiMEG2OFEOV8gREgnp7hdV0WhsEVHjKddD5uw3gk= diff --git a/tests/integration/stable/py/pitfalls/pub_ctor.0.hash b/tests/integration/stable/py/pitfalls/pub_ctor.0.hash index 0355cbb..bcb1382 100644 --- a/tests/integration/stable/py/pitfalls/pub_ctor.0.hash +++ b/tests/integration/stable/py/pitfalls/pub_ctor.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMKmAAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglAZ2wucHVibGljLndyaXRlCglkZWYgX19pbml0X18oc2VsZik6CgkJcHJpbnQoJ2hlbGxvIHdvcmxkJykKAAAAAAU= +rFvL7Uu+OJo/WsXaUzB2tX/Pn9NJhQ5Jx1vizsxqQGU= diff --git a/tests/integration/stable/py/pitfalls/store_proxy.0.hash b/tests/integration/stable/py/pitfalls/store_proxy.0.hash index a7521a0..90bca57 100644 --- a/tests/integration/stable/py/pitfalls/store_proxy.0.hash +++ b/tests/integration/stable/py/pitfalls/store_proxy.0.hash @@ -1 +1 @@ -LQEAAC0VowI3LUbDran4l8dNNJu/4ORQx5gWfJ9YD42vhd71fpbD6gAAAACDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCv96pn90vMq46SFcdUOno3Af0EMen6CFMDp9zUiNNU5YAAAAAgwISAAAA4m1FZwAAAAAyeQYAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMg8wEAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9Cgpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKaW1wb3J0IGRhdGV0aW1lCgoKQGFsbG93X3N0b3JhZ2UKQGRhdGFjbGFzcwpjbGFzcyBVc2VyOgoJbmFtZTogc3RyCgliaXJ0aGRheTogZGF0ZXRpbWUuZGF0ZXRpbWUKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6Cgl1c2VyczogRHluQXJyYXlbVXNlcl0KCglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi51c2Vycy5hcHBlbmQoVXNlcignQWRhJywgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkpKQoJCXVzZXIgPSBzZWxmLnVzZXJzWy0xXQoJCXNlbGYudXNlcnNbLTFdID0gVXNlcignRGVmaW5pdGVseSBub3QgQWRhJywgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkpCgkJcHJpbnQodXNlci5uYW1lKQoJCWFzc2VydCB1c2VyLm5hbWUgPT0gJ0RlZmluaXRlbHkgbm90IEFkYScgICMgdGhpcyBpcyB0cnVlIQoAAAAAAAAAAAAVowLqcPwreAJvhKkLKuiDdmswb5XeQcItsL4FW3Rda5X0HwAAAACDAkRlZmluaXRlbHkgbm90IEFkYQAAAAAAAAAAAAAAAAAABQ== +wGqfaMHCh+pL7Fl9F0xedHHXUEz//o1PaYWAMfYU+Ag= diff --git a/tests/integration/stable/py/rollbacks/call_view.0.hash b/tests/integration/stable/py/rollbacks/call_view.0.hash index e7c4db9..c7732fb 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEv4AAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgZm9vKHNlbGYsIGEsIGIpOgoJCXByaW50KCdjb250cmFjdCB0by5mb28nKQoJCWdsLmFkdmFuY2VkLnVzZXJfZXJyb3JfaW1tZWRpYXRlKGYibmFoLCBJIHdvbid0IGV4ZWN1dGUge2EgKyBifSIpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +K7Z27VdBdIyZTEC9C8syloEd8i9AtdDeyYpAEkV3t4c= diff --git a/tests/integration/stable/py/rollbacks/call_view.0_0.hash b/tests/integration/stable/py/rollbacks/call_view.0_0.hash index 0b1bab5..fedd06e 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0_0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0_0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGGYBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmLCBhZGRyOiBBZGRyZXNzKToKCQlwcmludCgnY29udHJhY3QgZnJvbS5tYWluJykKCQl0cnk6CgkJCXJlcyA9IGdsLmdldF9jb250cmFjdF9hdChhZGRyKS52aWV3KCkuZm9vKDEsIDIpLmdldCgpCgkJZXhjZXB0IGdsLnZtLlVzZXJFcnJvciBhcyByOgoJCQlwcmludCgnaGFuZGxlZCcsIHIubWVzc2FnZSkKCQllbHNlOgoJCQlwcmludChyZXMpCgkJCWV4aXQoMSkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= ++S+8ixUk073ZIxSV+zl2GkMSiopJpnjRWf9enPTf4Jc= diff --git a/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash b/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash index 9942c25..0e4b647 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +ncJQ8redVn3jRIgtMzghTxvkmILQ31Ll8KDE2LT9F5c= diff --git a/tests/integration/stable/py/rollbacks/call_view.jsonnet b/tests/integration/stable/py/rollbacks/call_view.jsonnet index 0a7b89b..21d52f5 100644 --- a/tests/integration/stable/py/rollbacks/call_view.jsonnet +++ b/tests/integration/stable/py/rollbacks/call_view.jsonnet @@ -2,7 +2,7 @@ local simple = import 'templates/two.jsonnet'; local util = import 'templates/util.jsonnet'; {entry: util.addPaths([simple.run('${jsonnetDir}/call_view_from.py', '${jsonnetDir}/call_view_to.py', ||| { - "method": "main", + "": "main", "args": [Address(toAddr)] } ||| diff --git a/tests/integration/stable/py/rollbacks/nondet.0.hash b/tests/integration/stable/py/rollbacks/nondet.0.hash index 834a667..a723748 100644 --- a/tests/integration/stable/py/rollbacks/nondet.0.hash +++ b/tests/integration/stable/py/rollbacks/nondet.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFlABAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXRyeToKCgkJCWRlZiBydW4oKToKCQkJCWdsLmFkdmFuY2VkLnVzZXJfZXJyb3JfaW1tZWRpYXRlKCJuYWgsIEkgd29uJ3QgZXhlY3V0ZSIpCgoJCQlyZXMgPSBnbC5lcV9wcmluY2lwbGUuc3RyaWN0X2VxKHJ1bikuZ2V0KCkKCQlleGNlcHQgZ2wudm0uVXNlckVycm9yIGFzIHI6CgkJCXByaW50KCdoYW5kbGVkJywgci5tZXNzYWdlKQoJCWVsc2U6CgkJCXByaW50KHJlcykKCQkJZXhpdCgxKQoAAAAAAAAAAAAAAAAF +UdyQ8LqDXvz/OImvfRItUObp4PB+8iZ3DHsr37MrTck= diff --git a/tests/integration/stable/py/rollbacks/simple.0.hash b/tests/integration/stable/py/rollbacks/simple.0.hash index f42f2fa..4344b4e 100644 --- a/tests/integration/stable/py/rollbacks/simple.0.hash +++ b/tests/integration/stable/py/rollbacks/simple.0.hash @@ -1 +1 @@ -LQmkAW5haCwgSSB3b24ndCBleGVjdXRlABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDKoAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCWdsLmFkdmFuY2VkLnVzZXJfZXJyb3JfaW1tZWRpYXRlKCJuYWgsIEkgd29uJ3QgZXhlY3V0ZSIpCgAAAAAAAAAAAAAAAAAAAAAAAAU= +q3SSNK4Y2zYspQIMVhHT8Awy9Yh60xdFjMwsILo6yGU= diff --git a/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash b/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash index b512920..96559bf 100644 --- a/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWdsYiA9IGdsb2JhbHMoKQoJCXByaW50KGYne2dsLnZtLnNwYXduX3NhbmRib3gobGFtYmRhOiBldmFsKGV2LCBnbGIpKX0nKQoJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgAF +/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= diff --git a/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash b/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash index 9942c25..dc2e1ee 100644 --- a/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash @@ -1 +1 @@ -LQEAAAUF +/czKEgfvZcq5PoUkEedxQtm9F5ePhaSAB9zBQpWV4tE= diff --git a/tests/integration/stable/py/sandbox/det/s/exit.0.hash b/tests/integration/stable/py/sandbox/det/s/exit.0.hash index b512920..96559bf 100644 --- a/tests/integration/stable/py/sandbox/det/s/exit.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/exit.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWdsYiA9IGdsb2JhbHMoKQoJCXByaW50KGYne2dsLnZtLnNwYXduX3NhbmRib3gobGFtYmRhOiBldmFsKGV2LCBnbGIpKX0nKQoJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgAF +/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= diff --git a/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash b/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash index 9942c25..8f836c2 100644 --- a/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash @@ -1 +1 @@ -LQEAAAUF +X/owXxjspoQ/PVcxrTiEu5LhANLNcBq1L4Zx6LMtRnA= diff --git a/tests/integration/stable/py/sandbox/det/s/print.0.hash b/tests/integration/stable/py/sandbox/det/s/print.0.hash index b512920..96559bf 100644 --- a/tests/integration/stable/py/sandbox/det/s/print.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/print.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWdsYiA9IGdsb2JhbHMoKQoJCXByaW50KGYne2dsLnZtLnNwYXduX3NhbmRib3gobGFtYmRhOiBldmFsKGV2LCBnbGIpKX0nKQoJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgAF +/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= diff --git a/tests/integration/stable/py/sandbox/det/s/print.0_0.hash b/tests/integration/stable/py/sandbox/det/s/print.0_0.hash index 9942c25..41bf0d7 100644 --- a/tests/integration/stable/py/sandbox/det/s/print.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/print.0_0.hash @@ -1 +1 @@ -LQEAAAUF +QwAKfPgeq4fI2C5PjApHKzZZ9NgOUAEqO91vQ973mbY= diff --git a/tests/integration/stable/py/sandbox/det/s/rollback.0.hash b/tests/integration/stable/py/sandbox/det/s/rollback.0.hash index b512920..96559bf 100644 --- a/tests/integration/stable/py/sandbox/det/s/rollback.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/rollback.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWdsYiA9IGdsb2JhbHMoKQoJCXByaW50KGYne2dsLnZtLnNwYXduX3NhbmRib3gobGFtYmRhOiBldmFsKGV2LCBnbGIpKX0nKQoJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgAF +/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= diff --git a/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash b/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash index 9942c25..73514e8 100644 --- a/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash @@ -1 +1 @@ -LQEAAAUF +iaWKxRdFNqlWlo6aE6EdS/mkYxSlut6Swoz52JaIms0= diff --git a/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash b/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash index b512920..96559bf 100644 --- a/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEPsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWdsYiA9IGdsb2JhbHMoKQoJCXByaW50KGYne2dsLnZtLnNwYXduX3NhbmRib3gobGFtYmRhOiBldmFsKGV2LCBnbGIpKX0nKQoJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgAF +/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= diff --git a/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash b/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash index 9942c25..b0c030f 100644 --- a/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash @@ -1 +1 @@ -LQEAAAUF +ZteiiRBaAkH74LDzcQGVkBi0pvD1QAIyp6jdSKjBlbA= diff --git a/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash b/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash index 068be0f..15ca614 100644 --- a/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash +++ b/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash @@ -1 +1 @@ -LQEAAB0VowI3LUbDran4l8dNNJu/4ORQx5gWfJ9YD42vhd71fpbD6gAAAACDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgxZMAQAAIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCWNvdW50ZXI6IHU4CgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KGYnaGVsbG8gd29ybGQge3NlbGYuY291bnRlcn0nKQoKCQlkZWYgc2IoKToKCQkJc2VsZi5jb3VudGVyICs9IDEKCgkJcHJpbnQoZidjb3VudGVyIGJlZm9yZToge3NlbGYuY291bnRlcn0nKQoJCWdsLnZtLnNwYXduX3NhbmRib3goc2IsIGFsbG93X3dyaXRlX29wcz1UcnVlKQoJCXByaW50KGYnY291bnRlciBhZnRlcjoge3NlbGYuY291bnRlcn0nKQoAAAAAAAAAAAAAAAAAAAAABQ== +2xi6BEcT4aBjJPH21nQa4EAR6S5Zy1vs1lolOZnXD44= diff --git a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash index 4aabedf..af4a9ea 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWRlZiBydW5fbmRldCgpOgoJCQlnbGIgPSBnbG9iYWxzKCkKCQkJcHJpbnQoZid7Z2wudm0uc3Bhd25fc2FuZGJveChsYW1iZGE6IGV2YWwoZXYsIGdsYikpfScpCgkJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuX25kZXQpCgAAAAAABQ== +P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= diff --git a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash index 9942c25..969a2ba 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash @@ -1 +1 @@ -LQEAAAUF +WuWV8ucgSe/CB3fxB11JfLPJmXi7wfLC9hhsK6+43c0= diff --git a/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash b/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash index 4aabedf..af4a9ea 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWRlZiBydW5fbmRldCgpOgoJCQlnbGIgPSBnbG9iYWxzKCkKCQkJcHJpbnQoZid7Z2wudm0uc3Bhd25fc2FuZGJveChsYW1iZGE6IGV2YWwoZXYsIGdsYikpfScpCgkJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuX25kZXQpCgAAAAAABQ== +P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= diff --git a/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash index 9942c25..c5b9453 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash @@ -1 +1 @@ -LQEAAAUF +DKF1iskAkdjhuytCXuV2D1FWnlNJXMNy+gVWgdCkIdo= diff --git a/tests/integration/stable/py/sandbox/non-det/s/print.0.hash b/tests/integration/stable/py/sandbox/non-det/s/print.0.hash index 4aabedf..af4a9ea 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/print.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/print.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWRlZiBydW5fbmRldCgpOgoJCQlnbGIgPSBnbG9iYWxzKCkKCQkJcHJpbnQoZid7Z2wudm0uc3Bhd25fc2FuZGJveChsYW1iZGE6IGV2YWwoZXYsIGdsYikpfScpCgkJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuX25kZXQpCgAAAAAABQ== +P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= diff --git a/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash index 9942c25..3cbcf64 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash @@ -1 +1 @@ -LQEAAAUF +p4BMlv2Wi4L8mdk/Cc4c6fF1JAfJeEuLRRGwASIz0ao= diff --git a/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash b/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash index 4aabedf..af4a9ea 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDcBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgppbXBvcnQganNvbgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBtYWluKHNlbGYsIGV2OiBzdHIpOgoJCWRlZiBydW5fbmRldCgpOgoJCQlnbGIgPSBnbG9iYWxzKCkKCQkJcHJpbnQoZid7Z2wudm0uc3Bhd25fc2FuZGJveChsYW1iZGE6IGV2YWwoZXYsIGdsYikpfScpCgkJCXByaW50KGpzb24ubG9hZHMuX19uYW1lX18pCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEocnVuX25kZXQpCgAAAAAABQ== +P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= diff --git a/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash index 9942c25..3e674a9 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash @@ -1 +1 @@ -LQEAAAUF +fIL3+6jiLIE59QWtjSlMDZKwU/pXqNGqa6HOCGh3G+0= diff --git a/tests/integration/stable/py/schemas/complex_types.0.hash b/tests/integration/stable/py/schemas/complex_types.0.hash index ede2899..a07ec20 100644 --- a/tests/integration/stable/py/schemas/complex_types.0.hash +++ b/tests/integration/stable/py/schemas/complex_types.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDJkMCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCmltcG9ydCB0eXBpbmcKCgpjbGFzcyBNeVREaWN0KHR5cGluZy5UeXBlZERpY3QpOgoJYTogaW50CgliOiBzdHIKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBvcHQoCgkJc2VsZiwgYTE6IGxpc3QgfCBOb25lLCBhMjogdHlwaW5nLlVuaW9uW3N0ciwgYnl0ZXNdLCBhMzogdHlwaW5nLk9wdGlvbmFsW3N0cl0KCSk6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBsc3QoCgkJc2VsZiwgYTE6IGxpc3Rbc3RyXSwgYTI6IHR5cGluZy5TZXF1ZW5jZVtzdHJdLCBhMzogdHlwaW5nLk11dGFibGVTZXF1ZW5jZVtpbnRdCgkpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgZGljdCgKCQlzZWxmLAoJCWExOiBkaWN0W3N0ciwgaW50XSwKCQlhMjogdHlwaW5nLk1hcHBpbmdbc3RyLCBzdHJdLAoJCWEzOiB0eXBpbmcuTXV0YWJsZU1hcHBpbmdbc3RyLCBpbnQgfCBzdHIgfCBOb25lXSwKCSk6CgkJcGFzcwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +DdOlg5vnoirF3hBK01kN4ykb4fQIntdeS7Rnxnt9Nuw= diff --git a/tests/integration/stable/py/schemas/complex_types.0_0.hash b/tests/integration/stable/py/schemas/complex_types.0_0.hash index 58efe80..dc773ef 100644 --- a/tests/integration/stable/py/schemas/complex_types.0_0.hash +++ b/tests/integration/stable/py/schemas/complex_types.0_0.hash @@ -1 +1 @@ -LQH0InsiY3RvciI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e319LCJtZXRob2RzIjp7ImRpY3QiOnsicGFyYW1zIjpbWyJhMSIseyIkZGljdCI6ImludCJ9XSxbImEyIix7IiRkaWN0Ijoic3RyaW5nIn1dLFsiYTMiLHsiJGRpY3QiOnsiJG9yIjpbImludCIsInN0cmluZyIsIm51bGwiXX19XV0sImt3cGFyYW1zIjp7fSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sImxzdCI6eyJwYXJhbXMiOltbImExIixbeyIkcmVwIjoic3RyaW5nIn1dXSxbImEyIixbeyIkcmVwIjoic3RyaW5nIn1dXSxbImEzIixbeyIkcmVwIjoiaW50In1dXV0sImt3cGFyYW1zIjp7fSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sIm9wdCI6eyJwYXJhbXMiOltbImExIix7IiRvciI6WyJhcnJheSIsIm51bGwiXX1dLFsiYTIiLHsiJG9yIjpbInN0cmluZyIsImJ5dGVzIl19XSxbImEzIix7IiRvciI6WyJzdHJpbmciLCJudWxsIl19XV0sImt3cGFyYW1zIjp7fSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX19fQAFBQ== +5G7SNqkoXiXG0oqNk2IY9EWfarqKryQcmWaFBK1XfeE= diff --git a/tests/integration/stable/py/schemas/prim_types.0.hash b/tests/integration/stable/py/schemas/prim_types.0.hash index 07034ec..6286aa5 100644 --- a/tests/integration/stable/py/schemas/prim_types.0.hash +++ b/tests/integration/stable/py/schemas/prim_types.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFj8BAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKaW1wb3J0IHR5cGluZwoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlwYXNzCgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGZvbyhzZWxmLCBhMTogaW50LCBhMjogTm9uZSwgYTM6IGJvb2wsIGE0OiBzdHIsIGE1OiBieXRlcywgYTY6IEFkZHJlc3MpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgZXJhc2VkKHNlbGYsIGExOiBsaXN0LCBhMjogZGljdCwgYTM6IHR5cGluZy5BbnkpOgoJCXBhc3MKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +cme+sgMH2W7594T+uT6sN5G1OJS72+LQ6cmvYJ1p2gQ= diff --git a/tests/integration/stable/py/schemas/prim_types.0_0.hash b/tests/integration/stable/py/schemas/prim_types.0_0.hash index 521cc2e..e44b545 100644 --- a/tests/integration/stable/py/schemas/prim_types.0_0.hash +++ b/tests/integration/stable/py/schemas/prim_types.0_0.hash @@ -1 +1 @@ -LQGUFXsiY3RvciI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e319LCJtZXRob2RzIjp7ImVyYXNlZCI6eyJwYXJhbXMiOltbImExIiwiYXJyYXkiXSxbImEyIiwiZGljdCJdLFsiYTMiLCJhbnkiXV0sImt3cGFyYW1zIjp7fSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sImZvbyI6eyJwYXJhbXMiOltbImExIiwiaW50Il0sWyJhMiIsIm51bGwiXSxbImEzIiwiYm9vbCJdLFsiYTQiLCJzdHJpbmciXSxbImE1IiwiYnl0ZXMiXSxbImE2IiwiYWRkcmVzcyJdXSwia3dwYXJhbXMiOnt9LCJyZWFkb25seSI6ZmFsc2UsInJldCI6ImFueSIsInBheWFibGUiOmZhbHNlfX19AAUF +c3es/FR8NqFNI7HOzTH7yFxPSbIcmm7LHt4x5uGNrOY= diff --git a/tests/integration/stable/py/schemas/ret-float.0.hash b/tests/integration/stable/py/schemas/ret-float.0.hash index a23134f..0875d88 100644 --- a/tests/integration/stable/py/schemas/ret-float.0.hash +++ b/tests/integration/stable/py/schemas/ret-float.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMMuQAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZiwgZm9vLCBiYXIpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgZm9vKHNlbGYpIC0+IGZsb2F0OgoJCXJldHVybiAwLjAKAAAABQ== +HN0W1Wo1agWBARU0YG5eqSO4rhXyjLoCsNcH8POloO8= diff --git a/tests/integration/stable/py/schemas/ret-float.0_0.hash b/tests/integration/stable/py/schemas/ret-float.0_0.hash index 131eae2..08760e2 100644 --- a/tests/integration/stable/py/schemas/ret-float.0_0.hash +++ b/tests/integration/stable/py/schemas/ret-float.0_0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEABQU= +iRDO6z0B+cIq2zUMPF2HomdTGQouGalCLGwGPuyQooQ= diff --git a/tests/integration/stable/py/schemas/ret-tuple.0.hash b/tests/integration/stable/py/schemas/ret-tuple.0.hash index dad874e..21d7a9a 100644 --- a/tests/integration/stable/py/schemas/ret-tuple.0.hash +++ b/tests/integration/stable/py/schemas/ret-tuple.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMSCgEAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZiwgZm9vLCBiYXIpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgZm9vKHNlbGYpIC0+IHR1cGxlW2ludCwgaW50XToKCQlyZXR1cm4gKDEsIDIpCgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIGJhcihzZWxmKSAtPiB0dXBsZVtpbnQsIC4uLl06CgkJcmV0dXJuICgxLCkKAAAAAAAAAAAAAAAAAAAAAAAABQ== +lkbpAMsjKhe/2PGZx0Ebsf74yv3mzk3SgGsHIvCHMcQ= diff --git a/tests/integration/stable/py/schemas/ret-tuple.0_0.hash b/tests/integration/stable/py/schemas/ret-tuple.0_0.hash index a47bd9d..82005ca 100644 --- a/tests/integration/stable/py/schemas/ret-tuple.0_0.hash +++ b/tests/integration/stable/py/schemas/ret-tuple.0_0.hash @@ -1 +1 @@ -LQHkD3siY3RvciI6eyJwYXJhbXMiOltbImZvbyIsImFueSJdLFsiYmFyIiwiYW55Il1dLCJrd3BhcmFtcyI6e319LCJtZXRob2RzIjp7ImJhciI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5IjpmYWxzZSwicmV0IjpbeyIkcmVwIjoiaW50In1dLCJwYXlhYmxlIjpmYWxzZX0sImZvbyI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5IjpmYWxzZSwicmV0IjpbImludCIsImludCJdLCJwYXlhYmxlIjpmYWxzZX19fQAFBQ== +eyD+4ybIsxYPLXTPwUGdD1/fYrP7oJXHt21JsevgaO8= diff --git a/tests/integration/stable/py/schemas/ret.0.hash b/tests/integration/stable/py/schemas/ret.0.hash index 8b90b19..b912770 100644 --- a/tests/integration/stable/py/schemas/ret.0.hash +++ b/tests/integration/stable/py/schemas/ret.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMYfAEAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZiwgZm9vLCBiYXIpOgoJCXBhc3MKCglAZ2wucHVibGljLnZpZXcKCWRlZiBmb28oc2VsZik6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBwb3Moc2VsZiwgeCwgeSk6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBrdyhzZWxmLCAqLCB4LCB5KToKCQlwYXNzCgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1peGVkKHNlbGYsIGEsIGIsICosIHgsIHkpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlLnBheWFibGUKCWRlZiBwYXlhYmxlKHNlbGYpOgoJCXBhc3MKBQ== +2jfP0Y3Ycs8clTeY/VyjyEvgpRoQNZZAwwrpKC03b/0= diff --git a/tests/integration/stable/py/schemas/ret.0_0.hash b/tests/integration/stable/py/schemas/ret.0_0.hash index 5f76c4b..e590da0 100644 --- a/tests/integration/stable/py/schemas/ret.0_0.hash +++ b/tests/integration/stable/py/schemas/ret.0_0.hash @@ -1 +1 @@ -LQHsIXsiY3RvciI6eyJwYXJhbXMiOltbImZvbyIsImFueSJdLFsiYmFyIiwiYW55Il1dLCJrd3BhcmFtcyI6e319LCJtZXRob2RzIjp7ImZvbyI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5Ijp0cnVlLCJyZXQiOiJhbnkifSwia3ciOnsicGFyYW1zIjpbXSwia3dwYXJhbXMiOnsieCI6ImFueSIsInkiOiJhbnkifSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sIm1peGVkIjp7InBhcmFtcyI6W1siYSIsImFueSJdLFsiYiIsImFueSJdXSwia3dwYXJhbXMiOnsieCI6ImFueSIsInkiOiJhbnkifSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sInBheWFibGUiOnsicGFyYW1zIjpbXSwia3dwYXJhbXMiOnt9LCJyZWFkb25seSI6ZmFsc2UsInJldCI6ImFueSIsInBheWFibGUiOnRydWV9LCJwb3MiOnsicGFyYW1zIjpbWyJ4IiwiYW55Il0sWyJ5IiwiYW55Il1dLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5IjpmYWxzZSwicmV0IjoiYW55IiwicGF5YWJsZSI6ZmFsc2V9fX0ABQU= +uEwn4PYe3H7v7yVZYWPC6dCxWsELszB9ZYHpGuq/Na8= diff --git a/tests/integration/stable/py/schemas/trivial.0.hash b/tests/integration/stable/py/schemas/trivial.0.hash index 8b90b19..b912770 100644 --- a/tests/integration/stable/py/schemas/trivial.0.hash +++ b/tests/integration/stable/py/schemas/trivial.0.hash @@ -1 +1 @@ -LRFcZXhpdF9jb2RlIDEAFRWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMYfAEAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjp0ZXN0IiB9CmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglkZWYgX19pbml0X18oc2VsZiwgZm9vLCBiYXIpOgoJCXBhc3MKCglAZ2wucHVibGljLnZpZXcKCWRlZiBmb28oc2VsZik6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBwb3Moc2VsZiwgeCwgeSk6CgkJcGFzcwoKCUBnbC5wdWJsaWMud3JpdGUKCWRlZiBrdyhzZWxmLCAqLCB4LCB5KToKCQlwYXNzCgoJQGdsLnB1YmxpYy53cml0ZQoJZGVmIG1peGVkKHNlbGYsIGEsIGIsICosIHgsIHkpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlLnBheWFibGUKCWRlZiBwYXlhYmxlKHNlbGYpOgoJCXBhc3MKBQ== +2jfP0Y3Ycs8clTeY/VyjyEvgpRoQNZZAwwrpKC03b/0= diff --git a/tests/integration/stable/py/schemas/trivial.0_0.hash b/tests/integration/stable/py/schemas/trivial.0_0.hash index 5f76c4b..e590da0 100644 --- a/tests/integration/stable/py/schemas/trivial.0_0.hash +++ b/tests/integration/stable/py/schemas/trivial.0_0.hash @@ -1 +1 @@ -LQHsIXsiY3RvciI6eyJwYXJhbXMiOltbImZvbyIsImFueSJdLFsiYmFyIiwiYW55Il1dLCJrd3BhcmFtcyI6e319LCJtZXRob2RzIjp7ImZvbyI6eyJwYXJhbXMiOltdLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5Ijp0cnVlLCJyZXQiOiJhbnkifSwia3ciOnsicGFyYW1zIjpbXSwia3dwYXJhbXMiOnsieCI6ImFueSIsInkiOiJhbnkifSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sIm1peGVkIjp7InBhcmFtcyI6W1siYSIsImFueSJdLFsiYiIsImFueSJdXSwia3dwYXJhbXMiOnsieCI6ImFueSIsInkiOiJhbnkifSwicmVhZG9ubHkiOmZhbHNlLCJyZXQiOiJhbnkiLCJwYXlhYmxlIjpmYWxzZX0sInBheWFibGUiOnsicGFyYW1zIjpbXSwia3dwYXJhbXMiOnt9LCJyZWFkb25seSI6ZmFsc2UsInJldCI6ImFueSIsInBheWFibGUiOnRydWV9LCJwb3MiOnsicGFyYW1zIjpbWyJ4IiwiYW55Il0sWyJ5IiwiYW55Il1dLCJrd3BhcmFtcyI6e30sInJlYWRvbmx5IjpmYWxzZSwicmV0IjoiYW55IiwicGF5YWJsZSI6ZmFsc2V9fX0ABQU= +uEwn4PYe3H7v7yVZYWPC6dCxWsELszB9ZYHpGuq/Na8= diff --git a/tests/integration/stable/runners/dup-dependency.0.hash b/tests/integration/stable/runners/dup-dependency.0.hash index 1061941..01944ba 100644 --- a/tests/integration/stable/runners/dup-dependency.0.hash +++ b/tests/integration/stable/runners/dup-dependency.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDsMAAAAjIHsKIyAgICJTZXEiOiBbCiMgICAgIHsgIkRlcGVuZHMiOiAic29mdGZsb2F0OnRlc3QiIH0sCiMgICAgIHsgIkRlcGVuZHMiOiAic29mdGZsb2F0OnRlc3QiIH0sCiMgICAgIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQojICAgXQojIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCnByaW50KCdJIGFtIG9rJykKZXhpdCgwKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +3kxNk8gJs2RnjfWKkq/mJSW0MVKuHjvBUKh2R6vztD8= diff --git a/tests/integration/stable/runners/env-template.0.hash b/tests/integration/stable/runners/env-template.0.hash index c879640..fddf79d 100644 --- a/tests/integration/stable/runners/env-template.0.hash +++ b/tests/integration/stable/runners/env-template.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDtUAAAAjIHsKIyAgICJTZXEiOiBbCiMgICAgIHsgIkFkZEVudiI6IHsgIm5hbWUiOiAiWCIsICJ2YWwiOiAiMSIgfSB9LAojICAgICB7ICJBZGRFbnYiOiB7ICJuYW1lIjogIlgiLCAidmFsIjogIiR7WH06MiIgfSB9LAojICAgICB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KIyAgIF0KIyB9CgppbXBvcnQgb3MKCnByaW50KG9zLmVudmlyb25bJ1gnXSkKZXhpdCgwKQoAAAAAAAAABQ== +3Ua1uRWn5Zndsia2ahxQ64pY2ahw10KYRy0PJP/fHEw= diff --git a/tests/integration/stable/runners/malformed_runner.0.hash b/tests/integration/stable/runners/malformed_runner.0.hash index 0d05fa3..670e226 100644 --- a/tests/integration/stable/runners/malformed_runner.0.hash +++ b/tests/integration/stable/runners/malformed_runner.0.hash @@ -1 +1 @@ -LRGEAWludmFsaWRfY29udHJhY3QADRWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMCGwAAACMgeyAiRm9vIjogImJhciIgfQpleGl0KDApCgAF +B1eLEDY7SeTEgqHhKdqCJzblrICXW5AxI33ytPE1B+0= diff --git a/tests/integration/stable/runners/no_runner.0.hash b/tests/integration/stable/runners/no_runner.0.hash index b5be56f..9b9867f 100644 --- a/tests/integration/stable/runners/no_runner.0.hash +++ b/tests/integration/stable/runners/no_runner.0.hash @@ -1 +1 @@ -LRG0AmludmFsaWRfY29udHJhY3QgYWJzZW50X3J1bm5lcl9jb21tZW50AAUF +iOjrZPgYJJLScXZVhJEID/+xTqXVYszu5TRYnOM9s8g= diff --git a/tests/integration/stable/runners/zip/no-zip.0.hash b/tests/integration/stable/runners/zip/no-zip.0.hash index 7ea94f3..165ee1c 100644 --- a/tests/integration/stable/runners/zip/no-zip.0.hash +++ b/tests/integration/stable/runners/zip/no-zip.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDCoYAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdoZWxsbyB3b3JsZCcpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +MOyuWTWpufzSM7lU4hE4xX1L/mbHLdauE+FtZOB8M8U= diff --git a/tests/integration/stable/self-run/datetime.0.hash b/tests/integration/stable/self-run/datetime.0.hash index 48066a9..068f8a1 100644 --- a/tests/integration/stable/self-run/datetime.0.hash +++ b/tests/integration/stable/self-run/datetime.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDCF4AAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKaW1wb3J0IGRhdGV0aW1lCgpwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSkKCmV4aXQoMCkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +Y/EJyAl18rAP36dkEh7JVaeUanGaLLmLNeUMDDfTCI4= diff --git a/tests/integration/stable/self-run/floats.0.hash b/tests/integration/stable/self-run/floats.0.hash index 052b7aa..7df886a 100644 --- a/tests/integration/stable/self-run/floats.0.hash +++ b/tests/integration/stable/self-run/floats.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDNkEDAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQppbXBvcnQgbWF0aAoKaW1wb3J0IG9wZXJhdG9yCgpkYXRhOiBsaXN0W2Zsb2F0XSA9IFsKCW1hdGgubmFuLAoJbWF0aC5pbmYsCgktbWF0aC5pbmYsCgkxLjQxNDIxMzU2MjM3LAoJLTEuNDE0MjEzNTYyMzcsCgkxLjAsCgktMSwKCTFlNSwKCS0xZTUsCgkwLjAsCgktMC4wLApdCgppbXBvcnQgc3RydWN0CmltcG9ydCBudW1weSBhcyBucAoKZm9yIHggaW4gZGF0YToKCXByaW50KCduZXcgeCcpCglmb3IgeSBpbiBkYXRhOgoJCWZvciBvcCBpbiBbbWF0aC5mbG9vciwgbWF0aC5jZWlsLCBtYXRoLnNxcnQsIG1hdGguc2luLCBpbnQsIG1hdGguZXhwXToKCQkJdHJ5OgoJCQkJcmVzID0gb3AoeCkKCQkJCWlmIG1hdGguaXNuYW4ocmVzKToKCQkJCQlyZXMgPSBtYXRoLm5hbgoJCQkJcyA9IHN0cnVjdC5wYWNrKCc+ZCcsIHJlcykKCQkJCXByaW50KGYnXHR7eDouNWZ9IHtvcH0ge3JlczouNWZ9IHtzLmhleCgpfScpCgkJCWV4Y2VwdDoKCQkJCXBhc3MKCQlwcmludCgnXHRuZXcgeScpCgkJZm9yIG9wIGluIFsKCQkJb3BlcmF0b3IuYWRkLAoJCQlvcGVyYXRvci5zdWIsCgkJCW9wZXJhdG9yLm11bCwKCQkJb3BlcmF0b3IudHJ1ZWRpdiwKCQldOiAgIyBvcGVyYXRvci5wb3cKCQkJdHJ5OgoJCQkJcmVzID0gb3AoeCwgeSkKCQkJCWlmIG1hdGguaXNuYW4ocmVzKToKCQkJCQlyZXMgPSBtYXRoLm5hbgoJCQkJcyA9IHN0cnVjdC5wYWNrKCc+ZCcsIHJlcykKCQkJCXByaW50KGYnXHRcdHt4Oi41Zn0ge29wfSB7eTouNWZ9IHtyZXM6LjVmfSB7cy5oZXgoKX0nKQoJCQlleGNlcHQ6CgkJCQlwYXNzCgpleGl0KDApCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU= +RGJD8Coh3qU9nDYe9iNZalL3me38OVWbjWR/1JG9S0I= diff --git a/tests/integration/stable/self-run/formats.0.hash b/tests/integration/stable/self-run/formats.0.hash index 8ffba18..aa5eafa 100644 --- a/tests/integration/stable/self-run/formats.0.hash +++ b/tests/integration/stable/self-run/formats.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDIPgBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllci5weS5zdG9yYWdlLl9pbnRlcm5hbC5nZW5lcmF0ZSBpbXBvcnQgZ2VuZXJhdGVfc3RvcmFnZQpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgVGVzdDoKCWFycjogRHluQXJyYXlbc3RyXQoJbWFwOiBUcmVlTWFwW3N0ciwgTm9uZV0KCgphZGRyID0gQWRkcmVzcyhiJ1x4YTInICogMjApCnByaW50KGFkZHIpCnByaW50KGYne2FkZHJ9JykKcHJpbnQoZid7YWRkciFyfScpCnByaW50KGYne2FkZHIhc30nKQpwcmludChmJ3thZGRyOmNkfScpCnByaW50KGYne2FkZHI6YjY0fScpCnByaW50KGYne2FkZHI6eH0nKQpwcmludChmJ3thZGRyOn0nKQoKdCA9IFRlc3QoKQp0LmFyci5leHRlbmQoWycxJywgJzInLCAnMyddKQp0Lm1hcC51cGRhdGUoeycxJzogTm9uZSwgJzQnOiBOb25lfSkKcHJpbnQoZid7dC5hcnJ9JykKcHJpbnQoZid7dC5tYXB9JykKZXhpdCgwKQoAAAAABQ== +7a0hvOQJmPNCBTFLVD+rBl7QHSQo6Fmllgb+N/30TvI= diff --git a/tests/integration/stable/self-run/issue_163.0.hash b/tests/integration/stable/self-run/issue_163.0.hash index a6f9245..7056bba 100644 --- a/tests/integration/stable/self-run/issue_163.0.hash +++ b/tests/integration/stable/self-run/issue_163.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEgwBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGdlbmxheWVyLnB5LnN0b3JhZ2UuX2ludGVybmFsLmdlbmVyYXRlIGltcG9ydCBnZW5lcmF0ZV9zdG9yYWdlCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgUHI6Cgl4OiBUcmVlTWFwW3N0ciwgc3RyXQoKCmEgPSBQcigpCgp0cnk6CglhLnggPSB7J3gnOiAneSd9CmV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgoJcHJpbnQoKmUuYXJncykKCmV4aXQoMCkKAAAAAAAAAAAAAAAAAAAAAAU= +Ft+GgaySacsP8A8HR3z98dEvd36KFfCS265dC0q+bik= diff --git a/tests/integration/stable/self-run/module/np.0.hash b/tests/integration/stable/self-run/module/np.0.hash index fdc7e4c..3003990 100644 --- a/tests/integration/stable/self-run/module/np.0.hash +++ b/tests/integration/stable/self-run/module/np.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDCGsAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQppbXBvcnQgbnVtcHkgYXMgbnAKCnByaW50KG5wLmFycmF5KFsxLCAyLCAzXSwgZHR5cGU9aW50KSAqKiAyKQpleGl0KDApCgAAAAAAAAAAAAAAAAAAAAAABQ== +XkYbrd4uzpGgBTe0WmmFZvLf8gokCVY/dJRY4YD/LQI= diff --git a/tests/integration/stable/self-run/module/pil.0.hash b/tests/integration/stable/self-run/module/pil.0.hash index 2106a4c..8418e5c 100644 --- a/tests/integration/stable/self-run/module/pil.0.hash +++ b/tests/integration/stable/self-run/module/pil.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDMPkCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpmcm9tIFBJTCBpbXBvcnQgSW1hZ2UKCmltcG9ydCBpbwoKaW1fZGF0YSA9IGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDAkXHgwMFx4MDBceDAwXHgxNVx4MDFceDAzXHgwMFx4MDBceDAwXHgxNFx4ZThceGRlXHhkM1x4MDBceDAwXHgwMFx4MDZQTFRFXHhmZlx4ZmZceGZmXHgwMFx4MDBceDAwVVx4YzJceGQzflx4MDBceDAwXHgwMFRJREFUeFx4OWNjYEBceDAyXHgwZVx4MGNceDBjXHgxY1x4MGNceDBjXHgxZVx4Y2NceDBmeFx4ODBceGE0XHhhM1x4MDJceDkwXHg4Y1x4MDBceDkzXHgwMVAyXHg4MVx4OGJceDgxXHhhMVx4YzBceGYxXHg4MFx4MTBceDAzQ1x4ODJjXHg4M1x4MTBceDg4XHhlZCBceDA0XHgxNlx4MDdceDkxXHg4YVx4MDJceDEwXHhkMlx4MDhEclx4ZDhceDAxTVBceGU0UVx4MDJceDkyXG4sSiBjXHg5OVx4MTRceDE4XHgxOHhceGMwXHhiNlx4YjAgLFx4MDRceDAwXHg4NFx4YWJceDBjXHhjYVx4MDJceDhlKlx4YjBceDAwXHgwMFx4MDBceDAwSUVORFx4YWVCYFx4ODInCgppbWcgPSBJbWFnZS5vcGVuKGlvLkJ5dGVzSU8oaW1fZGF0YSkpCmlmIGltZy5tb2RlICE9ICdSR0InOgoJaW1nID0gaW1nLmNvbnZlcnQoJ1JHQicpCgpwaXhlbHMgPSBsaXN0KGltZy5nZXRkYXRhKCkpCgpyZXMgPSBzZXQoKQoKZm9yIGkgaW4gcGl4ZWxzOgoJcmVzLmFkZChpKQoKcHJpbnQobGlzdChzb3J0ZWQocmVzKSkpCgpleGl0KDApCgAAAAU= +xenajBe2otUAJqjFTSG3TRRgOzLQ1ma1lmwhr1K/poc= diff --git a/tests/integration/stable/self-run/re.0.hash b/tests/integration/stable/self-run/re.0.hash index ead28eb..801ad9a 100644 --- a/tests/integration/stable/self-run/re.0.hash +++ b/tests/integration/stable/self-run/re.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDJCwCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKaW1wb3J0IHJlCgphc3NlcnQgcmUubWF0Y2goJyhhYnxiYSknLCAnYWInKS5zcGFuKCkgPT0gKDAsIDIpCmFzc2VydCByZS5tYXRjaCgnKGFifGJhKScsICdiYScpLnNwYW4oKSA9PSAoMCwgMikKYXNzZXJ0IHJlLm1hdGNoKCcoYWJjfGJhY3xjYXxjYiknLCAnYWJjJykuc3BhbigpID09ICgwLCAzKQphc3NlcnQgcmUubWF0Y2goJyhhYmN8YmFjfGNhfGNiKScsICdiYWMnKS5zcGFuKCkgPT0gKDAsIDMpCmFzc2VydCByZS5tYXRjaCgnKGFiY3xiYWN8Y2F8Y2IpJywgJ2NhJykuc3BhbigpID09ICgwLCAyKQphc3NlcnQgcmUubWF0Y2goJyhhYmN8YmFjfGNhfGNiKScsICdjYicpLnNwYW4oKSA9PSAoMCwgMikKYXNzZXJ0IHJlLm1hdGNoKCcoKGEpfChiKXwoYykpJywgJ2EnKS5zcGFuKCkgPT0gKDAsIDEpCmFzc2VydCByZS5tYXRjaCgnKChhKXwoYil8KGMpKScsICdiJykuc3BhbigpID09ICgwLCAxKQphc3NlcnQgcmUubWF0Y2goJygoYSl8KGIpfChjKSknLCAnYycpLnNwYW4oKSA9PSAoMCwgMSkKCmV4aXQoMCkKAAAAAAAAAAAAAAAAAAAAAAU= +RXby+cOVQukakscOHcSkifCy+Vm0neCLrpf1IWS74Q4= diff --git a/tests/integration/stable/self-run/typing_is_ok.0.hash b/tests/integration/stable/self-run/typing_is_ok.0.hash index 1b057c1..821e3e1 100644 --- a/tests/integration/stable/self-run/typing_is_ok.0.hash +++ b/tests/integration/stable/self-run/typing_is_ok.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDKpkCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKIyBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zCgppbXBvcnQgdHlwaW5nCmltcG9ydCB0eXBlcwoKCmNsYXNzIEZvb1tYXToKCWE6IFgKCgpkZWYgdHN0KHgpOgoJcHJpbnQoZic9PT0ge3guX19uYW1lX199JykKCXByaW50KHR5cGUoeCkpCglwcmludCh4KQoJaWYgaXNpbnN0YW5jZSh4LCB0eXBlcy5HZW5lcmljQWxpYXMpOgoJCXByaW50KGYnb3JpZ2luPXt4Ll9fb3JpZ2luX199JykKCQlwcmludChmJ2FyZ3M9e3guX19hcmdzX199JykKCWVsaWYgaXNpbnN0YW5jZSh4LCB0eXBpbmcuX0dlbmVyaWNBbGlhcyk6ICAjIHR5cGU6IGlnbm9yZQoJCXByaW50KGYnb3JpZ2luPXt4Ll9fb3JpZ2luX199JykKCQlwcmludChmJ2FyZ3M9e3guX19hcmdzX199JykKCWlmIG5vdCBpc2luc3RhbmNlKHgsIHR5cGVzLkdlbmVyaWNBbGlhcyk6CgkJZm9yIGssIHYgaW4gdHlwaW5nLmdldF90eXBlX2hpbnRzKHgpLml0ZW1zKCk6CgkJCWlmIGlzaW5zdGFuY2UodiwgdHlwaW5nLlR5cGVWYXIpOgoJCQkJdiA9IHYuX19uYW1lX18KCQkJcHJpbnQoZidcdHtrfToge3Z9JykKCgp0c3QoRm9vKQoKdHN0KGxpc3Rbc3RyXSkKCgpjbGFzcyBUZXN0OgoJZm9vOiBGb29bc3RyXQoKCnRzdChUZXN0KQpleGl0KDApCgAAAAU= +4CLKMiq9mZ5MJHalZ4hIGzKKKJrF6PpIubHkCvo57N0= diff --git a/tests/integration/stable/storage/alloc_generic.0.hash b/tests/integration/stable/storage/alloc_generic.0.hash index bd24c61..49fac11 100644 --- a/tests/integration/stable/storage/alloc_generic.0.hash +++ b/tests/integration/stable/storage/alloc_generic.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDDtkAAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKCgpAYWxsb3dfc3RvcmFnZQpAZGF0YWNsYXNzCmNsYXNzIFRlc3RbVF06Cglmb286IFQKCgp0c3QgPSBnbC5zdG9yYWdlLmlubWVtX2FsbG9jYXRlKFRlc3Rbc3RyXSwgJzEyMycpCnByaW50KHRzdCkKCmV4aXQoMCkKAAAABQ== +hPVHe6Z9tPtba5ph8toWQOY+hLcY/YtH20lgYa5i28M= diff --git a/tests/integration/stable/storage/alloc_generic_err.0.hash b/tests/integration/stable/storage/alloc_generic_err.0.hash index 28ca77c..21795b3 100644 --- a/tests/integration/stable/storage/alloc_generic_err.0.hash +++ b/tests/integration/stable/storage/alloc_generic_err.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGHQBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MKZnJvbSBnZW5sYXllci5weS5zdG9yYWdlLl9pbnRlcm5hbC5nZW5lcmF0ZSBpbXBvcnQgZ2VuZXJhdGVfc3RvcmFnZQoKCkBhbGxvd19zdG9yYWdlCkBkYXRhY2xhc3MKY2xhc3MgVGVzdFtUXToKCWZvbzogVAoKCkBnZW5lcmF0ZV9zdG9yYWdlCmNsYXNzIEJhcjoKCXQ6IFRlc3Rbc3RyXQoKCnRyeToKCXRzdCA9IFRlc3QoJzEyMycpCglwcmludCh0c3QpCmV4Y2VwdCBFeGNlcHRpb24gYXMgZToKCXByaW50KGUpCglmb3IgbiBpbiBlLl9fbm90ZXNfXzoKCQlwcmludChuKQoKZXhpdCgwKQoAAAAAAAAAAAU= +uxoM1BLTj+zHyrQ/d8I8pF2gvUDdlEDDDCSUb4rKd/A= diff --git a/tests/integration/stable/storage/base.0.hash b/tests/integration/stable/storage/base.0.hash index 11ac9bb..c9e25e4 100644 --- a/tests/integration/stable/storage/base.0.hash +++ b/tests/integration/stable/storage/base.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDJDMCAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGdlbmxheWVyLnB5LnN0b3JhZ2UuX2ludGVybmFsLmdlbmVyYXRlIGltcG9ydCBnZW5lcmF0ZV9zdG9yYWdlCgoKQGFsbG93X3N0b3JhZ2UKY2xhc3MgVGVzdDoKCWZvbzogaTY0CgliYXI6IGk2NAoJc3Q6IHN0cgoKCWRlZiBhYmMoc2VsZik6CgkJcmV0dXJuIHNlbGYuZm9vCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgQ29tcG9zaXRlOgoJYTogVGVzdAoJYjogVGVzdAoKCnRzdCA9IENvbXBvc2l0ZSgpCgpzdG9yX21hbiA9IHRzdC5fc3RvcmFnZV9zbG90Lm1hbmFnZXIgICMgdHlwZTogaWdub3JlCgp0c3QuYS5mb28gPSBpNjQoNjU1MzUpCnRzdC5hLmJhciA9IGk2NCgyKiozMikKdHN0LmEuc3QgPSAnMTIzJwp0c3QuYi5mb28gPSBpNjQoMTMpCnRzdC5iLnN0ID0gJzMyMScKCnN0b3JfbWFuLmRlYnVnKCkKcHJpbnQodHN0LmEuc3QsIHRzdC5iLnN0KQoKdHN0LmEgPSB0c3QuYgoKc3Rvcl9tYW4uZGVidWcoKQpwcmludCh0c3QuYS5zdCwgdHN0LmIuc3QpCgpleGl0KDApCgAAAAAAAAAAAAU= +uOz+sBj8VtXeEPICfJSFZ2+HYpr1C5tJu+UzFqR+QDg= diff --git a/tests/integration/stable/storage/floats.0.hash b/tests/integration/stable/storage/floats.0.hash index 5564282..38b2975 100644 --- a/tests/integration/stable/storage/floats.0.hash +++ b/tests/integration/stable/storage/floats.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDkBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGdlbmxheWVyLnB5LnN0b3JhZ2UuX2ludGVybmFsLmdlbmVyYXRlIGltcG9ydCBnZW5lcmF0ZV9zdG9yYWdlCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgVGVzdDoKCWZvbzogZmxvYXQKCglkZWYgYWJjKHNlbGYpOgoJCXJldHVybiBzZWxmLmZvbwoKCnRzdCA9IFRlc3QoKQp0c3QuZm9vID0gMC41Cgphc3NlcnQgdHN0LmZvbyA9PSAwLjUKYXNzZXJ0IHR5cGUodHN0LmZvbykgaXMgZmxvYXQKcHJpbnQodHN0LmZvbykKCmV4aXQoMCkKAAAABQ== +lIjpcOE14o1kIgopEkX4iRFf0LFlXNY4NLOf1+wf5DQ= diff --git a/tests/integration/stable/storage/gvm-89.0.hash b/tests/integration/stable/storage/gvm-89.0.hash index 7c2e304..39ea80d 100644 --- a/tests/integration/stable/storage/gvm-89.0.hash +++ b/tests/integration/stable/storage/gvm-89.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFCMBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpAYWxsb3dfc3RvcmFnZQpAZGF0YWNsYXNzCmNsYXNzIEZvbzoKCXg6IER5bkFycmF5W3N0cl0KCgpjbGFzcyBNYWluKGdsLkNvbnRyYWN0KToKCWY6IER5bkFycmF5W0Zvb10KCglAZ2wucHVibGljLndyaXRlCglkZWYgbWFpbihzZWxmKToKCQlzZWxmLmYuYXBwZW5kKEZvbyhbJzEyMyddKSkKCQlyZXR1cm4gW2kgZm9yIGkgaW4gc2VsZi5mXQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +r8ABX0Hxr+ARONjiDAoEHfCgvaXiqiJ+mCAlT15gvbw= diff --git a/tests/integration/stable/storage/gvm-89.0_0.hash b/tests/integration/stable/storage/gvm-89.0_0.hash index d5d0380..277ed94 100644 --- a/tests/integration/stable/storage/gvm-89.0_0.hash +++ b/tests/integration/stable/storage/gvm-89.0_0.hash @@ -1 +1 @@ -LQENDgF4DRwxMjMAJRWjAjctRsOtqfiXx000m7/g5FDHmBZ8n1gPja+F3vV+lsPqAAAAAIMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowK/3qmf3S8yrjpIVx1Q6ejcB/QQx6foIUwOn3NSI01TlgAAAACDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC1SZia+5PJP/Ww2xfjSWh6XcvGQxNaICn3bVyWZcl6e8AAAAAgwIxMjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAupw/Ct4Am+EqQsq6IN2azBvld5Bwi2wvgVbdF1rlfQfAAAAAIMCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF +EZfeF6KwZuK/12vobzMdwQL4Uxtrfqtpukw45ECy8RI= diff --git a/tests/integration/stable/storage/locking/default-frozen.0.hash b/tests/integration/stable/storage/locking/default-frozen.0.hash index d4daf68..fc1af63 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0.hash @@ -1 +1 @@ -LQEAAB0VowIhueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAACDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgzZMAwAAIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCm5ld19jb2RlID0gYiIiIlwKIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KcHJpbnQoIlBhdGNoZWQhIikKZXhpdCgzMCkKIiIiCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYsIG1vZGlmaWVyczogbGlzdFtBZGRyZXNzXSwgbW9kaWZ5X2luX2N0b3I6IGJvb2wpOgoJCXJvb3QgPSBnbC5zdG9yYWdlLlJvb3QuZ2V0KCkKCQlyb290LnVwZ3JhZGVycy5nZXQoKS5leHRlbmQobW9kaWZpZXJzKQoKCQlzZWxmLnNob3dfaW5mbygpCgoJCWlmIG1vZGlmeV9pbl9jdG9yOgoJCQlzZWxmLnRyeV9tb2RpZnkoKQoKCWRlZiBzaG93X2luZm8oc2VsZik6CgkJcm9vdCA9IGdsLnN0b3JhZ2UuUm9vdC5nZXQoKQoKCQlwcmludChsaXN0KHJvb3QubG9ja2VkX3Nsb3RzLmdldCgpKSkKCQlwcmludChsaXN0KHJvb3QudXBncmFkZXJzLmdldCgpKSkKCglAZ2wucHVibGljLndyaXRlCglkZWYgbm9wKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgdHJ5X21vZGlmeShzZWxmKToKCQlyb290ID0gZ2wuc3RvcmFnZS5Sb290LmdldCgpCgoJCXNlbGYuc2hvd19pbmZvKCkKCgkJY29kZSA9IHJvb3QuY29kZS5nZXQoKQoJCXRyeToKCQkJY29kZS50cnVuY2F0ZSgpICAjIDwtIHdlIHNob3VsZCBlbmNvdW50ZXIgZXJyb3IgaGVyZQoJCWV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGUpCgkJZWxzZToKCQkJY29kZS5leHRlbmQobmV3X2NvZGUpCgkJcHJpbnQobGVuKGNvZGUpID09IGxlbihuZXdfY29kZSkpCgAAAAAAAAAAAAAAAAAAAAAF ++Bc+flNOIXF+PAiMUHBssER7FHATyiu8EPcwOloYzEo= diff --git a/tests/integration/stable/storage/locking/default-frozen.0_0.hash b/tests/integration/stable/storage/locking/default-frozen.0_0.hash index 9942c25..8e5a820 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0_0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0_0.hash @@ -1 +1 @@ -LQEAAAUF +XNPcYFyGaV0QDrEtOqIRM/exX7awarryXCjE4GKQMJU= diff --git a/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash b/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash index 9942c25..e7a4b47 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash @@ -1 +1 @@ -LQEAAAUF +2v/3ER4W4v7BKMOwSqOZAABn9Yz9vG6TtQrHzA417Jg= diff --git a/tests/integration/stable/storage/locking/default-frozen.jsonnet b/tests/integration/stable/storage/locking/default-frozen.jsonnet index e54d2cf..d0d1bbc 100644 --- a/tests/integration/stable/storage/locking/default-frozen.jsonnet +++ b/tests/integration/stable/storage/locking/default-frozen.jsonnet @@ -16,7 +16,7 @@ local util = import 'templates/util.jsonnet'; code: null, "calldata": ||| { - "method": "try_modify", + "": "try_modify", } ||| }, @@ -24,7 +24,7 @@ local util = import 'templates/util.jsonnet'; code: null, "calldata": ||| { - "method": "nop", + "": "nop", } ||| } diff --git a/tests/integration/stable/storage/locking/modify_ctor.0.hash b/tests/integration/stable/storage/locking/modify_ctor.0.hash index b3784ca..5e9d48e 100644 --- a/tests/integration/stable/storage/locking/modify_ctor.0.hash +++ b/tests/integration/stable/storage/locking/modify_ctor.0.hash @@ -1 +1 @@ -LQEAAB0VowIhueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAACDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgzY/AAAAIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KcHJpbnQoIlBhdGNoZWQhIikKZXhpdCgzMCkKd19jb2RlID0gYiIiIlwKIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KcHJpbnQoIlBhdGNoZWQhIikKZXhpdCgzMCkKIiIiCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYsIG1vZGlmaWVyczogbGlzdFtBZGRyZXNzXSwgbW9kaWZ5X2luX2N0b3I6IGJvb2wpOgoJCXJvb3QgPSBnbC5zdG9yYWdlLlJvb3QuZ2V0KCkKCQlyb290LnVwZ3JhZGVycy5nZXQoKS5leHRlbmQobW9kaWZpZXJzKQoKCQlzZWxmLnNob3dfaW5mbygpCgoJCWlmIG1vZGlmeV9pbl9jdG9yOgoJCQlzZWxmLnRyeV9tb2RpZnkoKQoKCWRlZiBzaG93X2luZm8oc2VsZik6CgkJcm9vdCA9IGdsLnN0b3JhZ2UuUm9vdC5nZXQoKQoKCQlwcmludChsaXN0KHJvb3QubG9ja2VkX3Nsb3RzLmdldCgpKSkKCQlwcmludChsaXN0KHJvb3QudXBncmFkZXJzLmdldCgpKSkKCglAZ2wucHVibGljLndyaXRlCglkZWYgbm9wKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgdHJ5X21vZGlmeShzZWxmKToKCQlyb290ID0gZ2wuc3RvcmFnZS5Sb290LmdldCgpCgoJCXNlbGYuc2hvd19pbmZvKCkKCgkJY29kZSA9IHJvb3QuY29kZS5nZXQoKQoJCXRyeToKCQkJY29kZS50cnVuY2F0ZSgpICAjIDwtIHdlIHNob3VsZCBlbmNvdW50ZXIgZXJyb3IgaGVyZQoJCWV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGUpCgkJZWxzZToKCQkJY29kZS5leHRlbmQobmV3X2NvZGUpCgkJcHJpbnQobGVuKGNvZGUpID09IGxlbihuZXdfY29kZSkpCgAAAAAAAAAAAAAAAAAAAAAF +NgfA2Ygg2UTUTHtPlpXhJJMkrdp3XGMJR7EUjZ8fn/8= diff --git a/tests/integration/stable/storage/locking/modify_ctor.0_0.hash b/tests/integration/stable/storage/locking/modify_ctor.0_0.hash index 5316a69..693f105 100644 --- a/tests/integration/stable/storage/locking/modify_ctor.0_0.hash +++ b/tests/integration/stable/storage/locking/modify_ctor.0_0.hash @@ -1 +1 @@ -LRFkZXhpdF9jb2RlIDMwAAUF +QgsUK5xSXTuWNkouDwOFeUrgzTILSbjpfQAj59ErGPo= diff --git a/tests/integration/stable/storage/locking/modify_ctor.jsonnet b/tests/integration/stable/storage/locking/modify_ctor.jsonnet index 1f71b52..49ad8ff 100644 --- a/tests/integration/stable/storage/locking/modify_ctor.jsonnet +++ b/tests/integration/stable/storage/locking/modify_ctor.jsonnet @@ -16,7 +16,7 @@ local util = import 'templates/util.jsonnet'; code: null, "calldata": ||| { - "method": "nop", + "": "nop", } ||| } diff --git a/tests/integration/stable/storage/locking/modify_later.0.hash b/tests/integration/stable/storage/locking/modify_later.0.hash index e3504e9..80a63cc 100644 --- a/tests/integration/stable/storage/locking/modify_later.0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0.hash @@ -1 +1 @@ -LQEAAB0VowIhueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAACDAgEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgzZMAwAAIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCm5ld19jb2RlID0gYiIiIlwKIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KcHJpbnQoIlBhdGNoZWQhIikKZXhpdCgzMCkKIiIiCgoKY2xhc3MgQ29udHJhY3QoZ2wuQ29udHJhY3QpOgoJZGVmIF9faW5pdF9fKHNlbGYsIG1vZGlmaWVyczogbGlzdFtBZGRyZXNzXSwgbW9kaWZ5X2luX2N0b3I6IGJvb2wpOgoJCXJvb3QgPSBnbC5zdG9yYWdlLlJvb3QuZ2V0KCkKCQlyb290LnVwZ3JhZGVycy5nZXQoKS5leHRlbmQobW9kaWZpZXJzKQoKCQlzZWxmLnNob3dfaW5mbygpCgoJCWlmIG1vZGlmeV9pbl9jdG9yOgoJCQlzZWxmLnRyeV9tb2RpZnkoKQoKCWRlZiBzaG93X2luZm8oc2VsZik6CgkJcm9vdCA9IGdsLnN0b3JhZ2UuUm9vdC5nZXQoKQoKCQlwcmludChsaXN0KHJvb3QubG9ja2VkX3Nsb3RzLmdldCgpKSkKCQlwcmludChsaXN0KHJvb3QudXBncmFkZXJzLmdldCgpKSkKCglAZ2wucHVibGljLndyaXRlCglkZWYgbm9wKHNlbGYpOgoJCXBhc3MKCglAZ2wucHVibGljLndyaXRlCglkZWYgdHJ5X21vZGlmeShzZWxmKToKCQlyb290ID0gZ2wuc3RvcmFnZS5Sb290LmdldCgpCgoJCXNlbGYuc2hvd19pbmZvKCkKCgkJY29kZSA9IHJvb3QuY29kZS5nZXQoKQoJCXRyeToKCQkJY29kZS50cnVuY2F0ZSgpICAjIDwtIHdlIHNob3VsZCBlbmNvdW50ZXIgZXJyb3IgaGVyZQoJCWV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CgkJCXByaW50KGUpCgkJZWxzZToKCQkJY29kZS5leHRlbmQobmV3X2NvZGUpCgkJcHJpbnQobGVuKGNvZGUpID09IGxlbihuZXdfY29kZSkpCgAAAAAAAAAAAAAAAAAAAAAF +KlZOzVhscylUzGcTA2hBK7+Ioq3AuBBwihlx+oDJhxE= diff --git a/tests/integration/stable/storage/locking/modify_later.0_0.hash b/tests/integration/stable/storage/locking/modify_later.0_0.hash index c95f22f..01ed223 100644 --- a/tests/integration/stable/storage/locking/modify_later.0_0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0_0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDBj8AAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQpwcmludCgiUGF0Y2hlZCEiKQpleGl0KDMwKQp3X2NvZGUgPSBiIiIiXAojIHsgIkRlcGVuZHMiOgU= +ppb/i5wgWzAx54AlFCfF0uDjinjycCh0pNUwuxq6HVQ= diff --git a/tests/integration/stable/storage/locking/modify_later.0_0_0.hash b/tests/integration/stable/storage/locking/modify_later.0_0_0.hash index 5316a69..693f105 100644 --- a/tests/integration/stable/storage/locking/modify_later.0_0_0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0_0_0.hash @@ -1 +1 @@ -LRFkZXhpdF9jb2RlIDMwAAUF +QgsUK5xSXTuWNkouDwOFeUrgzTILSbjpfQAj59ErGPo= diff --git a/tests/integration/stable/storage/locking/modify_later.jsonnet b/tests/integration/stable/storage/locking/modify_later.jsonnet index 51cb9fa..957128f 100644 --- a/tests/integration/stable/storage/locking/modify_later.jsonnet +++ b/tests/integration/stable/storage/locking/modify_later.jsonnet @@ -15,7 +15,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "try_modify", + "": "try_modify", } |||, code: null, @@ -23,7 +23,7 @@ local util = import 'templates/util.jsonnet'; s { "calldata": ||| { - "method": "nop", + "": "nop", } |||, code: null, diff --git a/tests/integration/stable/storage/np.0.hash b/tests/integration/stable/storage/np.0.hash index 27b2868..9e5e09c 100644 --- a/tests/integration/stable/storage/np.0.hash +++ b/tests/integration/stable/storage/np.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDGoYBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKaW1wb3J0IG51bXB5IGFzIG5wCgpmcm9tIGdlbmxheWVyIGltcG9ydCAqCgpmcm9tIGdlbmxheWVyLnB5LnN0b3JhZ2UuX2ludGVybmFsLmdlbmVyYXRlIGltcG9ydCBnZW5lcmF0ZV9zdG9yYWdlCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgVGVzdDoKCWZvbzogbnAuZmxvYXQzMgoKCWRlZiBhYmMoc2VsZik6CgkJcmV0dXJuIHNlbGYuZm9vCgoKdHN0ID0gVGVzdCgpCnRzdC5mb28gPSBucC5mbG9hdDMyKDAuNSkKCmFzc2VydCB0c3QuZm9vID09IDAuNSwgZid7dHN0LmZvb30nCmFzc2VydCB0eXBlKHRzdC5mb28pIGlzIG5wLmZsb2F0MzIsIGYne3R5cGUodHN0LmZvbyl9JwpwcmludCh0c3QuZm9vKQoKZXhpdCgwKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +t1N3MJTryks5R7IAX23KFSOk4RNvpwgqFp9fyRdHQdk= diff --git a/tests/integration/stable/storage/persists.0.hash b/tests/integration/stable/storage/persists.0.hash index 6c14079..9482f54 100644 --- a/tests/integration/stable/storage/persists.0.hash +++ b/tests/integration/stable/storage/persists.0.hash @@ -1 +1 @@ -LQEAADUVowIhoYw7XQjALrPQfBJfrJU3xQPXxybmmGkvhq9v6upRRgAAAACDBAEAAAAMAAAAAAAAAAIAAAABAwAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowI3LUbDran4l8dNNJu/4ORQx5gWfJ9YD42vhd71fpbD6gAAAACDAgEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCW4piZJ58jouEzsFEVfPYnJ9uo5sOKOWfMo2iXltpKcgAAAAAgwJhYmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAroAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELAAAAAIMKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhee6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCyG54BP3Rgi5KUeGEoez3nbCwHb+g5t5lHYb2VDMLnVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjArtHW19KeR3j/qGkKz3kHNgU+bllSDToaqVyrtJw9Q7jAAAAAIMCMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFCABAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKCmNsYXNzIENvbnRyYWN0KGdsLkNvbnRyYWN0KToKCW06IFRyZWVNYXBbc3RyLCB1MzJdCgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXByaW50KCdmaXJzdCcpCgkJc2VsZi5tWycxJ10gPSB1MzIoMTIpCgkJc2VsZi5tWydhYmMnXSA9IHUzMigzMCkKCglAZ2wucHVibGljLndyaXRlCglkZWYgc2Vjb25kKHNlbGYpOgoJCXByaW50KCdzZWNvbmQnKQoJCXByaW50KGxpc3Qoc2VsZi5tLml0ZW1zKCkpKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +i4oN4WOv0rc174O2mrCwxvbXSlVGwntRGIC/O51ym28= diff --git a/tests/integration/stable/storage/persists.0_0.hash b/tests/integration/stable/storage/persists.0_0.hash index 9942c25..8f0f01a 100644 --- a/tests/integration/stable/storage/persists.0_0.hash +++ b/tests/integration/stable/storage/persists.0_0.hash @@ -1 +1 @@ -LQEAAAUF +zjuTpNhxhn7J8Jrrrs0oKFpFqt5jkazqcU3EgR0bVMs= diff --git a/tests/integration/stable/storage/read_nondet.0.hash b/tests/integration/stable/storage/read_nondet.0.hash index b365ac2..b79d352 100644 --- a/tests/integration/stable/storage/read_nondet.0.hash +++ b/tests/integration/stable/storage/read_nondet.0.hash @@ -1 +1 @@ -LQEAACUVowI3LUbDran4l8dNNJu/4ORQx5gWfJ9YD42vhd71fpbD6gAAAACDAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCv96pn90vMq46SFcdUOno3Af0EMen6CFMDp9zUiNNU5YAAAAAgwI0NTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWjAuGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnAAAAAIMQ+AAAACMgeyAiRGVwZW5kcyI6ICJweS1nZW5sYXllcjpsYXRlc3QiIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBTdG9yYWdlKGdsLkNvbnRyYWN0KToKCWE6IHN0cgoKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlzZWxmLmEgPSAnMTIzJwoKCQlkZWYgZigpOgoJCQlwcmludChzZWxmLmEpCgoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZikKCQlzZWxmLmEgPSAnNDU2JwoJCWdsLmVxX3ByaW5jaXBsZS5zdHJpY3RfZXEoZikKAAAAAAU= +TY5hQTp1t8km6ELF9u2s+7bEmCUkAKEoZpyxnXyTQI4= diff --git a/tests/integration/stable/storage/storage_tree_map.0.hash b/tests/integration/stable/storage/storage_tree_map.0.hash index ca4d2fa..4bcfb85 100644 --- a/tests/integration/stable/storage/storage_tree_map.0.hash +++ b/tests/integration/stable/storage/storage_tree_map.0.hash @@ -1 +1 @@ -LQEAAA0VowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDFDYBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgpmcm9tIGdlbmxheWVyLnB5LnN0b3JhZ2UuX2ludGVybmFsLmdlbmVyYXRlIGltcG9ydCBnZW5lcmF0ZV9zdG9yYWdlCgoKQGdlbmVyYXRlX3N0b3JhZ2UKY2xhc3MgVXNlclN0b3JhZ2U6CgltOiBUcmVlTWFwW3N0ciwgdTMyXQoKCnRzdCA9IFVzZXJTdG9yYWdlKCkKCnRzdC5tWycxJ10gPSB1MzIoMTIpCnRzdC5tWycyJ10gPSB1MzIoMTMpCmRlbCB0c3QubVsnMSddCnByaW50KCcxJyBpbiB0c3QubSwgdHN0Lm1bJzInXSkKCmV4aXQoMCkKAAAAAAAABQ== +KzN5k7Oznwu7puqsh0lNYtzZbF/SmmbQ8CWRZI8r6Vs= diff --git a/tests/integration/stable/storage/to_str.0.hash b/tests/integration/stable/storage/to_str.0.hash index 497a6e0..e5781fe 100644 --- a/tests/integration/stable/storage/to_str.0.hash +++ b/tests/integration/stable/storage/to_str.0.hash @@ -1 +1 @@ -LQEAABUVowK6AFYwdFrPMBSq8WLpkzBAMCygvvP1b+LXPAoI+CxhCwAAAACDCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGuI0Enkt9rapj7fJg5cB+4sCtvx+0CKBD3g0ZJRoXnugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQshueAT90YIuSlHhhKHs952wsB2/oObeZR2G9lQzC51ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowLhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF5wAAAACDEhoBAAAjIHsgIkRlcGVuZHMiOiAicHktZ2VubGF5ZXI6dGVzdCIgfQoKZnJvbSBnZW5sYXllciBpbXBvcnQgKgoKZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzCmltcG9ydCBkYXRldGltZQoKCkBhbGxvd19zdG9yYWdlCkBkYXRhY2xhc3MKY2xhc3MgVXNlcjoKCW5hbWU6IHN0cgoJYmlydGhkYXk6IGRhdGV0aW1lLmRhdGV0aW1lCgoKY2xhc3MgTGxtRXJjMjAoZ2wuQ29udHJhY3QpOgoJeDogVXNlcgoKCWRlZiBfX2luaXRfXyhzZWxmKSAtPiBOb25lOgoJCXByaW50KHN0cihzZWxmLngpKQoAAAU= +vw6K6bH3tMr/tDjVxYDKsB/mgldEcJHparlKLQMNBk0= diff --git a/tests/integration/stable/storage/tree_map_nested.0.hash b/tests/integration/stable/storage/tree_map_nested.0.hash index 6bc19cb..567a0c0 100644 --- a/tests/integration/stable/storage/tree_map_nested.0.hash +++ b/tests/integration/stable/storage/tree_map_nested.0.hash @@ -1 +1 @@ -LQEAAC0VowIhoYw7XQjALrPQfBJfrJU3xQPXxybmmGkvhq9v6upRRgAAAACDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVowI3LUbDran4l8dNNJu/4ORQx5gWfJ9YD42vhd71fpbD6gAAAACDAgEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCUkaslAbRP9iFuRi0yOEVYFjB69iTYYmy7yi8YAvi5+YAAAAAgwQBAQEBAQEBAQEBAQEBAQEBAQEBAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMCugBWMHRazzAUqvFi6ZMwQDAsoL7z9W/i1zwKCPgsYQsAAAAAgwoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhriNBJ5Lfa2qY+3yYOXAfuLArb8ftAigQ94NGSUaF57oAVjB0Ws8wFKrxYumTMEAwLKC+8/Vv4tc8Cgj4LGELIbngE/dGCLkpR4YSh7PedsLAdv6Dm3mUdhvZUMwudWYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaMC4a4jQSeS32tqmPt8mDlwH7iwK2/H7QIoEPeDRklGhecAAAAAgxynAQAAIyB7ICJEZXBlbmRzIjogInB5LWdlbmxheWVyOnRlc3QiIH0KCmZyb20gZ2VubGF5ZXIgaW1wb3J0ICoKCgpjbGFzcyBDb250cmFjdChnbC5Db250cmFjdCk6CglzdDogVHJlZU1hcFtBZGRyZXNzLCBUcmVlTWFwW0FkZHJlc3MsIHUyNTZdXQoKCWRlZiBfX2luaXRfXyhzZWxmKToKCQlmaXJzdCA9IHNlbGYuc3QuZ2V0X29yX2luc2VydF9kZWZhdWx0KEFkZHJlc3MoYidceDAwJyAqIDIwKSkKCQlwcmludCh7ay5hc19oZXg6IGRpY3Qodi5pdGVtcygpKSBmb3IgaywgdiBpbiBzZWxmLnN0Lml0ZW1zKCl9KQoJCXByaW50KGRpY3QoZmlyc3QuaXRlbXMoKSkpCgkJZmlyc3RbQWRkcmVzcyhiJ1x4MDEnICogMjApXSA9IHUyNTYoMTMpCgkJcHJpbnQoe2suYXNfaGV4OiBkaWN0KHYuaXRlbXMoKSkgZm9yIGssIHYgaW4gc2VsZi5zdC5pdGVtcygpfSkKAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ== +SaDUvSecl9i7/0OVfvKPbGRa6gxR82TEIPdzIqkTnGM=