diff --git a/evm/abi/src/conversions.rs b/evm/abi/src/conversions.rs index a39db589c..ecc41e5c5 100644 --- a/evm/abi/src/conversions.rs +++ b/evm/abi/src/conversions.rs @@ -18,7 +18,6 @@ use crate::{ beefy::IntermediateState, evm_host::EvmHostEvents, - handler::StateMachineUpdatedFilter, shared_types::{PostRequest, PostResponse, StateMachineHeight}, }; use anyhow::anyhow; @@ -251,18 +250,6 @@ impl TryFrom for StateMachineHeight { } } -impl From for ismp::events::StateMachineUpdated { - fn from(value: StateMachineUpdatedFilter) -> Self { - ismp::events::StateMachineUpdated { - state_machine_id: ismp::consensus::StateMachineId { - state_id: StateMachine::Kusama(value.state_machine_id.low_u64() as u32), - consensus_state_id: Default::default(), - }, - latest_height: value.height.low_u64(), - } - } -} - impl TryFrom for ismp::events::Event { type Error = anyhow::Error; fn try_from(event: EvmHostEvents) -> Result { diff --git a/evm/abi/src/generated/evm_host.rs b/evm/abi/src/generated/evm_host.rs index 656965158..39bb94148 100644 --- a/evm/abi/src/generated/evm_host.rs +++ b/evm/abi/src/generated/evm_host.rs @@ -651,7 +651,6 @@ pub mod evm_host { ::ethers::core::abi::ethabi::ParamType::Address, ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Array( ::std::boxed::Box::new( ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -669,46 +668,6 @@ pub mod evm_host { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("initHostParams"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("initHostParams"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("params"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Address, - ::ethers::core::abi::ethabi::ParamType::Address, - ::ethers::core::abi::ethabi::ParamType::Address, - ::ethers::core::abi::ethabi::ParamType::Address, - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Address, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ), - ), - ], - ), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct HostParams"), - ), - }, - ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("latestStateMachineHeight"), ::std::vec![ @@ -963,7 +922,6 @@ pub mod evm_host { ::ethers::core::abi::ethabi::ParamType::Address, ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Array( ::std::boxed::Box::new( ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -1086,30 +1044,6 @@ pub mod evm_host { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("storeLatestStateMachineHeight"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "storeLatestStateMachineHeight", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("height"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("storeStateMachineCommitment"), ::std::vec![ @@ -1217,7 +1151,6 @@ pub mod evm_host { ::ethers::core::abi::ethabi::ParamType::Address, ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ::ethers::core::abi::ethabi::ParamType::Array( ::std::boxed::Box::new( ::ethers::core::abi::ethabi::ParamType::Uint(256usize), @@ -1850,15 +1783,6 @@ pub mod evm_host { .method_hash([34, 21, 54, 77], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `initHostParams` (0x73991cd0) function - pub fn init_host_params( - &self, - params: HostParams, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([115, 153, 28, 208], (params,)) - .expect("method not found (this should never happen)") - } ///Calls the contract's `latestStateMachineHeight` (0x9c095f86) function pub fn latest_state_machine_height( &self, @@ -1930,13 +1854,13 @@ pub mod evm_host { .method_hash([25, 232, 250, 241], new_state) .expect("method not found (this should never happen)") } - ///Calls the contract's `setHostParamsAdmin` (0xb2712cbe) function + ///Calls the contract's `setHostParamsAdmin` (0x181a5972) function pub fn set_host_params_admin( &self, params: HostParams, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([178, 113, 44, 190], (params,)) + .method_hash([24, 26, 89, 114], (params,)) .expect("method not found (this should never happen)") } ///Calls the contract's `stateMachineCommitment` (0xa70a8c47) function @@ -1966,15 +1890,6 @@ pub mod evm_host { .method_hash([180, 151, 76, 240], state) .expect("method not found (this should never happen)") } - ///Calls the contract's `storeLatestStateMachineHeight` (0xa0756ecd) function - pub fn store_latest_state_machine_height( - &self, - height: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([160, 117, 110, 205], height) - .expect("method not found (this should never happen)") - } ///Calls the contract's `storeStateMachineCommitment` (0x559efe9e) function pub fn store_state_machine_commitment( &self, @@ -2001,13 +1916,13 @@ pub mod evm_host { .method_hash([212, 7, 132, 199], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `updateHostParams` (0xd1e61ec0) function + ///Calls the contract's `updateHostParams` (0x48da1737) function pub fn update_host_params( &self, params: HostParams, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([209, 230, 30, 192], (params,)) + .method_hash([72, 218, 23, 55], (params,)) .expect("method not found (this should never happen)") } ///Calls the contract's `vetoStateCommitment` (0x0a4fe5c0) function @@ -2755,17 +2670,6 @@ pub mod evm_host { )] #[ethcall(name = "hostParams", abi = "hostParams()")] pub struct HostParamsCall; - ///Container type for all input parameters for the `initHostParams` function with signature - /// `initHostParams((uint256,uint256,address,address,address,address,uint256,uint256,address, - /// bytes,uint256,uint256,uint256[]))` and selector `0x73991cd0` - #[derive(Clone, ::ethers::contract::EthCall, ::ethers::contract::EthDisplay)] - #[ethcall( - name = "initHostParams", - abi = "initHostParams((uint256,uint256,address,address,address,address,uint256,uint256,address,bytes,uint256,uint256,uint256[]))" - )] - pub struct InitHostParamsCall { - pub params: HostParams, - } ///Container type for all input parameters for the `latestStateMachineHeight` function with /// signature `latestStateMachineHeight(uint256)` and selector `0x9c095f86` #[derive( @@ -2894,11 +2798,20 @@ pub mod evm_host { } ///Container type for all input parameters for the `setHostParamsAdmin` function with signature /// `setHostParamsAdmin((uint256,uint256,address,address,address,address,uint256,uint256, - /// address,bytes,uint256,uint256,uint256[]))` and selector `0xb2712cbe` - #[derive(Clone, ::ethers::contract::EthCall, ::ethers::contract::EthDisplay)] + /// address,bytes,uint256,uint256[]))` and selector `0x181a5972` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] #[ethcall( name = "setHostParamsAdmin", - abi = "setHostParamsAdmin((uint256,uint256,address,address,address,address,uint256,uint256,address,bytes,uint256,uint256,uint256[]))" + abi = "setHostParamsAdmin((uint256,uint256,address,address,address,address,uint256,uint256,address,bytes,uint256,uint256[]))" )] pub struct SetHostParamsAdminCall { pub params: HostParams, @@ -2955,25 +2868,6 @@ pub mod evm_host { pub struct StoreConsensusStateCall { pub state: ::ethers::core::types::Bytes, } - ///Container type for all input parameters for the `storeLatestStateMachineHeight` function - /// with signature `storeLatestStateMachineHeight(uint256)` and selector `0xa0756ecd` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall( - name = "storeLatestStateMachineHeight", - abi = "storeLatestStateMachineHeight(uint256)" - )] - pub struct StoreLatestStateMachineHeightCall { - pub height: ::ethers::core::types::U256, - } ///Container type for all input parameters for the `storeStateMachineCommitment` function with /// signature `storeStateMachineCommitment((uint256,uint256),(uint256,bytes32,bytes32))` and /// selector `0x559efe9e` @@ -3025,11 +2919,20 @@ pub mod evm_host { pub struct UnStakingPeriodCall; ///Container type for all input parameters for the `updateHostParams` function with signature /// `updateHostParams((uint256,uint256,address,address,address,address,uint256,uint256,address, - /// bytes,uint256,uint256,uint256[]))` and selector `0xd1e61ec0` - #[derive(Clone, ::ethers::contract::EthCall, ::ethers::contract::EthDisplay)] + /// bytes,uint256,uint256[]))` and selector `0x48da1737` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] #[ethcall( name = "updateHostParams", - abi = "updateHostParams((uint256,uint256,address,address,address,address,uint256,uint256,address,bytes,uint256,uint256,uint256[]))" + abi = "updateHostParams((uint256,uint256,address,address,address,address,uint256,uint256,address,bytes,uint256,uint256[]))" )] pub struct UpdateHostParamsCall { pub params: HostParams, @@ -3067,7 +2970,7 @@ pub mod evm_host { pub params: WithdrawParams, } ///Container type for all of the contract's call - #[derive(Clone, ::ethers::contract::EthAbiType)] + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum EvmHostCalls { Admin(AdminCall), ChainId(ChainIdCall), @@ -3089,7 +2992,6 @@ pub mod evm_host { FundRequest(FundRequestCall), Host(HostCall), HostParams(HostParamsCall), - InitHostParams(InitHostParamsCall), LatestStateMachineHeight(LatestStateMachineHeightCall), PerByteFee(PerByteFeeCall), RequestCommitments(RequestCommitmentsCall), @@ -3102,7 +3004,6 @@ pub mod evm_host { StateMachineCommitment(StateMachineCommitmentCall), StateMachineCommitmentUpdateTime(StateMachineCommitmentUpdateTimeCall), StoreConsensusState(StoreConsensusStateCall), - StoreLatestStateMachineHeight(StoreLatestStateMachineHeightCall), StoreStateMachineCommitment(StoreStateMachineCommitmentCall), Timestamp(TimestampCall), UnStakingPeriod(UnStakingPeriodCall), @@ -3199,11 +3100,6 @@ pub mod evm_host { if let Ok(decoded) = ::decode(data) { return Ok(Self::HostParams(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::InitHostParams(decoded)); - } if let Ok(decoded) = ::decode(data) { @@ -3264,11 +3160,6 @@ pub mod evm_host { { return Ok(Self::StoreConsensusState(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::StoreLatestStateMachineHeight(decoded)); - } if let Ok(decoded) = ::decode(data) { @@ -3322,7 +3213,6 @@ pub mod evm_host { Self::FundRequest(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Host(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::HostParams(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::InitHostParams(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::LatestStateMachineHeight(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::PerByteFee(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -3342,8 +3232,6 @@ pub mod evm_host { ::ethers::core::abi::AbiEncode::encode(element), Self::StoreConsensusState(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::StoreLatestStateMachineHeight(element) => - ::ethers::core::abi::AbiEncode::encode(element), Self::StoreStateMachineCommitment(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Timestamp(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -3378,7 +3266,6 @@ pub mod evm_host { Self::FundRequest(element) => ::core::fmt::Display::fmt(element, f), Self::Host(element) => ::core::fmt::Display::fmt(element, f), Self::HostParams(element) => ::core::fmt::Display::fmt(element, f), - Self::InitHostParams(element) => ::core::fmt::Display::fmt(element, f), Self::LatestStateMachineHeight(element) => ::core::fmt::Display::fmt(element, f), Self::PerByteFee(element) => ::core::fmt::Display::fmt(element, f), Self::RequestCommitments(element) => ::core::fmt::Display::fmt(element, f), @@ -3392,8 +3279,6 @@ pub mod evm_host { Self::StateMachineCommitmentUpdateTime(element) => ::core::fmt::Display::fmt(element, f), Self::StoreConsensusState(element) => ::core::fmt::Display::fmt(element, f), - Self::StoreLatestStateMachineHeight(element) => - ::core::fmt::Display::fmt(element, f), Self::StoreStateMachineCommitment(element) => ::core::fmt::Display::fmt(element, f), Self::Timestamp(element) => ::core::fmt::Display::fmt(element, f), Self::UnStakingPeriod(element) => ::core::fmt::Display::fmt(element, f), @@ -3503,11 +3388,6 @@ pub mod evm_host { Self::HostParams(value) } } - impl ::core::convert::From for EvmHostCalls { - fn from(value: InitHostParamsCall) -> Self { - Self::InitHostParams(value) - } - } impl ::core::convert::From for EvmHostCalls { fn from(value: LatestStateMachineHeightCall) -> Self { Self::LatestStateMachineHeight(value) @@ -3568,11 +3448,6 @@ pub mod evm_host { Self::StoreConsensusState(value) } } - impl ::core::convert::From for EvmHostCalls { - fn from(value: StoreLatestStateMachineHeightCall) -> Self { - Self::StoreLatestStateMachineHeight(value) - } - } impl ::core::convert::From for EvmHostCalls { fn from(value: StoreStateMachineCommitmentCall) -> Self { Self::StoreStateMachineCommitment(value) @@ -3982,7 +3857,7 @@ pub mod evm_host { pub sender: ::ethers::core::types::Address, } ///`HostParams(uint256,uint256,address,address,address,address,uint256,uint256,address,bytes, - /// uint256,uint256,uint256[])` + /// uint256,uint256[])` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -4005,7 +3880,6 @@ pub mod evm_host { pub consensus_client: ::ethers::core::types::Address, pub consensus_state: ::ethers::core::types::Bytes, pub consensus_update_timestamp: ::ethers::core::types::U256, - pub latest_state_machine_height: ::ethers::core::types::U256, pub state_machine_whitelist: ::std::vec::Vec<::ethers::core::types::U256>, } ///`ResponseReceipt(bytes32,address)` diff --git a/evm/abi/src/generated/handler.rs b/evm/abi/src/generated/handler.rs index ccfced440..0f401b355 100644 --- a/evm/abi/src/generated/handler.rs +++ b/evm/abi/src/generated/handler.rs @@ -429,35 +429,7 @@ pub mod handler { ], ), ]), - events: ::core::convert::From::from([ - ( - ::std::borrow::ToOwned::to_owned("StateMachineUpdated"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "StateMachineUpdated", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("stateMachineId"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("height"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ]), + events: ::std::collections::BTreeMap::new(), errors: ::std::collections::BTreeMap::new(), receive: false, fallback: false, @@ -567,41 +539,12 @@ pub mod handler { .method_hash([114, 190, 204, 205], (host, response)) .expect("method not found (this should never happen)") } - ///Gets the contract's `StateMachineUpdated` event - pub fn state_machine_updated_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StateMachineUpdatedFilter> - { - self.0.event() - } - /// Returns an `Event` builder for all the events of this contract. - pub fn events( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, StateMachineUpdatedFilter> - { - self.0.event_with_filter(::core::default::Default::default()) - } } impl From<::ethers::contract::Contract> for Handler { fn from(contract: ::ethers::contract::Contract) -> Self { Self::new(contract.address(), contract.client()) } } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "StateMachineUpdated", abi = "StateMachineUpdated(uint256,uint256)")] - pub struct StateMachineUpdatedFilter { - pub state_machine_id: ::ethers::core::types::U256, - pub height: ::ethers::core::types::U256, - } ///Container type for all input parameters for the `handleConsensus` function with signature /// `handleConsensus(address,bytes)` and selector `0xbb1689be` #[derive( diff --git a/evm/abi/src/generated/host_manager.rs b/evm/abi/src/generated/host_manager.rs index 2ed8f8932..314bdf6cd 100644 --- a/evm/abi/src/generated/host_manager.rs +++ b/evm/abi/src/generated/host_manager.rs @@ -33,18 +33,21 @@ pub mod host_manager { ::std::vec![::ethers::core::abi::ethabi::Function { name: ::std::borrow::ToOwned::to_owned("onAccept"), inputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("request"), + name: ::std::borrow::ToOwned::to_owned("incoming"), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct PostRequest"), + ::std::borrow::ToOwned::to_owned("struct IncomingPostRequest",), ), },], outputs: ::std::vec![], @@ -60,29 +63,34 @@ pub mod host_manager { name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), ::ethers::core::abi::ethabi::ParamType::Array( ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), ), ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), ],), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ],), - ), - ), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct GetResponse"), + ::std::borrow::ToOwned::to_owned("struct IncomingGetResponse",), ), },], outputs: ::std::vec![], @@ -150,19 +158,22 @@ pub mod host_manager { name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, ],), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct PostResponse"), + ::std::borrow::ToOwned::to_owned("struct IncomingPostResponse",), ), },], outputs: ::std::vec![], @@ -245,12 +256,12 @@ pub mod host_manager { pub static HOSTMANAGER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x13\xBD8\x03\x80a\x13\xBD\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\x8BV[\x80Q`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x90\x81\x16`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x17\x90\x91U` \x83\x01Q`\x01U`@\x90\x92\x01Q`\x02\x80T\x90\x93\x16\x91\x16\x17\x90Ua\0\xFDV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\x86W`\0\x80\xFD[\x91\x90PV[`\0``\x82\x84\x03\x12\x15a\0\x9DW`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\0\xCDWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Ra\0\xD9\x83a\0oV[\x81R` \x83\x01Q` \x82\x01Ra\0\xF1`@\x84\x01a\0oV[`@\x82\x01R\x93\x92PPPV[a\x12\xB1\x80a\x01\x0C`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80c\xCF\xF0\xAB\x96\x11a\0[W\x80c\xCF\xF0\xAB\x96\x14a\0\xDBW\x80c\xDE\xAET\xF5\x14a\x01`W\x80c\xEA\xEE\x1C\xAA\x14a\x01nW\x80c\xFE\xFF\x7F\xA8\x14a\0\x8DW`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\x8DW\x80c\x0E\x83$\xA2\x14a\0\xA2W\x80c\xBC\r\xD4G\x14a\0\xB5W\x80c\xC4\x92\xE4&\x14a\0\xC8W[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\t\xA4V[a\x01\x81V[\0[a\0\xA0a\0\xB06`\x04a\nrV[a\x01\xDDV[a\0\xA0a\0\xC36`\x04a\n\x94V[a\x02`V[a\0\xA0a\0\xD66`\x04a\x0CmV[a\x02\xB6V[a\x01,`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91RP`@\x80Q``\x81\x01\x82R`\0T`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R`\x01T` \x83\x01R`\x02T\x16\x91\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x82Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x83\x01R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01`@Q\x80\x91\x03\x90\xF3[a\0\xA0a\0\xD66`\x04a\x0C\xA1V[a\0\xA0a\x01|6`\x04a\r\xFEV[a\x03\nV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FIsmpModule doesn't emit Post res`D\x82\x01Reponses`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x027W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xD4V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x01`\x01`\xA0\x1B\x03\x19\x92\x83\x16\x17\x90U`\0\x80T\x90\x91\x16\x90UV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FIsmpModule doesn't emit Post req`D\x82\x01Rduests`\xD8\x1B`d\x82\x01R`\x84\x01a\x01\xD4V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FIsmpModule doesn't emit Get requ`D\x82\x01Rcests`\xE0\x1B`d\x82\x01R`\x84\x01a\x01\xD4V[`\x02T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x03dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xD4V[a\x03\xBCa\x03u`\0`\x01\x01Ta\x05\x9FV[a\x03\x7F\x83\x80a\x0E8V[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x92\x93\x92PPa\x05\xD0\x90PV[a\x03\xFFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15[\x98]]\x1A\x1B\xDC\x9A^\x99Y\x08\x1C\x99\\]Y\\\xDD`b\x1B`D\x82\x01R`d\x01a\x01\xD4V[`\0a\x04\x0E`\xC0\x83\x01\x83a\x0E8V[`\0\x81\x81\x10a\x04\x1FWa\x04\x1Fa\x0E\x85V[\x91\x90\x91\x015`\xF8\x1C\x90P`\x01\x81\x11\x15a\x04:Wa\x04:a\x0E\x9BV[\x90P`\0\x81`\x01\x81\x11\x15a\x04PWa\x04Pa\x0E\x9BV[\x03a\x04\xF2W`\0a\x04d`\xC0\x84\x01\x84a\x0E8V[a\x04r\x91`\x01\x90\x82\x90a\x0E\xB1V[\x81\x01\x90a\x04\x7F\x91\x90a\x0E\xDBV[`\x02T`@Qc=`\0\xFD[PPPPPPPV[`\x01\x81`\x01\x81\x11\x15a\x05\x06Wa\x05\x06a\x0E\x9BV[\x03a\x05fW`\0a\x05\x1A`\xC0\x84\x01\x84a\x0E8V[a\x05(\x91`\x01\x90\x82\x90a\x0E\xB1V[\x81\x01\x90a\x055\x91\x90a\x0F\x8CV[`\x02T`@Qc\x03G\x98{`\xE6\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD1\xE6\x1E\xC0\x90a\x04\xBB\x90\x84\x90`\x04\x01a\x11DV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm*\xB75\xB77\xBB\xB7\x100\xB1\xBA4\xB7\xB7`\x91\x1B`D\x82\x01R`d\x01a\x01\xD4V[``a\x05\xAA\x82a\x05\xFDV[`@Q` \x01a\x05\xBA\x91\x90a\x12JV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[`\0\x81Q\x83Q\x14a\x05\xE3WP`\0a\x05\xF7V[P\x81Q` \x82\x81\x01\x82\x90 \x90\x84\x01\x91\x90\x91 \x14[\x92\x91PPV[```\0a\x06\n\x83a\x06\x8FV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06)Wa\x06)a\x07gV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x06SW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x06]WP\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x06\xCEWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x06\xFAWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x07\x18Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x070Wc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x07DWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x07VW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x05\xF7W`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@Qa\x01\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x08\x12Wa\x08\x12a\x07gV[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x08+W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08DWa\x08Da\x07gV[a\x08W`\x1F\x82\x01`\x1F\x19\x16` \x01a\x07\xEAV[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08lW`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x08\xA0W`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\x08\xB7W`\0\x80\xFD[a\x08\xBFa\x07}V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x08\xD8W`\0\x80\xFD[a\x08\xE4\x85\x83\x86\x01a\x08\x1AV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x08\xFAW`\0\x80\xFD[a\t\x06\x85\x83\x86\x01a\x08\x1AV[` \x84\x01Ra\t\x17`@\x85\x01a\x08\x89V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\t0W`\0\x80\xFD[a\t<\x85\x83\x86\x01a\x08\x1AV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\tUW`\0\x80\xFD[a\ta\x85\x83\x86\x01a\x08\x1AV[`\x80\x84\x01Ra\tr`\xA0\x85\x01a\x08\x89V[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\t\x8BW`\0\x80\xFD[Pa\t\x98\x84\x82\x85\x01a\x08\x1AV[`\xC0\x83\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\t\xB6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\t\xCDW`\0\x80\xFD[\x90\x83\x01\x90``\x82\x86\x03\x12\x15a\t\xE1W`\0\x80\xFD[`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a\t\xFCWa\t\xFCa\x07gV[`@R\x825\x82\x81\x11\x15a\n\x0EW`\0\x80\xFD[a\n\x1A\x87\x82\x86\x01a\x08\xA5V[\x82RP` \x83\x015\x82\x81\x11\x15a\n/W`\0\x80\xFD[a\n;\x87\x82\x86\x01a\x08\x1AV[` \x83\x01RPa\nM`@\x84\x01a\x08\x89V[`@\x82\x01R\x95\x94PPPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x08\xA0W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\n\x84W`\0\x80\xFD[a\n\x8D\x82a\n[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\n\xA6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xBCW`\0\x80\xFD[a\n\xC8\x84\x82\x85\x01a\x08\xA5V[\x94\x93PPPPV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xE9Wa\n\xE9a\x07gV[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x0B\x04W`\0\x80\xFD[\x815` a\x0B\x19a\x0B\x14\x83a\n\xD0V[a\x07\xEAV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x0B8W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0BwW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B[W`\0\x80\x81\xFD[a\x0Bi\x89\x86\x83\x8B\x01\x01a\x08\x1AV[\x84RP\x91\x83\x01\x91\x83\x01a\x0B\xD3\x03\xD9\x84A@\xB4\xF6C\xDF\xB2}s\xB0\xAE\r\"\xEEY\x87dsolcC\0\x08\x11\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x14\xB18\x03\x80a\x14\xB1\x839\x81\x01`@\x81\x90Ra\0/\x91a\0\x8BV[\x80Q`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x90\x81\x16`\x01`\x01`\xA0\x1B\x03\x93\x84\x16\x17\x90\x91U` \x83\x01Q`\x01U`@\x90\x92\x01Q`\x02\x80T\x90\x93\x16\x91\x16\x17\x90Ua\0\xFDV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0\x86W`\0\x80\xFD[\x91\x90PV[`\0``\x82\x84\x03\x12\x15a\0\x9DW`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\0\xCDWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Ra\0\xD9\x83a\0oV[\x81R` \x83\x01Q` \x82\x01Ra\0\xF1`@\x84\x01a\0oV[`@\x82\x01R\x93\x92PPPV[a\x13\xA5\x80a\x01\x0C`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80c\xB5\xA9\x82K\x11a\0[W\x80c\xB5\xA9\x82K\x14a\0\xD6W\x80c\xBC\r\xD4G\x14a\0\xE9W\x80c\xC4\x92\xE4&\x14a\0\xFCW\x80c\xCF\xF0\xAB\x96\x14a\x01\nW`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\x8DW\x80c\x0E\x83$\xA2\x14a\0\xA2W\x80c\x0F\xEE2\xCE\x14a\0\xB5W\x80c\xB2\xA0\x1B\xF5\x14a\0\xC8W[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\nZV[a\x01\x8FV[\0[a\0\xA0a\0\xB06`\x04a\n\xADV[a\x01\xEBV[a\0\xA0a\0\xC36`\x04a\n\xCFV[a\x02nV[a\0\xA0a\0\x9B6`\x04a\x0B\tV[a\0\xA0a\0\xE46`\x04a\r#V[a\x05\x11V[a\0\xA0a\0\xF76`\x04a\x0E\xBDV[a\x05eV[a\0\xA0a\0\xE46`\x04a\x0E\xF1V[a\x01[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91RP`@\x80Q``\x81\x01\x82R`\0T`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R`\x01T` \x83\x01R`\x02T\x16\x91\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x82Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x83\x01R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01`@Q\x80\x91\x03\x90\xF3[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FIsmpModule doesn't emit Post res`D\x82\x01Reponses`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xE2V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x01`\x01`\xA0\x1B\x03\x19\x92\x83\x16\x17\x90U`\0\x80T\x90\x91\x16\x90UV[`\x02T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xE2V[6a\x02\xD3\x82\x80a\x0F%V[\x90Pa\x03-a\x02\xE6`\0`\x01\x01Ta\x05\xBBV[a\x02\xF0\x83\x80a\x0FEV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x92\x93\x92PPa\x05\xEC\x90PV[a\x03pW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15[\x98]]\x1A\x1B\xDC\x9A^\x99Y\x08\x1C\x99\\]Y\\\xDD`b\x1B`D\x82\x01R`d\x01a\x01\xE2V[`\0a\x03\x7F`\xC0\x83\x01\x83a\x0FEV[`\0\x81\x81\x10a\x03\x90Wa\x03\x90a\x0F\x92V[\x91\x90\x91\x015`\xF8\x1C\x90P`\x01\x81\x11\x15a\x03\xABWa\x03\xABa\x0F\xA8V[\x90P`\0\x81`\x01\x81\x11\x15a\x03\xC1Wa\x03\xC1a\x0F\xA8V[\x03a\x04dW`\0a\x03\xD5`\xC0\x84\x01\x84a\x0FEV[a\x03\xE3\x91`\x01\x90\x82\x90a\x0F\xBEV[\x81\x01\x90a\x03\xF0\x91\x90a\x0F\xE8V[`\x02T`@Qc=`\0\xFD[PPPPPPPPV[`\x01\x81`\x01\x81\x11\x15a\x04xWa\x04xa\x0F\xA8V[\x03a\x04\xD8W`\0a\x04\x8C`\xC0\x84\x01\x84a\x0FEV[a\x04\x9A\x91`\x01\x90\x82\x90a\x0F\xBEV[\x81\x01\x90a\x04\xA7\x91\x90a\x10\x99V[`\x02T`@QcH\xDA\x177`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90cH\xDA\x177\x90a\x04,\x90\x84\x90`\x04\x01a\x12EV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm*\xB75\xB77\xBB\xB7\x100\xB1\xBA4\xB7\xB7`\x91\x1B`D\x82\x01R`d\x01a\x01\xE2V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FIsmpModule doesn't emit Get requ`D\x82\x01Rcests`\xE0\x1B`d\x82\x01R`\x84\x01a\x01\xE2V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FIsmpModule doesn't emit Post req`D\x82\x01Rduests`\xD8\x1B`d\x82\x01R`\x84\x01a\x01\xE2V[``a\x05\xC6\x82a\x06\x19V[`@Q` \x01a\x05\xD6\x91\x90a\x13>V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[`\0\x81Q\x83Q\x14a\x05\xFFWP`\0a\x06\x13V[P\x81Q` \x82\x81\x01\x82\x90 \x90\x84\x01\x91\x90\x91 \x14[\x92\x91PPV[```\0a\x06&\x83a\x06\xABV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06EWa\x06Ea\x07\x83V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x06oW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x06yWP\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x06\xEAWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x07\x16Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x074Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x07LWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x07`Wa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x07rW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x06\x13W`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x08.Wa\x08.a\x07\x83V[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x08GW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08`Wa\x08`a\x07\x83V[a\x08s`\x1F\x82\x01`\x1F\x19\x16` \x01a\x08\x06V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08\x88W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x08\xBCW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\x08\xD3W`\0\x80\xFD[a\x08\xDBa\x07\x99V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x08\xF4W`\0\x80\xFD[a\t\0\x85\x83\x86\x01a\x086V[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\t\x16W`\0\x80\xFD[a\t\"\x85\x83\x86\x01a\x086V[` \x84\x01Ra\t3`@\x85\x01a\x08\xA5V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\tLW`\0\x80\xFD[a\tX\x85\x83\x86\x01a\x086V[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\tqW`\0\x80\xFD[a\t}\x85\x83\x86\x01a\x086V[`\x80\x84\x01Ra\t\x8E`\xA0\x85\x01a\x08\xA5V[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\t\xA7W`\0\x80\xFD[Pa\t\xB4\x84\x82\x85\x01a\x086V[`\xC0\x83\x01RP\x92\x91PPV[`\0``\x82\x84\x03\x12\x15a\t\xD2W`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x82\x82\x10\x81\x83\x11\x17\x15a\t\xF5Wa\t\xF5a\x07\x83V[\x81`@R\x82\x93P\x845\x91P\x80\x82\x11\x15a\n\rW`\0\x80\xFD[a\n\x19\x86\x83\x87\x01a\x08\xC1V[\x83R` \x85\x015\x91P\x80\x82\x11\x15a\n/W`\0\x80\xFD[Pa\n<\x85\x82\x86\x01a\x086V[` \x83\x01RPa\nN`@\x84\x01a\x08\xA5V[`@\x82\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\nlW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\x82W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\t\xC0V[\x94\x93PPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x08\xBCW`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\n\xBFW`\0\x80\xFD[a\n\xC8\x82a\n\x96V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\n\xE1W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xF7W`\0\x80\xFD[\x82\x01`@\x81\x85\x03\x12\x15a\n\xC8W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\x0B\x1BW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0B2W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x0BFW`\0\x80\xFD[a\x0BNa\x07\xC1V[\x825\x82\x81\x11\x15a\x0B]W`\0\x80\xFD[a\x0Bi\x87\x82\x86\x01a\t\xC0V[\x82RPa\x0Bx` \x84\x01a\n\x96V[` \x82\x01R\x95\x94PPPPPV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0B\x9FWa\x0B\x9Fa\x07\x83V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x0B\xBAW`\0\x80\xFD[\x815` a\x0B\xCFa\x0B\xCA\x83a\x0B\x86V[a\x08\x06V[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x0B\xEEW`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0C-W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\x11W`\0\x80\x81\xFD[a\x0C\x1F\x89\x86\x83\x8B\x01\x01a\x086V[\x84RP\x91\x83\x01\x91\x83\x01a\x0B\xF2V[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x0CJW`\0\x80\xFD[a\x0CRa\x07\x99V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0CkW`\0\x80\xFD[a\x0Cw\x85\x83\x86\x01a\x086V[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x0C\x8DW`\0\x80\xFD[a\x0C\x99\x85\x83\x86\x01a\x086V[` \x84\x01Ra\x0C\xAA`@\x85\x01a\x08\xA5V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x0C\xC3W`\0\x80\xFD[a\x0C\xCF\x85\x83\x86\x01a\x086V[``\x84\x01Ra\x0C\xE0`\x80\x85\x01a\x08\xA5V[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x0C\xF9W`\0\x80\xFD[Pa\r\x06\x84\x82\x85\x01a\x0B\xA9V[`\xA0\x83\x01RPa\r\x18`\xC0\x83\x01a\x08\xA5V[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\r5W`\0\x80\xFD[`\x01`\x01`@\x1B\x03\x80\x835\x11\x15a\rKW`\0\x80\xFD[\x825\x83\x01`@\x81\x86\x03\x12\x15a\r_W`\0\x80\xFD[a\rga\x07\xC1V[\x82\x825\x11\x15a\ruW`\0\x80\xFD[\x815\x82\x01`@\x81\x88\x03\x12\x15a\r\x89W`\0\x80\xFD[a\r\x91a\x07\xC1V[\x84\x825\x11\x15a\r\x9FW`\0\x80\xFD[a\r\xAC\x88\x835\x84\x01a\x0C8V[\x81R\x84` \x83\x015\x11\x15a\r\xBFW`\0\x80\xFD[` \x82\x015\x82\x01\x91P\x87`\x1F\x83\x01\x12a\r\xD7W`\0\x80\xFD[a\r\xE4a\x0B\xCA\x835a\x0B\x86V[\x825\x80\x82R` \x80\x83\x01\x92\x91`\x05\x1B\x85\x01\x01\x8A\x81\x11\x15a\x0E\x03W`\0\x80\xFD[` \x85\x01[\x81\x81\x10\x15a\x0E\xA2W\x88\x815\x11\x15a\x0E\x1EW`\0\x80\xFD[\x805\x86\x01`@\x81\x8E\x03`\x1F\x19\x01\x12\x15a\x0E6W`\0\x80\xFD[a\x0E>a\x07\xC1V[\x8A` \x83\x015\x11\x15a\x0EOW`\0\x80\xFD[a\x0Ea\x8E` \x80\x85\x015\x85\x01\x01a\x086V[\x81R\x8A`@\x83\x015\x11\x15a\x0EtW`\0\x80\xFD[a\x0E\x87\x8E` `@\x85\x015\x85\x01\x01a\x086V[` \x82\x01R\x80\x86RPP` \x84\x01\x93P` \x81\x01\x90Pa\x0E\x08V[PP\x80` \x84\x01RPP\x80\x83RPPa\x0Bx` \x83\x01a\n\x96V[`\0` \x82\x84\x03\x12\x15a\x0E\xCFW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0E\xE5W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\x08\xC1V[`\0` \x82\x84\x03\x12\x15a\x0F\x03W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\x19W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\x0C8V[`\0\x825`\xDE\x19\x836\x03\x01\x81\x12a\x0F;W`\0\x80\xFD[\x91\x90\x91\x01\x92\x91PPV[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a\x0F\\W`\0\x80\xFD[\x83\x01\x805\x91P`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0FvW`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a\x0F\x8BW`\0\x80\xFD[\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\0\x80\x85\x85\x11\x15a\x0F\xCEW`\0\x80\xFD[\x83\x86\x11\x15a\x0F\xDBW`\0\x80\xFD[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\0`@\x82\x84\x03\x12\x15a\x0F\xFAW`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x10\x1CWa\x10\x1Ca\x07\x83V[`@Ra\x10(\x83a\n\x96V[\x81R` \x83\x015` \x82\x01R\x80\x91PP\x92\x91PPV[`\0\x82`\x1F\x83\x01\x12a\x10OW`\0\x80\xFD[\x815` a\x10_a\x0B\xCA\x83a\x0B\x86V[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x10~W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0C-W\x805\x83R\x91\x83\x01\x91\x83\x01a\x10\x82V[`\0` \x82\x84\x03\x12\x15a\x10\xABW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x10\xC2W`\0\x80\xFD[\x90\x83\x01\x90a\x01\x80\x82\x86\x03\x12\x15a\x10\xD7W`\0\x80\xFD[a\x10\xDFa\x07\xE3V[\x825\x81R` \x83\x015` \x82\x01Ra\x10\xF9`@\x84\x01a\n\x96V[`@\x82\x01Ra\x11\n``\x84\x01a\n\x96V[``\x82\x01Ra\x11\x1B`\x80\x84\x01a\n\x96V[`\x80\x82\x01Ra\x11,`\xA0\x84\x01a\n\x96V[`\xA0\x82\x01R`\xC0\x83\x015`\xC0\x82\x01R`\xE0\x83\x015`\xE0\x82\x01Ra\x01\0a\x11S\x81\x85\x01a\n\x96V[\x90\x82\x01Ra\x01 \x83\x81\x015\x83\x81\x11\x15a\x11kW`\0\x80\xFD[a\x11w\x88\x82\x87\x01a\x086V[\x82\x84\x01RPPa\x01@\x80\x84\x015\x81\x83\x01RPa\x01`\x80\x84\x015\x83\x81\x11\x15a\x11\x9DW`\0\x80\xFD[a\x11\xA9\x88\x82\x87\x01a\x10>V[\x91\x83\x01\x91\x90\x91RP\x95\x94PPPPPV[`\0[\x83\x81\x10\x15a\x11\xD5W\x81\x81\x01Q\x83\x82\x01R` \x01a\x11\xBDV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x11\xF6\x81` \x86\x01` \x86\x01a\x11\xBAV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15a\x12:W\x81Q\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01a\x12\x1EV[P\x94\x95\x94PPPPPV[` \x81R\x81Q` \x82\x01R` \x82\x01Q`@\x82\x01R`\0`@\x83\x01Qa\x12v``\x84\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[P``\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\x80\x84\x01RP`\x80\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x84\x01RP`\xA0\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xC0\x84\x01RP`\xC0\x83\x01Q`\xE0\x83\x01R`\xE0\x83\x01Qa\x01\0\x81\x81\x85\x01R\x80\x85\x01Q\x91PPa\x01 a\x12\xEB\x81\x85\x01\x83`\x01`\x01`\xA0\x1B\x03\x16\x90RV[\x80\x85\x01Q\x91PPa\x01\x80a\x01@\x81\x81\x86\x01Ra\x13\x0Ba\x01\xA0\x86\x01\x84a\x11\xDEV[\x90\x86\x01Qa\x01`\x86\x81\x01\x91\x90\x91R\x86\x01Q\x85\x82\x03`\x1F\x19\x01\x83\x87\x01R\x90\x92Pa\x134\x83\x82a\x12\nV[\x96\x95PPPPPPV[hPOLKADOT-`\xB8\x1B\x81R`\0\x82Qa\x13b\x81`\t\x85\x01` \x87\x01a\x11\xBAV[\x91\x90\x91\x01`\t\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \xA8\x90\xE18\x19F\xA91U\x19(u-\x1EU\x19\x12)\x84?{\xFA\x1D\x10\xB8\xB3$\x08\t\xE4+\x03dsolcC\0\x08\x11\x003"; /// The bytecode of the contract. pub static HOSTMANAGER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__BYTECODE); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80c\xCF\xF0\xAB\x96\x11a\0[W\x80c\xCF\xF0\xAB\x96\x14a\0\xDBW\x80c\xDE\xAET\xF5\x14a\x01`W\x80c\xEA\xEE\x1C\xAA\x14a\x01nW\x80c\xFE\xFF\x7F\xA8\x14a\0\x8DW`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\x8DW\x80c\x0E\x83$\xA2\x14a\0\xA2W\x80c\xBC\r\xD4G\x14a\0\xB5W\x80c\xC4\x92\xE4&\x14a\0\xC8W[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\t\xA4V[a\x01\x81V[\0[a\0\xA0a\0\xB06`\x04a\nrV[a\x01\xDDV[a\0\xA0a\0\xC36`\x04a\n\x94V[a\x02`V[a\0\xA0a\0\xD66`\x04a\x0CmV[a\x02\xB6V[a\x01,`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91RP`@\x80Q``\x81\x01\x82R`\0T`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R`\x01T` \x83\x01R`\x02T\x16\x91\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x82Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x83\x01R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01`@Q\x80\x91\x03\x90\xF3[a\0\xA0a\0\xD66`\x04a\x0C\xA1V[a\0\xA0a\x01|6`\x04a\r\xFEV[a\x03\nV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FIsmpModule doesn't emit Post res`D\x82\x01Reponses`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x027W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xD4V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x01`\x01`\xA0\x1B\x03\x19\x92\x83\x16\x17\x90U`\0\x80T\x90\x91\x16\x90UV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FIsmpModule doesn't emit Post req`D\x82\x01Rduests`\xD8\x1B`d\x82\x01R`\x84\x01a\x01\xD4V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FIsmpModule doesn't emit Get requ`D\x82\x01Rcests`\xE0\x1B`d\x82\x01R`\x84\x01a\x01\xD4V[`\x02T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x03dW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xD4V[a\x03\xBCa\x03u`\0`\x01\x01Ta\x05\x9FV[a\x03\x7F\x83\x80a\x0E8V[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x92\x93\x92PPa\x05\xD0\x90PV[a\x03\xFFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15[\x98]]\x1A\x1B\xDC\x9A^\x99Y\x08\x1C\x99\\]Y\\\xDD`b\x1B`D\x82\x01R`d\x01a\x01\xD4V[`\0a\x04\x0E`\xC0\x83\x01\x83a\x0E8V[`\0\x81\x81\x10a\x04\x1FWa\x04\x1Fa\x0E\x85V[\x91\x90\x91\x015`\xF8\x1C\x90P`\x01\x81\x11\x15a\x04:Wa\x04:a\x0E\x9BV[\x90P`\0\x81`\x01\x81\x11\x15a\x04PWa\x04Pa\x0E\x9BV[\x03a\x04\xF2W`\0a\x04d`\xC0\x84\x01\x84a\x0E8V[a\x04r\x91`\x01\x90\x82\x90a\x0E\xB1V[\x81\x01\x90a\x04\x7F\x91\x90a\x0E\xDBV[`\x02T`@Qc=`\0\xFD[PPPPPPPV[`\x01\x81`\x01\x81\x11\x15a\x05\x06Wa\x05\x06a\x0E\x9BV[\x03a\x05fW`\0a\x05\x1A`\xC0\x84\x01\x84a\x0E8V[a\x05(\x91`\x01\x90\x82\x90a\x0E\xB1V[\x81\x01\x90a\x055\x91\x90a\x0F\x8CV[`\x02T`@Qc\x03G\x98{`\xE6\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD1\xE6\x1E\xC0\x90a\x04\xBB\x90\x84\x90`\x04\x01a\x11DV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm*\xB75\xB77\xBB\xB7\x100\xB1\xBA4\xB7\xB7`\x91\x1B`D\x82\x01R`d\x01a\x01\xD4V[``a\x05\xAA\x82a\x05\xFDV[`@Q` \x01a\x05\xBA\x91\x90a\x12JV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[`\0\x81Q\x83Q\x14a\x05\xE3WP`\0a\x05\xF7V[P\x81Q` \x82\x81\x01\x82\x90 \x90\x84\x01\x91\x90\x91 \x14[\x92\x91PPV[```\0a\x06\n\x83a\x06\x8FV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06)Wa\x06)a\x07gV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x06SW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x06]WP\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x06\xCEWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x06\xFAWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x07\x18Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x070Wc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x07DWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x07VW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x05\xF7W`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@Qa\x01\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\x9FWa\x07\x9Fa\x07gV[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x08\x12Wa\x08\x12a\x07gV[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x08+W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08DWa\x08Da\x07gV[a\x08W`\x1F\x82\x01`\x1F\x19\x16` \x01a\x07\xEAV[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08lW`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x08\xA0W`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\x08\xB7W`\0\x80\xFD[a\x08\xBFa\x07}V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x08\xD8W`\0\x80\xFD[a\x08\xE4\x85\x83\x86\x01a\x08\x1AV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x08\xFAW`\0\x80\xFD[a\t\x06\x85\x83\x86\x01a\x08\x1AV[` \x84\x01Ra\t\x17`@\x85\x01a\x08\x89V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\t0W`\0\x80\xFD[a\t<\x85\x83\x86\x01a\x08\x1AV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\tUW`\0\x80\xFD[a\ta\x85\x83\x86\x01a\x08\x1AV[`\x80\x84\x01Ra\tr`\xA0\x85\x01a\x08\x89V[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\t\x8BW`\0\x80\xFD[Pa\t\x98\x84\x82\x85\x01a\x08\x1AV[`\xC0\x83\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\t\xB6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\t\xCDW`\0\x80\xFD[\x90\x83\x01\x90``\x82\x86\x03\x12\x15a\t\xE1W`\0\x80\xFD[`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a\t\xFCWa\t\xFCa\x07gV[`@R\x825\x82\x81\x11\x15a\n\x0EW`\0\x80\xFD[a\n\x1A\x87\x82\x86\x01a\x08\xA5V[\x82RP` \x83\x015\x82\x81\x11\x15a\n/W`\0\x80\xFD[a\n;\x87\x82\x86\x01a\x08\x1AV[` \x83\x01RPa\nM`@\x84\x01a\x08\x89V[`@\x82\x01R\x95\x94PPPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x08\xA0W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\n\x84W`\0\x80\xFD[a\n\x8D\x82a\n[V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\n\xA6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xBCW`\0\x80\xFD[a\n\xC8\x84\x82\x85\x01a\x08\xA5V[\x94\x93PPPPV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\n\xE9Wa\n\xE9a\x07gV[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x0B\x04W`\0\x80\xFD[\x815` a\x0B\x19a\x0B\x14\x83a\n\xD0V[a\x07\xEAV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x0B8W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0BwW\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0B[W`\0\x80\x81\xFD[a\x0Bi\x89\x86\x83\x8B\x01\x01a\x08\x1AV[\x84RP\x91\x83\x01\x91\x83\x01a\x0B\xD3\x03\xD9\x84A@\xB4\xF6C\xDF\xB2}s\xB0\xAE\r\"\xEEY\x87dsolcC\0\x08\x11\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\x88W`\x005`\xE0\x1C\x80c\xB5\xA9\x82K\x11a\0[W\x80c\xB5\xA9\x82K\x14a\0\xD6W\x80c\xBC\r\xD4G\x14a\0\xE9W\x80c\xC4\x92\xE4&\x14a\0\xFCW\x80c\xCF\xF0\xAB\x96\x14a\x01\nW`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\x8DW\x80c\x0E\x83$\xA2\x14a\0\xA2W\x80c\x0F\xEE2\xCE\x14a\0\xB5W\x80c\xB2\xA0\x1B\xF5\x14a\0\xC8W[`\0\x80\xFD[a\0\xA0a\0\x9B6`\x04a\nZV[a\x01\x8FV[\0[a\0\xA0a\0\xB06`\x04a\n\xADV[a\x01\xEBV[a\0\xA0a\0\xC36`\x04a\n\xCFV[a\x02nV[a\0\xA0a\0\x9B6`\x04a\x0B\tV[a\0\xA0a\0\xE46`\x04a\r#V[a\x05\x11V[a\0\xA0a\0\xF76`\x04a\x0E\xBDV[a\x05eV[a\0\xA0a\0\xE46`\x04a\x0E\xF1V[a\x01[`@\x80Q``\x81\x01\x82R`\0\x80\x82R` \x82\x01\x81\x90R\x91\x81\x01\x91\x90\x91RP`@\x80Q``\x81\x01\x82R`\0T`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R`\x01T` \x83\x01R`\x02T\x16\x91\x81\x01\x91\x90\x91R\x90V[`@\x80Q\x82Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x82R` \x80\x85\x01Q\x90\x83\x01R\x92\x82\x01Q\x90\x92\x16\x90\x82\x01R``\x01`@Q\x80\x91\x03\x90\xF3[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FIsmpModule doesn't emit Post res`D\x82\x01Reponses`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xE2V[`\x02\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x01`\x01`\xA0\x1B\x03\x19\x92\x83\x16\x17\x90U`\0\x80T\x90\x91\x16\x90UV[`\x02T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FHostManager: Unauthorized action`D\x82\x01R`d\x01a\x01\xE2V[6a\x02\xD3\x82\x80a\x0F%V[\x90Pa\x03-a\x02\xE6`\0`\x01\x01Ta\x05\xBBV[a\x02\xF0\x83\x80a\x0FEV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x92\x93\x92PPa\x05\xEC\x90PV[a\x03pW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15[\x98]]\x1A\x1B\xDC\x9A^\x99Y\x08\x1C\x99\\]Y\\\xDD`b\x1B`D\x82\x01R`d\x01a\x01\xE2V[`\0a\x03\x7F`\xC0\x83\x01\x83a\x0FEV[`\0\x81\x81\x10a\x03\x90Wa\x03\x90a\x0F\x92V[\x91\x90\x91\x015`\xF8\x1C\x90P`\x01\x81\x11\x15a\x03\xABWa\x03\xABa\x0F\xA8V[\x90P`\0\x81`\x01\x81\x11\x15a\x03\xC1Wa\x03\xC1a\x0F\xA8V[\x03a\x04dW`\0a\x03\xD5`\xC0\x84\x01\x84a\x0FEV[a\x03\xE3\x91`\x01\x90\x82\x90a\x0F\xBEV[\x81\x01\x90a\x03\xF0\x91\x90a\x0F\xE8V[`\x02T`@Qc=`\0\xFD[PPPPPPPPV[`\x01\x81`\x01\x81\x11\x15a\x04xWa\x04xa\x0F\xA8V[\x03a\x04\xD8W`\0a\x04\x8C`\xC0\x84\x01\x84a\x0FEV[a\x04\x9A\x91`\x01\x90\x82\x90a\x0F\xBEV[\x81\x01\x90a\x04\xA7\x91\x90a\x10\x99V[`\x02T`@QcH\xDA\x177`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90cH\xDA\x177\x90a\x04,\x90\x84\x90`\x04\x01a\x12EV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rm*\xB75\xB77\xBB\xB7\x100\xB1\xBA4\xB7\xB7`\x91\x1B`D\x82\x01R`d\x01a\x01\xE2V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FIsmpModule doesn't emit Get requ`D\x82\x01Rcests`\xE0\x1B`d\x82\x01R`\x84\x01a\x01\xE2V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FIsmpModule doesn't emit Post req`D\x82\x01Rduests`\xD8\x1B`d\x82\x01R`\x84\x01a\x01\xE2V[``a\x05\xC6\x82a\x06\x19V[`@Q` \x01a\x05\xD6\x91\x90a\x13>V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[`\0\x81Q\x83Q\x14a\x05\xFFWP`\0a\x06\x13V[P\x81Q` \x82\x81\x01\x82\x90 \x90\x84\x01\x91\x90\x91 \x14[\x92\x91PPV[```\0a\x06&\x83a\x06\xABV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06EWa\x06Ea\x07\x83V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x06oW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x06yWP\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x06\xEAWr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x07\x16Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x074Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x07LWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x07`Wa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x07rW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x06\x13W`\x01\x01\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@Qa\x01\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x07\xBBWa\x07\xBBa\x07\x83V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x08.Wa\x08.a\x07\x83V[`@R\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x08GW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x08`Wa\x08`a\x07\x83V[a\x08s`\x1F\x82\x01`\x1F\x19\x16` \x01a\x08\x06V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x08\x88W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x08\xBCW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\x08\xD3W`\0\x80\xFD[a\x08\xDBa\x07\x99V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x08\xF4W`\0\x80\xFD[a\t\0\x85\x83\x86\x01a\x086V[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\t\x16W`\0\x80\xFD[a\t\"\x85\x83\x86\x01a\x086V[` \x84\x01Ra\t3`@\x85\x01a\x08\xA5V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\tLW`\0\x80\xFD[a\tX\x85\x83\x86\x01a\x086V[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\tqW`\0\x80\xFD[a\t}\x85\x83\x86\x01a\x086V[`\x80\x84\x01Ra\t\x8E`\xA0\x85\x01a\x08\xA5V[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\t\xA7W`\0\x80\xFD[Pa\t\xB4\x84\x82\x85\x01a\x086V[`\xC0\x83\x01RP\x92\x91PPV[`\0``\x82\x84\x03\x12\x15a\t\xD2W`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x82\x82\x10\x81\x83\x11\x17\x15a\t\xF5Wa\t\xF5a\x07\x83V[\x81`@R\x82\x93P\x845\x91P\x80\x82\x11\x15a\n\rW`\0\x80\xFD[a\n\x19\x86\x83\x87\x01a\x08\xC1V[\x83R` \x85\x015\x91P\x80\x82\x11\x15a\n/W`\0\x80\xFD[Pa\n<\x85\x82\x86\x01a\x086V[` \x83\x01RPa\nN`@\x84\x01a\x08\xA5V[`@\x82\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\nlW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\x82W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\t\xC0V[\x94\x93PPPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x08\xBCW`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\n\xBFW`\0\x80\xFD[a\n\xC8\x82a\n\x96V[\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\n\xE1W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xF7W`\0\x80\xFD[\x82\x01`@\x81\x85\x03\x12\x15a\n\xC8W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\x0B\x1BW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0B2W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x0BFW`\0\x80\xFD[a\x0BNa\x07\xC1V[\x825\x82\x81\x11\x15a\x0B]W`\0\x80\xFD[a\x0Bi\x87\x82\x86\x01a\t\xC0V[\x82RPa\x0Bx` \x84\x01a\n\x96V[` \x82\x01R\x95\x94PPPPPV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0B\x9FWa\x0B\x9Fa\x07\x83V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x0B\xBAW`\0\x80\xFD[\x815` a\x0B\xCFa\x0B\xCA\x83a\x0B\x86V[a\x08\x06V[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x0B\xEEW`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0C-W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0C\x11W`\0\x80\x81\xFD[a\x0C\x1F\x89\x86\x83\x8B\x01\x01a\x086V[\x84RP\x91\x83\x01\x91\x83\x01a\x0B\xF2V[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x0CJW`\0\x80\xFD[a\x0CRa\x07\x99V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0CkW`\0\x80\xFD[a\x0Cw\x85\x83\x86\x01a\x086V[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x0C\x8DW`\0\x80\xFD[a\x0C\x99\x85\x83\x86\x01a\x086V[` \x84\x01Ra\x0C\xAA`@\x85\x01a\x08\xA5V[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x0C\xC3W`\0\x80\xFD[a\x0C\xCF\x85\x83\x86\x01a\x086V[``\x84\x01Ra\x0C\xE0`\x80\x85\x01a\x08\xA5V[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x0C\xF9W`\0\x80\xFD[Pa\r\x06\x84\x82\x85\x01a\x0B\xA9V[`\xA0\x83\x01RPa\r\x18`\xC0\x83\x01a\x08\xA5V[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\r5W`\0\x80\xFD[`\x01`\x01`@\x1B\x03\x80\x835\x11\x15a\rKW`\0\x80\xFD[\x825\x83\x01`@\x81\x86\x03\x12\x15a\r_W`\0\x80\xFD[a\rga\x07\xC1V[\x82\x825\x11\x15a\ruW`\0\x80\xFD[\x815\x82\x01`@\x81\x88\x03\x12\x15a\r\x89W`\0\x80\xFD[a\r\x91a\x07\xC1V[\x84\x825\x11\x15a\r\x9FW`\0\x80\xFD[a\r\xAC\x88\x835\x84\x01a\x0C8V[\x81R\x84` \x83\x015\x11\x15a\r\xBFW`\0\x80\xFD[` \x82\x015\x82\x01\x91P\x87`\x1F\x83\x01\x12a\r\xD7W`\0\x80\xFD[a\r\xE4a\x0B\xCA\x835a\x0B\x86V[\x825\x80\x82R` \x80\x83\x01\x92\x91`\x05\x1B\x85\x01\x01\x8A\x81\x11\x15a\x0E\x03W`\0\x80\xFD[` \x85\x01[\x81\x81\x10\x15a\x0E\xA2W\x88\x815\x11\x15a\x0E\x1EW`\0\x80\xFD[\x805\x86\x01`@\x81\x8E\x03`\x1F\x19\x01\x12\x15a\x0E6W`\0\x80\xFD[a\x0E>a\x07\xC1V[\x8A` \x83\x015\x11\x15a\x0EOW`\0\x80\xFD[a\x0Ea\x8E` \x80\x85\x015\x85\x01\x01a\x086V[\x81R\x8A`@\x83\x015\x11\x15a\x0EtW`\0\x80\xFD[a\x0E\x87\x8E` `@\x85\x015\x85\x01\x01a\x086V[` \x82\x01R\x80\x86RPP` \x84\x01\x93P` \x81\x01\x90Pa\x0E\x08V[PP\x80` \x84\x01RPP\x80\x83RPPa\x0Bx` \x83\x01a\n\x96V[`\0` \x82\x84\x03\x12\x15a\x0E\xCFW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0E\xE5W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\x08\xC1V[`\0` \x82\x84\x03\x12\x15a\x0F\x03W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F\x19W`\0\x80\xFD[a\n\x8E\x84\x82\x85\x01a\x0C8V[`\0\x825`\xDE\x19\x836\x03\x01\x81\x12a\x0F;W`\0\x80\xFD[\x91\x90\x91\x01\x92\x91PPV[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a\x0F\\W`\0\x80\xFD[\x83\x01\x805\x91P`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0FvW`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a\x0F\x8BW`\0\x80\xFD[\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\0\x80\x85\x85\x11\x15a\x0F\xCEW`\0\x80\xFD[\x83\x86\x11\x15a\x0F\xDBW`\0\x80\xFD[PP\x82\x01\x93\x91\x90\x92\x03\x91PV[`\0`@\x82\x84\x03\x12\x15a\x0F\xFAW`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x10\x1CWa\x10\x1Ca\x07\x83V[`@Ra\x10(\x83a\n\x96V[\x81R` \x83\x015` \x82\x01R\x80\x91PP\x92\x91PPV[`\0\x82`\x1F\x83\x01\x12a\x10OW`\0\x80\xFD[\x815` a\x10_a\x0B\xCA\x83a\x0B\x86V[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x10~W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x0C-W\x805\x83R\x91\x83\x01\x91\x83\x01a\x10\x82V[`\0` \x82\x84\x03\x12\x15a\x10\xABW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x10\xC2W`\0\x80\xFD[\x90\x83\x01\x90a\x01\x80\x82\x86\x03\x12\x15a\x10\xD7W`\0\x80\xFD[a\x10\xDFa\x07\xE3V[\x825\x81R` \x83\x015` \x82\x01Ra\x10\xF9`@\x84\x01a\n\x96V[`@\x82\x01Ra\x11\n``\x84\x01a\n\x96V[``\x82\x01Ra\x11\x1B`\x80\x84\x01a\n\x96V[`\x80\x82\x01Ra\x11,`\xA0\x84\x01a\n\x96V[`\xA0\x82\x01R`\xC0\x83\x015`\xC0\x82\x01R`\xE0\x83\x015`\xE0\x82\x01Ra\x01\0a\x11S\x81\x85\x01a\n\x96V[\x90\x82\x01Ra\x01 \x83\x81\x015\x83\x81\x11\x15a\x11kW`\0\x80\xFD[a\x11w\x88\x82\x87\x01a\x086V[\x82\x84\x01RPPa\x01@\x80\x84\x015\x81\x83\x01RPa\x01`\x80\x84\x015\x83\x81\x11\x15a\x11\x9DW`\0\x80\xFD[a\x11\xA9\x88\x82\x87\x01a\x10>V[\x91\x83\x01\x91\x90\x91RP\x95\x94PPPPPV[`\0[\x83\x81\x10\x15a\x11\xD5W\x81\x81\x01Q\x83\x82\x01R` \x01a\x11\xBDV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x11\xF6\x81` \x86\x01` \x86\x01a\x11\xBAV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\0\x81Q\x80\x84R` \x80\x85\x01\x94P\x80\x84\x01`\0[\x83\x81\x10\x15a\x12:W\x81Q\x87R\x95\x82\x01\x95\x90\x82\x01\x90`\x01\x01a\x12\x1EV[P\x94\x95\x94PPPPPV[` \x81R\x81Q` \x82\x01R` \x82\x01Q`@\x82\x01R`\0`@\x83\x01Qa\x12v``\x84\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[P``\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\x80\x84\x01RP`\x80\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x84\x01RP`\xA0\x83\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xC0\x84\x01RP`\xC0\x83\x01Q`\xE0\x83\x01R`\xE0\x83\x01Qa\x01\0\x81\x81\x85\x01R\x80\x85\x01Q\x91PPa\x01 a\x12\xEB\x81\x85\x01\x83`\x01`\x01`\xA0\x1B\x03\x16\x90RV[\x80\x85\x01Q\x91PPa\x01\x80a\x01@\x81\x81\x86\x01Ra\x13\x0Ba\x01\xA0\x86\x01\x84a\x11\xDEV[\x90\x86\x01Qa\x01`\x86\x81\x01\x91\x90\x91R\x86\x01Q\x85\x82\x03`\x1F\x19\x01\x83\x87\x01R\x90\x92Pa\x134\x83\x82a\x12\nV[\x96\x95PPPPPPV[hPOLKADOT-`\xB8\x1B\x81R`\0\x82Qa\x13b\x81`\t\x85\x01` \x87\x01a\x11\xBAV[\x91\x90\x91\x01`\t\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \xA8\x90\xE18\x19F\xA91U\x19(u-\x1EU\x19\x12)\x84?{\xFA\x1D\x10\xB8\xB3$\x08\t\xE4+\x03dsolcC\0\x08\x11\x003"; /// The deployed bytecode of the contract. pub static HOSTMANAGER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); @@ -325,22 +336,22 @@ pub mod host_manager { let deployer = ::ethers::contract::ContractDeployer::new(deployer); Ok(deployer) } - ///Calls the contract's `onAccept` (0xeaee1caa) function + ///Calls the contract's `onAccept` (0x0fee32ce) function pub fn on_accept( &self, - request: PostRequest, + incoming: IncomingPostRequest, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([234, 238, 28, 170], (request,)) + .method_hash([15, 238, 50, 206], (incoming,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `onGetResponse` (0xdeae54f5) function + ///Calls the contract's `onGetResponse` (0xb5a9824b) function pub fn on_get_response( &self, - p0: GetResponse, + p0: IncomingGetResponse, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([222, 174, 84, 245], (p0,)) + .method_hash([181, 169, 130, 75], (p0,)) .expect("method not found (this should never happen)") } ///Calls the contract's `onGetTimeout` (0xc492e426) function @@ -361,13 +372,13 @@ pub mod host_manager { .method_hash([188, 13, 212, 71], (p0,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `onPostResponse` (0xfeff7fa8) function + ///Calls the contract's `onPostResponse` (0xb2a01bf5) function pub fn on_post_response( &self, - p0: PostResponse, + p0: IncomingPostResponse, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([254, 255, 127, 168], (p0,)) + .method_hash([178, 160, 27, 245], (p0,)) .expect("method not found (this should never happen)") } ///Calls the contract's `onPostResponseTimeout` (0x0bc37bab) function @@ -401,7 +412,8 @@ pub mod host_manager { } } ///Container type for all input parameters for the `onAccept` function with signature - /// `onAccept((bytes,bytes,uint64,bytes,bytes,uint64,bytes))` and selector `0xeaee1caa` + /// `onAccept(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),address))` and selector + /// `0x0fee32ce` #[derive( Clone, ::ethers::contract::EthCall, @@ -412,13 +424,16 @@ pub mod host_manager { Eq, Hash, )] - #[ethcall(name = "onAccept", abi = "onAccept((bytes,bytes,uint64,bytes,bytes,uint64,bytes))")] + #[ethcall( + name = "onAccept", + abi = "onAccept(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),address))" + )] pub struct OnAcceptCall { - pub request: PostRequest, + pub incoming: IncomingPostRequest, } ///Container type for all input parameters for the `onGetResponse` function with signature - /// `onGetResponse(((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]))` and - /// selector `0xdeae54f5` + /// `onGetResponse((((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]), + /// address))` and selector `0xb5a9824b` #[derive( Clone, ::ethers::contract::EthCall, @@ -431,9 +446,9 @@ pub mod host_manager { )] #[ethcall( name = "onGetResponse", - abi = "onGetResponse(((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]))" + abi = "onGetResponse((((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]),address))" )] - pub struct OnGetResponseCall(pub GetResponse); + pub struct OnGetResponseCall(pub IncomingGetResponse); ///Container type for all input parameters for the `onGetTimeout` function with signature /// `onGetTimeout((bytes,bytes,uint64,bytes,uint64,bytes[],uint64))` and selector `0xc492e426` #[derive( @@ -470,8 +485,8 @@ pub mod host_manager { )] pub struct OnPostRequestTimeoutCall(pub PostRequest); ///Container type for all input parameters for the `onPostResponse` function with signature - /// `onPostResponse(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64))` and selector - /// `0xfeff7fa8` + /// `onPostResponse((((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64),address))` and + /// selector `0xb2a01bf5` #[derive( Clone, ::ethers::contract::EthCall, @@ -484,9 +499,9 @@ pub mod host_manager { )] #[ethcall( name = "onPostResponse", - abi = "onPostResponse(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64))" + abi = "onPostResponse((((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64),address))" )] - pub struct OnPostResponseCall(pub PostResponse); + pub struct OnPostResponseCall(pub IncomingPostResponse); ///Container type for all input parameters for the `onPostResponseTimeout` function with /// signature `onPostResponseTimeout(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes, /// uint64))` and selector `0x0bc37bab` diff --git a/evm/abi/src/generated/ping_module.rs b/evm/abi/src/generated/ping_module.rs index 74f46f7a5..9a578d793 100644 --- a/evm/abi/src/generated/ping_module.rs +++ b/evm/abi/src/generated/ping_module.rs @@ -160,18 +160,21 @@ pub mod ping_module { ::std::vec![::ethers::core::abi::ethabi::Function { name: ::std::borrow::ToOwned::to_owned("onAccept"), inputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("request"), + name: ::std::borrow::ToOwned::to_owned("incoming"), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct PostRequest"), + ::std::borrow::ToOwned::to_owned("struct IncomingPostRequest",), ), },], outputs: ::std::vec![], @@ -187,29 +190,34 @@ pub mod ping_module { name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Bytes, + ), + ), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), ::ethers::core::abi::ethabi::ParamType::Array( ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple( + ::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ], + ), ), ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), ],), - ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ],), - ), - ), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct GetResponse"), + ::std::borrow::ToOwned::to_owned("struct IncomingGetResponse",), ), },], outputs: ::std::vec![], @@ -277,19 +285,22 @@ pub mod ping_module { name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), ::ethers::core::abi::ethabi::ParamType::Bytes, ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Bytes, ],), - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Address, ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct PostResponse"), + ::std::borrow::ToOwned::to_owned("struct IncomingPostResponse",), ), },], outputs: ::std::vec![], @@ -450,12 +461,12 @@ pub mod ping_module { pub static PINGMODULE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x18\xA18\x03\x80a\x18\xA1\x839\x81\x01`@\x81\x90Ra\0/\x91a\0TV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90Ua\0\x84V[`\0` \x82\x84\x03\x12\x15a\0fW`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0}W`\0\x80\xFD[\x93\x92PPPV[a\x18\x0E\x80a\0\x93`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80c\xBC\r\xD4G\x11a\0\x8CW\x80c\xDE\xAET\xF5\x11a\0fW\x80c\xDE\xAET\xF5\x14a\x01\x94W\x80c\xEA\xEE\x1C\xAA\x14a\x01\xA7W\x80c\xF47\xBCY\x14a\x01\xBAW\x80c\xFE\xFF\x7F\xA8\x14a\x01\xD5W`\0\x80\xFD[\x80c\xBC\r\xD4G\x14a\x01[W\x80c\xC4\x92\xE4&\x14a\x01nW\x80c\xD5\xF6\xEE\xFD\x14a\x01\x81W`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\xD4W\x80c\x0E\x83$\xA2\x14a\0\xE9W\x80cJi.\x06\x14a\0\xFCW\x80cM\r\x9C;\x14a\x01\x0FW\x80cp\xC5GO\x14a\x015W\x80cr5N\x9B\x14a\x01HW[`\0\x80\xFD[a\0\xE7a\0\xE26`\x04a\x0EkV[a\x01\xE8V[\0[a\0\xE7a\0\xF76`\x04a\x0F:V[a\x02?V[a\0\xE7a\x01\n6`\x04a\x0FWV[a\x02\x8CV[a\x01\"a\x01\x1D6`\x04a\x0EkV[a\x04@V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01\"a\x01C6`\x04a\x10\x01V[a\x04\xF0V[a\0\xE7a\x01V6`\x04a\x105V[a\x070V[a\0\xE7a\x01i6`\x04a\x10\x01V[a\x08JV[a\0\xE7a\x01|6`\x04a\x11\xE6V[a\x08\xA1V[a\x01\"a\x01\x8F6`\x04a\x11\xE6V[a\x08\xF8V[a\0\xE7a\x01\xA26`\x04a\x12\x1AV[a\tmV[a\0\xE7a\x01\xB56`\x04a\x10\x01V[a\t\xC4V[`\0T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01,V[a\0\xE7a\x01\xE36`\x04a\x0EkV[a\n-V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\x13W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7Fhv\xFA>\xCC}\x82\x1F!]\x82\x12B\xCB\xBE\x1F\x0E0\xA0\n\x85\xC2\"\xD6\x92\xA7\x96\x8F\xD3\xAF\xF1\x0B\x90`\0\x90\xA1PV[`\x01T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02jW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0[\x81``\x01Q\x81\x10\x15a\x04=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x03l\x91\x90\x81\x01\x90a\x13\x9BV[`@Q` \x01a\x03|\x91\x90a\x14\x11V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x81R\x90\x82R\x85\x81\x01Q`\x01`\x01`@\x1B\x03\x16` \x83\x01R`\x80\x86\x01Q\x82\x82\x01R2``\x90\x92\x01\x91\x90\x91R`\0T\x90Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x03\xE4\x90\x84\x90`\x04\x01a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04\x03W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04'\x91\x90a\x15\x04V[PP\x80\x80a\x044\x90a\x153V[\x91PPa\x02\x8FV[PPV[`@\x80Q`\xA0\x81\x01\x82R\x82Q\x81R` \x80\x84\x01Q\x90\x82\x01R\x82\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x81\x83\x01R`\0``\x82\x01\x81\x90R2`\x80\x83\x01R\x80T\x92Qc\x94H\x08\x05`\xE0\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\x94H\x08\x05\x90a\x04\xA6\x90\x84\x90`\x04\x01a\x15LV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04\xC5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xE9\x91\x90a\x15\x04V[\x93\x92PPPV[`\0\x80T`@\x80Qcd\x1Dr\x9D`\xE0\x1B\x81R\x90Q\x83\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cd\x1Dr\x9D\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05:W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05^\x91\x90a\x15\x04V[\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16cdxF\xA5`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\xB1W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xD5\x91\x90a\x16}V[`\x01`\x01`\xA0\x1B\x03\x16c#\xB8r\xDD30\x86`\xC0\x01QQ\x85a\x05\xF6\x91\x90a\x16\x9AV[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x86\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x04\x82\x01R\x92\x90\x91\x16`$\x83\x01R`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x06JW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06n\x91\x90a\x16\xB1V[P`@\x80Q`\xC0\x80\x82\x01\x83R` \x80\x87\x01Q\x83R`\x80\x80\x88\x01Q\x91\x84\x01\x91\x90\x91R\x90\x86\x01Q\x82\x84\x01R`\xA0\x80\x87\x01Q`\x01`\x01`@\x1B\x03\x16``\x84\x01R`\0\x91\x83\x01\x82\x90R2\x90\x83\x01RT\x91Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x06\xE5\x90\x84\x90`\x04\x01a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x07\x04W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07(\x91\x90a\x15\x04V[\x94\x93PPPPV[`\0`@Q\x80`\xC0\x01`@R\x80a\x07F\x84a\n\x84V[\x81R` \x01`@Q\x80`@\x01`@R\x80`\x08\x81R` \x01g\x1A\\\xDB\\\x0BX\\\xDD`\xC2\x1B\x81RP\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0E\x81R` \x01mhello from evm`\x90\x1B\x81RP\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x16\x81R` \x01`\0\x81R` \x012`\x01`\x01`\xA0\x1B\x03\x16\x81RP\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xB8\xF3\xE8\xF5\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08\x02\x91\x90a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x08!W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08E\x91\x90a\x15\x04V[PPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08uW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xBB\xF4\x8AR\xB8>\xBC=\x9E9\xF0\x92\xA8\xB9\xB7\xE5o\x1D\xD0\xDCC\x8B\xEF@\xDC}\x92\x99Bp\xA5\x9F\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08\xCCW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x83\xE6 %\xE4\xBCXu\x16\xD0\xBC1^2\x9E\xAC\x0Cf6(T\xFE\xB7\xCDA5\xEF\x81C\xBA\x15\xF9\x90`\0\x90\xA1PV[`@\x80Q`\xA0\x80\x82\x01\x83R` \x80\x85\x01Q\x83R`\xC0\x85\x01Q`\x01`\x01`@\x1B\x03\x90\x81\x16\x91\x84\x01\x91\x90\x91R\x90\x84\x01Q\x82\x84\x01R`\x80\x80\x85\x01Q\x90\x91\x16``\x83\x01R3\x90\x82\x01R`\0\x80T\x92Qc47VA`\xE2\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD0\xDDY\x04\x90a\x04\xA6\x90\x84\x90`\x04\x01a\x16\xD3V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x98W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xCB\xCB\xCAfM\xFE\xB9$\xCC\xD8P\xA0\x08h\x13\x0B\xFB\x1D\xF1W\t\x9A\x06\xF9)h\"\xCB{\xC3\xAD\x01\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\xEFW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x7F\xFB\x08{?\xFB\xBB\x0F\xC9\"\xDC\xCF\x87%\x08g\x1Av\x05\x85\x94#\xEB\x90\xEB\x01LV\xFD\xBA\x14\x84\xDC\x81`\xC0\x01Q`@Qa\n\"\x91\x90a\x17\x96V[`@Q\x80\x91\x03\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\nXW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xD7\xDC\x99\xAF\xB6\xC309\xCE\xA4PZ\x9E,\xAB4q\xD3Y\xCE\xBE\x02\x1E\xC1'\xDC\x94\xDD\xD3Y\xD3\xC5\x90`\0\x90\xA1PV[``a\n\x8F\x82a\n\xB5V[`@Q` \x01a\n\x9F\x91\x90a\x17\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[```\0a\n\xC2\x83a\x0BHV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xE1Wa\n\xE1a\x0C!V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x0BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x15W[P\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0B\x87Wr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x0B\xB3Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0B\xD1Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0B\xE9Wc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0B\xFDWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0C\x0FW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x0C\x1BW`\x01\x01[\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@R\x90V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0C\xCBWa\x0C\xCBa\x0C!V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0C\xECWa\x0C\xECa\x0C!V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\r\x0BW`\0\x80\xFD[\x815a\r\x1Ea\r\x19\x82a\x0C\xD3V[a\x0C\xA3V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\r3W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\rgW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\r~W`\0\x80\xFD[a\r\x86a\x0C7V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\r\x9FW`\0\x80\xFD[a\r\xAB\x85\x83\x86\x01a\x0C\xFAV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\r\xC1W`\0\x80\xFD[a\r\xCD\x85\x83\x86\x01a\x0C\xFAV[` \x84\x01Ra\r\xDE`@\x85\x01a\rPV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\r\xF7W`\0\x80\xFD[a\x0E\x03\x85\x83\x86\x01a\x0C\xFAV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\x0E\x1CW`\0\x80\xFD[a\x0E(\x85\x83\x86\x01a\x0C\xFAV[`\x80\x84\x01Ra\x0E9`\xA0\x85\x01a\rPV[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\x0ERW`\0\x80\xFD[Pa\x0E_\x84\x82\x85\x01a\x0C\xFAV[`\xC0\x83\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x0E}W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0E\x94W`\0\x80\xFD[\x90\x83\x01\x90``\x82\x86\x03\x12\x15a\x0E\xA8W`\0\x80\xFD[`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a\x0E\xC3Wa\x0E\xC3a\x0C!V[`@R\x825\x82\x81\x11\x15a\x0E\xD5W`\0\x80\xFD[a\x0E\xE1\x87\x82\x86\x01a\rlV[\x82RP` \x83\x015\x82\x81\x11\x15a\x0E\xF6W`\0\x80\xFD[a\x0F\x02\x87\x82\x86\x01a\x0C\xFAV[` \x83\x01RPa\x0F\x14`@\x84\x01a\rPV[`@\x82\x01R\x95\x94PPPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F7W`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a\x0FLW`\0\x80\xFD[\x815a\x04\xE9\x81a\x0F\"V[`\0` \x82\x84\x03\x12\x15a\x0FiW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0F\x80W`\0\x80\xFD[\x90\x83\x01\x90`\xA0\x82\x86\x03\x12\x15a\x0F\x94W`\0\x80\xFD[a\x0F\x9Ca\x0C_V[\x825\x82\x81\x11\x15a\x0F\xABW`\0\x80\xFD[a\x0F\xB7\x87\x82\x86\x01a\x0C\xFAV[\x82RP` \x83\x015\x91Pa\x0F\xCA\x82a\x0F\"V[\x81` \x82\x01Ra\x0F\xDC`@\x84\x01a\rPV[`@\x82\x01R``\x83\x015``\x82\x01R`\x80\x83\x015`\x80\x82\x01R\x80\x93PPPP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10\x13W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10)W`\0\x80\xFD[a\x07(\x84\x82\x85\x01a\rlV[`\0` \x82\x84\x03\x12\x15a\x10GW`\0\x80\xFD[P5\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x10gWa\x10ga\x0C!V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x10\x82W`\0\x80\xFD[\x815` a\x10\x92a\r\x19\x83a\x10NV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x10\xB1W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x10\xF0W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\xD4W`\0\x80\x81\xFD[a\x10\xE2\x89\x86\x83\x8B\x01\x01a\x0C\xFAV[\x84RP\x91\x83\x01\x91\x83\x01a\x10\xB5V[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x11\rW`\0\x80\xFD[a\x11\x15a\x0C7V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x11.W`\0\x80\xFD[a\x11:\x85\x83\x86\x01a\x0C\xFAV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x11PW`\0\x80\xFD[a\x11\\\x85\x83\x86\x01a\x0C\xFAV[` \x84\x01Ra\x11m`@\x85\x01a\rPV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x11\x86W`\0\x80\xFD[a\x11\x92\x85\x83\x86\x01a\x0C\xFAV[``\x84\x01Ra\x11\xA3`\x80\x85\x01a\rPV[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x11\xBCW`\0\x80\xFD[Pa\x11\xC9\x84\x82\x85\x01a\x10qV[`\xA0\x83\x01RPa\x11\xDB`\xC0\x83\x01a\rPV[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x11\xF8W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\x0EW`\0\x80\xFD[a\x07(\x84\x82\x85\x01a\x10\xFBV[`\0` \x80\x83\x85\x03\x12\x15a\x12-W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x12DW`\0\x80\xFD[\x81\x85\x01\x91P`@\x80\x83\x88\x03\x12\x15a\x12ZW`\0\x80\xFD[a\x12ba\x0C\x81V[\x835\x83\x81\x11\x15a\x12qW`\0\x80\xFD[a\x12}\x89\x82\x87\x01a\x10\xFBV[\x82RP\x84\x84\x015\x83\x81\x11\x15a\x12\x91W`\0\x80\xFD[\x80\x85\x01\x94PP\x87`\x1F\x85\x01\x12a\x12\xA6W`\0\x80\xFD[\x835a\x12\xB4a\r\x19\x82a\x10NV[\x81\x81R`\x05\x91\x90\x91\x1B\x85\x01\x86\x01\x90\x86\x81\x01\x90\x8A\x83\x11\x15a\x12\xD3W`\0\x80\xFD[\x87\x87\x01[\x83\x81\x10\x15a\x13cW\x805\x87\x81\x11\x15a\x12\xEFW`\0\x80\x81\xFD[\x88\x01\x80\x8D\x03`\x1F\x19\x01\x87\x13\x15a\x13\x05W`\0\x80\x81\xFD[a\x13\ra\x0C\x81V[\x8A\x82\x015\x89\x81\x11\x15a\x13\x1FW`\0\x80\x81\xFD[a\x13-\x8F\x8D\x83\x86\x01\x01a\x0C\xFAV[\x82RP\x87\x82\x015\x89\x81\x11\x15a\x13BW`\0\x80\x81\xFD[a\x13P\x8F\x8D\x83\x86\x01\x01a\x0C\xFAV[\x82\x8D\x01RP\x84RP\x91\x88\x01\x91\x88\x01a\x12\xD7V[P\x96\x83\x01\x96\x90\x96RP\x97\x96PPPPPPPV[`\0[\x83\x81\x10\x15a\x13\x92W\x81\x81\x01Q\x83\x82\x01R` \x01a\x13zV[PP`\0\x91\x01RV[`\0` \x82\x84\x03\x12\x15a\x13\xADW`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xC3W`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x13\xD4W`\0\x80\xFD[\x80Qa\x13\xE2a\r\x19\x82a\x0C\xD3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\xF7W`\0\x80\xFD[a\x14\x08\x82` \x83\x01` \x86\x01a\x13wV[\x95\x94PPPPPV[j\x03C+ccy\x033\x93{i`\xAD\x1B\x81R`\0\x82Qa\x147\x81`\x0B\x85\x01` \x87\x01a\x13wV[\x91\x90\x91\x01`\x0B\x01\x92\x91PPV[`\0\x81Q\x80\x84Ra\x14\\\x81` \x86\x01` \x86\x01a\x13wV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0\x82Q`\xC0` \x84\x01Ra\x14\x8C`\xE0\x84\x01\x82a\x14DV[\x90P` \x84\x01Q`\x1F\x19\x80\x85\x84\x03\x01`@\x86\x01Ra\x14\xAA\x83\x83a\x14DV[\x92P`@\x86\x01Q\x91P\x80\x85\x84\x03\x01``\x86\x01RPa\x14\xC8\x82\x82a\x14DV[\x91PP`\x01`\x01`@\x1B\x03``\x85\x01Q\x16`\x80\x84\x01R`\x80\x84\x01Q`\xA0\x84\x01R`\x01\x80`\xA0\x1B\x03`\xA0\x85\x01Q\x16`\xC0\x84\x01R\x80\x91PP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x15\x16W`\0\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x15EWa\x15Ea\x15\x1DV[P`\x01\x01\x90V[` \x81R`\0\x82Q`\xA0` \x84\x01R\x80Q`\xE0`\xC0\x85\x01Ra\x15ra\x01\xA0\x85\x01\x82a\x14DV[\x90P` \x82\x01Q`\xBF\x19\x80\x86\x84\x03\x01`\xE0\x87\x01Ra\x15\x90\x83\x83a\x14DV[\x92P`\x01`\x01`@\x1B\x03`@\x85\x01Q\x16a\x01\0\x87\x01R``\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01 \x87\x01Ra\x15\xC2\x83\x83a\x14DV[\x92P`\x80\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01@\x87\x01Ra\x15\xE0\x83\x83a\x14DV[\x92P`\xA0\x84\x01Q\x91Pa\x15\xFFa\x01`\x87\x01\x83`\x01`\x01`@\x1B\x03\x16\x90RV[`\xC0\x84\x01Q\x93P\x80\x86\x84\x03\x01a\x01\x80\x87\x01RPPa\x16\x1D\x81\x83a\x14DV[\x91PP` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x16;\x82\x82a\x14DV[\x91PP`@\x84\x01Qa\x16X``\x85\x01\x82`\x01`\x01`@\x1B\x03\x16\x90RV[P``\x84\x01Q`\x80\x84\x01R`\x80\x84\x01Qa\x0B@`\xA0\x85\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[`\0` \x82\x84\x03\x12\x15a\x16\x8FW`\0\x80\xFD[\x81Qa\x04\xE9\x81a\x0F\"V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0C\x1BWa\x0C\x1Ba\x15\x1DV[`\0` \x82\x84\x03\x12\x15a\x16\xC3W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x04\xE9W`\0\x80\xFD[`\0` \x80\x83R\x83Q`\xA0\x82\x85\x01Ra\x16\xEF`\xC0\x85\x01\x82a\x14DV[\x90P`\x01`\x01`@\x1B\x03\x82\x86\x01Q\x16`@\x85\x01R`@\x85\x01Q`\x1F\x19\x80\x86\x84\x03\x01``\x87\x01R\x82\x82Q\x80\x85R\x85\x85\x01\x91P\x85\x81`\x05\x1B\x86\x01\x01\x86\x85\x01\x94P`\0[\x82\x81\x10\x15a\x17\\W\x84\x87\x83\x03\x01\x84Ra\x17J\x82\x87Qa\x14DV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01a\x170V[P``\x8A\x01Q`\x01`\x01`@\x1B\x03\x81\x16`\x80\x8B\x01R\x96P`\x80\x8A\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x8B\x01R\x96P\x99\x98PPPPPPPPPV[` \x81R`\0a\x04\xE9` \x83\x01\x84a\x14DV[fKUSAMA-`\xC8\x1B\x81R`\0\x82Qa\x17\xCB\x81`\x07\x85\x01` \x87\x01a\x13wV[\x91\x90\x91\x01`\x07\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \x1C\xD1\xC4\x875x\x14 #\xB3zHZh\x8B\t\xED!\xD1\x80\xDE-\xF2!O{g2\xBCvb2dsolcC\0\x08\x11\x003"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`@Qa\x19\xF28\x03\x80a\x19\xF2\x839\x81\x01`@\x81\x90Ra\0/\x91a\0TV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90Ua\0\x84V[`\0` \x82\x84\x03\x12\x15a\0fW`\0\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\0}W`\0\x80\xFD[\x93\x92PPPV[a\x19_\x80a\0\x93`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80cr5N\x9B\x11a\0\x8CW\x80c\xBC\r\xD4G\x11a\0fW\x80c\xBC\r\xD4G\x14a\x01\x94W\x80c\xC4\x92\xE4&\x14a\x01\xA7W\x80c\xD5\xF6\xEE\xFD\x14a\x01\xBAW\x80c\xF47\xBCY\x14a\x01\xCDW`\0\x80\xFD[\x80cr5N\x9B\x14a\x01[W\x80c\xB2\xA0\x1B\xF5\x14a\x01nW\x80c\xB5\xA9\x82K\x14a\x01\x81W`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\xD4W\x80c\x0E\x83$\xA2\x14a\0\xE9W\x80c\x0F\xEE2\xCE\x14a\0\xFCW\x80cJi.\x06\x14a\x01\x0FW\x80cM\r\x9C;\x14a\x01\"W\x80cp\xC5GO\x14a\x01HW[`\0\x80\xFD[a\0\xE7a\0\xE26`\x04a\x0F\x06V[a\x01\xE8V[\0[a\0\xE7a\0\xF76`\x04a\x0F]V[a\x02?V[a\0\xE7a\x01\n6`\x04a\x0FzV[a\x02\x8CV[a\0\xE7a\x01\x1D6`\x04a\x0F\xFDV[a\x02\xF6V[a\x015a\x0106`\x04a\x0F\x06V[a\x04\xAAV[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x015a\x01V6`\x04a\x10\xA7V[a\x05ZV[a\0\xE7a\x01i6`\x04a\x10\xDBV[a\x07\x9AV[a\0\xE7a\x01|6`\x04a\x10\xF4V[a\x08\xB4V[a\0\xE7a\x01\x8F6`\x04a\x12\xECV[a\t\x0BV[a\0\xE7a\x01\xA26`\x04a\x10\xA7V[a\tbV[a\0\xE7a\x01\xB56`\x04a\x14\x94V[a\t\xB9V[a\x015a\x01\xC86`\x04a\x14\x94V[a\n\x10V[`\0T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01?V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\x13W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7Fhv\xFA>\xCC}\x82\x1F!]\x82\x12B\xCB\xBE\x1F\x0E0\xA0\n\x85\xC2\"\xD6\x92\xA7\x96\x8F\xD3\xAF\xF1\x0B\x90`\0\x90\xA1PV[`\x01T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02jW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\xB7W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80Q`\xC0\x01Q`@Q\x7F\xFB\x08{?\xFB\xBB\x0F\xC9\"\xDC\xCF\x87%\x08g\x1Av\x05\x85\x94#\xEB\x90\xEB\x01LV\xFD\xBA\x14\x84\xDC\x91a\x02\xEB\x91a\x15\x18V[`@Q\x80\x91\x03\x90\xA1PV[`\0[\x81``\x01Q\x81\x10\x15a\x04\xA6W`\0`@Q\x80`\xC0\x01`@R\x80\x84`\0\x01Q\x81R` \x01\x84` \x01Q`@Q` \x01a\x03I\x91\x90``\x91\x90\x91\x1Bk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x81R`\x14\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x81R` \x01`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xF47\xBCY`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xAEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x03\xD6\x91\x90\x81\x01\x90a\x15+V[`@Q` \x01a\x03\xE6\x91\x90a\x15\xA1V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x81R\x90\x82R\x85\x81\x01Q`\x01`\x01`@\x1B\x03\x16` \x83\x01R`\x80\x86\x01Q\x82\x82\x01R2``\x90\x92\x01\x91\x90\x91R`\0T\x90Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x04N\x90\x84\x90`\x04\x01a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04mW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\x91\x91\x90a\x16hV[PP\x80\x80a\x04\x9E\x90a\x16\x97V[\x91PPa\x02\xF9V[PPV[`@\x80Q`\xA0\x81\x01\x82R\x82Q\x81R` \x80\x84\x01Q\x90\x82\x01R\x82\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x81\x83\x01R`\0``\x82\x01\x81\x90R2`\x80\x83\x01R\x80T\x92Qc\x94H\x08\x05`\xE0\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\x94H\x08\x05\x90a\x05\x10\x90\x84\x90`\x04\x01a\x16\xB0V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x05/W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05S\x91\x90a\x16hV[\x93\x92PPPV[`\0\x80T`@\x80Qcd\x1Dr\x9D`\xE0\x1B\x81R\x90Q\x83\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cd\x1Dr\x9D\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xA4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xC8\x91\x90a\x16hV[\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16cdxF\xA5`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06\x1BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06?\x91\x90a\x17\xE1V[`\x01`\x01`\xA0\x1B\x03\x16c#\xB8r\xDD30\x86`\xC0\x01QQ\x85a\x06`\x91\x90a\x17\xFEV[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x86\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x04\x82\x01R\x92\x90\x91\x16`$\x83\x01R`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x06\xB4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xD8\x91\x90a\x18\x15V[P`@\x80Q`\xC0\x80\x82\x01\x83R` \x80\x87\x01Q\x83R`\x80\x80\x88\x01Q\x91\x84\x01\x91\x90\x91R\x90\x86\x01Q\x82\x84\x01R`\xA0\x80\x87\x01Q`\x01`\x01`@\x1B\x03\x16``\x84\x01R`\0\x91\x83\x01\x82\x90R2\x90\x83\x01RT\x91Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x07O\x90\x84\x90`\x04\x01a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x07nW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x92\x91\x90a\x16hV[\x94\x93PPPPV[`\0`@Q\x80`\xC0\x01`@R\x80a\x07\xB0\x84a\n\x85V[\x81R` \x01`@Q\x80`@\x01`@R\x80`\x08\x81R` \x01g\x1A\\\xDB\\\x0BX\\\xDD`\xC2\x1B\x81RP\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0E\x81R` \x01mhello from evm`\x90\x1B\x81RP\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x16\x81R` \x01`\0\x81R` \x012`\x01`\x01`\xA0\x1B\x03\x16\x81RP\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xB8\xF3\xE8\xF5\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08l\x91\x90a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x08\x8BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAF\x91\x90a\x16hV[PPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08\xDFW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xD7\xDC\x99\xAF\xB6\xC309\xCE\xA4PZ\x9E,\xAB4q\xD3Y\xCE\xBE\x02\x1E\xC1'\xDC\x94\xDD\xD3Y\xD3\xC5\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t6W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xCB\xCB\xCAfM\xFE\xB9$\xCC\xD8P\xA0\x08h\x13\x0B\xFB\x1D\xF1W\t\x9A\x06\xF9)h\"\xCB{\xC3\xAD\x01\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x8DW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xBB\xF4\x8AR\xB8>\xBC=\x9E9\xF0\x92\xA8\xB9\xB7\xE5o\x1D\xD0\xDCC\x8B\xEF@\xDC}\x92\x99Bp\xA5\x9F\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\xE4W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x83\xE6 %\xE4\xBCXu\x16\xD0\xBC1^2\x9E\xAC\x0Cf6(T\xFE\xB7\xCDA5\xEF\x81C\xBA\x15\xF9\x90`\0\x90\xA1PV[`@\x80Q`\xA0\x80\x82\x01\x83R` \x80\x85\x01Q\x83R`\xC0\x85\x01Q`\x01`\x01`@\x1B\x03\x90\x81\x16\x91\x84\x01\x91\x90\x91R\x90\x84\x01Q\x82\x84\x01R`\x80\x80\x85\x01Q\x90\x91\x16``\x83\x01R3\x90\x82\x01R`\0\x80T\x92Qc47VA`\xE2\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD0\xDDY\x04\x90a\x05\x10\x90\x84\x90`\x04\x01a\x187V[``a\n\x90\x82a\n\xB6V[`@Q` \x01a\n\xA0\x91\x90a\x18\xFAV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[```\0a\n\xC3\x83a\x0BIV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xE2Wa\n\xE2a\x0C\"V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x0CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x16W[P\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0B\x88Wr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x0B\xB4Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0B\xD2Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0B\xEAWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0B\xFEWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0C\x10W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x0C\x1CW`\x01\x01[\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0C\xCCWa\x0C\xCCa\x0C\"V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0C\xEDWa\x0C\xEDa\x0C\"V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\r\x0CW`\0\x80\xFD[\x815a\r\x1Fa\r\x1A\x82a\x0C\xD4V[a\x0C\xA4V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\r4W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\rhW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\r\x7FW`\0\x80\xFD[a\r\x87a\x0C8V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\r\xA0W`\0\x80\xFD[a\r\xAC\x85\x83\x86\x01a\x0C\xFBV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\r\xC2W`\0\x80\xFD[a\r\xCE\x85\x83\x86\x01a\x0C\xFBV[` \x84\x01Ra\r\xDF`@\x85\x01a\rQV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\r\xF8W`\0\x80\xFD[a\x0E\x04\x85\x83\x86\x01a\x0C\xFBV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\x0E\x1DW`\0\x80\xFD[a\x0E)\x85\x83\x86\x01a\x0C\xFBV[`\x80\x84\x01Ra\x0E:`\xA0\x85\x01a\rQV[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\x0ESW`\0\x80\xFD[Pa\x0E`\x84\x82\x85\x01a\x0C\xFBV[`\xC0\x83\x01RP\x92\x91PPV[`\0``\x82\x84\x03\x12\x15a\x0E~W`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x82\x82\x10\x81\x83\x11\x17\x15a\x0E\xA1Wa\x0E\xA1a\x0C\"V[\x81`@R\x82\x93P\x845\x91P\x80\x82\x11\x15a\x0E\xB9W`\0\x80\xFD[a\x0E\xC5\x86\x83\x87\x01a\rmV[\x83R` \x85\x015\x91P\x80\x82\x11\x15a\x0E\xDBW`\0\x80\xFD[Pa\x0E\xE8\x85\x82\x86\x01a\x0C\xFBV[` \x83\x01RPa\x0E\xFA`@\x84\x01a\rQV[`@\x82\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x0F\x18W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F.W`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\x0ElV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0FOW`\0\x80\xFD[PV[\x805a\rh\x81a\x0F:V[`\0` \x82\x84\x03\x12\x15a\x0FoW`\0\x80\xFD[\x815a\x05S\x81a\x0F:V[`\0` \x82\x84\x03\x12\x15a\x0F\x8CW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0F\xA3W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x0F\xB7W`\0\x80\xFD[a\x0F\xBFa\x0C`V[\x825\x82\x81\x11\x15a\x0F\xCEW`\0\x80\xFD[a\x0F\xDA\x87\x82\x86\x01a\rmV[\x82RP` \x83\x015\x92Pa\x0F\xED\x83a\x0F:V[` \x81\x01\x92\x90\x92RP\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x10\x0FW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x10&W`\0\x80\xFD[\x90\x83\x01\x90`\xA0\x82\x86\x03\x12\x15a\x10:W`\0\x80\xFD[a\x10Ba\x0C\x82V[\x825\x82\x81\x11\x15a\x10QW`\0\x80\xFD[a\x10]\x87\x82\x86\x01a\x0C\xFBV[\x82RP` \x83\x015\x91Pa\x10p\x82a\x0F:V[\x81` \x82\x01Ra\x10\x82`@\x84\x01a\rQV[`@\x82\x01R``\x83\x015``\x82\x01R`\x80\x83\x015`\x80\x82\x01R\x80\x93PPPP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10\xB9W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\xCFW`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\rmV[`\0` \x82\x84\x03\x12\x15a\x10\xEDW`\0\x80\xFD[P5\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x11\x06W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x11\x1DW`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x111W`\0\x80\xFD[a\x119a\x0C`V[\x825\x82\x81\x11\x15a\x11HW`\0\x80\xFD[a\x0F\xDA\x87\x82\x86\x01a\x0ElV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x11mWa\x11ma\x0C\"V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x11\x88W`\0\x80\xFD[\x815` a\x11\x98a\r\x1A\x83a\x11TV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x11\xB7W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x11\xF6W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\xDAW`\0\x80\x81\xFD[a\x11\xE8\x89\x86\x83\x8B\x01\x01a\x0C\xFBV[\x84RP\x91\x83\x01\x91\x83\x01a\x11\xBBV[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x12\x13W`\0\x80\xFD[a\x12\x1Ba\x0C8V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x124W`\0\x80\xFD[a\x12@\x85\x83\x86\x01a\x0C\xFBV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x12VW`\0\x80\xFD[a\x12b\x85\x83\x86\x01a\x0C\xFBV[` \x84\x01Ra\x12s`@\x85\x01a\rQV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x12\x8CW`\0\x80\xFD[a\x12\x98\x85\x83\x86\x01a\x0C\xFBV[``\x84\x01Ra\x12\xA9`\x80\x85\x01a\rQV[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x12\xC2W`\0\x80\xFD[Pa\x12\xCF\x84\x82\x85\x01a\x11wV[`\xA0\x83\x01RPa\x12\xE1`\xC0\x83\x01a\rQV[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12\xFEW`\0\x80\xFD[`\x01`\x01`@\x1B\x03\x80\x835\x11\x15a\x13\x14W`\0\x80\xFD[\x825\x83\x01`@\x81\x86\x03\x12\x15a\x13(W`\0\x80\xFD[a\x130a\x0C`V[\x82\x825\x11\x15a\x13>W`\0\x80\xFD[\x815\x82\x01`@\x81\x88\x03\x12\x15a\x13RW`\0\x80\xFD[a\x13Za\x0C`V[\x84\x825\x11\x15a\x13hW`\0\x80\xFD[a\x13u\x88\x835\x84\x01a\x12\x01V[\x81R\x84` \x83\x015\x11\x15a\x13\x88W`\0\x80\xFD[` \x82\x015\x82\x01\x91P\x87`\x1F\x83\x01\x12a\x13\xA0W`\0\x80\xFD[a\x13\xADa\r\x1A\x835a\x11TV[\x825\x80\x82R` \x80\x83\x01\x92\x91`\x05\x1B\x85\x01\x01\x8A\x81\x11\x15a\x13\xCCW`\0\x80\xFD[` \x85\x01[\x81\x81\x10\x15a\x14kW\x88\x815\x11\x15a\x13\xE7W`\0\x80\xFD[\x805\x86\x01`@\x81\x8E\x03`\x1F\x19\x01\x12\x15a\x13\xFFW`\0\x80\xFD[a\x14\x07a\x0C`V[\x8A` \x83\x015\x11\x15a\x14\x18W`\0\x80\xFD[a\x14*\x8E` \x80\x85\x015\x85\x01\x01a\x0C\xFBV[\x81R\x8A`@\x83\x015\x11\x15a\x14=W`\0\x80\xFD[a\x14P\x8E` `@\x85\x015\x85\x01\x01a\x0C\xFBV[` \x82\x01R\x80\x86RPP` \x84\x01\x93P` \x81\x01\x90Pa\x13\xD1V[PP\x80` \x84\x01RPP\x80\x83RPPa\x14\x86` \x83\x01a\x0FRV[` \x82\x01R\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x14\xA6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x14\xBCW`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\x12\x01V[`\0[\x83\x81\x10\x15a\x14\xE3W\x81\x81\x01Q\x83\x82\x01R` \x01a\x14\xCBV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x15\x04\x81` \x86\x01` \x86\x01a\x14\xC8V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x05S` \x83\x01\x84a\x14\xECV[`\0` \x82\x84\x03\x12\x15a\x15=W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15SW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15dW`\0\x80\xFD[\x80Qa\x15ra\r\x1A\x82a\x0C\xD4V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x15\x87W`\0\x80\xFD[a\x15\x98\x82` \x83\x01` \x86\x01a\x14\xC8V[\x95\x94PPPPPV[j\x03C+ccy\x033\x93{i`\xAD\x1B\x81R`\0\x82Qa\x15\xC7\x81`\x0B\x85\x01` \x87\x01a\x14\xC8V[\x91\x90\x91\x01`\x0B\x01\x92\x91PPV[` \x81R`\0\x82Q`\xC0` \x84\x01Ra\x15\xF0`\xE0\x84\x01\x82a\x14\xECV[\x90P` \x84\x01Q`\x1F\x19\x80\x85\x84\x03\x01`@\x86\x01Ra\x16\x0E\x83\x83a\x14\xECV[\x92P`@\x86\x01Q\x91P\x80\x85\x84\x03\x01``\x86\x01RPa\x16,\x82\x82a\x14\xECV[\x91PP`\x01`\x01`@\x1B\x03``\x85\x01Q\x16`\x80\x84\x01R`\x80\x84\x01Q`\xA0\x84\x01R`\x01\x80`\xA0\x1B\x03`\xA0\x85\x01Q\x16`\xC0\x84\x01R\x80\x91PP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x16zW`\0\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x16\xA9Wa\x16\xA9a\x16\x81V[P`\x01\x01\x90V[` \x81R`\0\x82Q`\xA0` \x84\x01R\x80Q`\xE0`\xC0\x85\x01Ra\x16\xD6a\x01\xA0\x85\x01\x82a\x14\xECV[\x90P` \x82\x01Q`\xBF\x19\x80\x86\x84\x03\x01`\xE0\x87\x01Ra\x16\xF4\x83\x83a\x14\xECV[\x92P`\x01`\x01`@\x1B\x03`@\x85\x01Q\x16a\x01\0\x87\x01R``\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01 \x87\x01Ra\x17&\x83\x83a\x14\xECV[\x92P`\x80\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01@\x87\x01Ra\x17D\x83\x83a\x14\xECV[\x92P`\xA0\x84\x01Q\x91Pa\x17ca\x01`\x87\x01\x83`\x01`\x01`@\x1B\x03\x16\x90RV[`\xC0\x84\x01Q\x93P\x80\x86\x84\x03\x01a\x01\x80\x87\x01RPPa\x17\x81\x81\x83a\x14\xECV[\x91PP` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x17\x9F\x82\x82a\x14\xECV[\x91PP`@\x84\x01Qa\x17\xBC``\x85\x01\x82`\x01`\x01`@\x1B\x03\x16\x90RV[P``\x84\x01Q`\x80\x84\x01R`\x80\x84\x01Qa\x0BA`\xA0\x85\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[`\0` \x82\x84\x03\x12\x15a\x17\xF3W`\0\x80\xFD[\x81Qa\x05S\x81a\x0F:V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0C\x1CWa\x0C\x1Ca\x16\x81V[`\0` \x82\x84\x03\x12\x15a\x18'W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x05SW`\0\x80\xFD[`\0` \x80\x83R\x83Q`\xA0\x82\x85\x01Ra\x18S`\xC0\x85\x01\x82a\x14\xECV[\x90P`\x01`\x01`@\x1B\x03\x82\x86\x01Q\x16`@\x85\x01R`@\x85\x01Q`\x1F\x19\x80\x86\x84\x03\x01``\x87\x01R\x82\x82Q\x80\x85R\x85\x85\x01\x91P\x85\x81`\x05\x1B\x86\x01\x01\x86\x85\x01\x94P`\0[\x82\x81\x10\x15a\x18\xC0W\x84\x87\x83\x03\x01\x84Ra\x18\xAE\x82\x87Qa\x14\xECV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01a\x18\x94V[P``\x8A\x01Q`\x01`\x01`@\x1B\x03\x81\x16`\x80\x8B\x01R\x96P`\x80\x8A\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x8B\x01R\x96P\x99\x98PPPPPPPPPV[fKUSAMA-`\xC8\x1B\x81R`\0\x82Qa\x19\x1C\x81`\x07\x85\x01` \x87\x01a\x14\xC8V[\x91\x90\x91\x01`\x07\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \x0CU\xE8m\x17\x1C\xF0\xDD\xF4p\xF1\x8C}\x9D\xD3I3=hCE\x0Ev;J\xBAK \xB3Y\xB7\x82dsolcC\0\x08\x11\x003"; /// The bytecode of the contract. pub static PINGMODULE_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__BYTECODE); #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80c\xBC\r\xD4G\x11a\0\x8CW\x80c\xDE\xAET\xF5\x11a\0fW\x80c\xDE\xAET\xF5\x14a\x01\x94W\x80c\xEA\xEE\x1C\xAA\x14a\x01\xA7W\x80c\xF47\xBCY\x14a\x01\xBAW\x80c\xFE\xFF\x7F\xA8\x14a\x01\xD5W`\0\x80\xFD[\x80c\xBC\r\xD4G\x14a\x01[W\x80c\xC4\x92\xE4&\x14a\x01nW\x80c\xD5\xF6\xEE\xFD\x14a\x01\x81W`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\xD4W\x80c\x0E\x83$\xA2\x14a\0\xE9W\x80cJi.\x06\x14a\0\xFCW\x80cM\r\x9C;\x14a\x01\x0FW\x80cp\xC5GO\x14a\x015W\x80cr5N\x9B\x14a\x01HW[`\0\x80\xFD[a\0\xE7a\0\xE26`\x04a\x0EkV[a\x01\xE8V[\0[a\0\xE7a\0\xF76`\x04a\x0F:V[a\x02?V[a\0\xE7a\x01\n6`\x04a\x0FWV[a\x02\x8CV[a\x01\"a\x01\x1D6`\x04a\x0EkV[a\x04@V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01\"a\x01C6`\x04a\x10\x01V[a\x04\xF0V[a\0\xE7a\x01V6`\x04a\x105V[a\x070V[a\0\xE7a\x01i6`\x04a\x10\x01V[a\x08JV[a\0\xE7a\x01|6`\x04a\x11\xE6V[a\x08\xA1V[a\x01\"a\x01\x8F6`\x04a\x11\xE6V[a\x08\xF8V[a\0\xE7a\x01\xA26`\x04a\x12\x1AV[a\tmV[a\0\xE7a\x01\xB56`\x04a\x10\x01V[a\t\xC4V[`\0T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01,V[a\0\xE7a\x01\xE36`\x04a\x0EkV[a\n-V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\x13W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7Fhv\xFA>\xCC}\x82\x1F!]\x82\x12B\xCB\xBE\x1F\x0E0\xA0\n\x85\xC2\"\xD6\x92\xA7\x96\x8F\xD3\xAF\xF1\x0B\x90`\0\x90\xA1PV[`\x01T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02jW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0[\x81``\x01Q\x81\x10\x15a\x04=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x03l\x91\x90\x81\x01\x90a\x13\x9BV[`@Q` \x01a\x03|\x91\x90a\x14\x11V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x81R\x90\x82R\x85\x81\x01Q`\x01`\x01`@\x1B\x03\x16` \x83\x01R`\x80\x86\x01Q\x82\x82\x01R2``\x90\x92\x01\x91\x90\x91R`\0T\x90Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x03\xE4\x90\x84\x90`\x04\x01a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04\x03W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04'\x91\x90a\x15\x04V[PP\x80\x80a\x044\x90a\x153V[\x91PPa\x02\x8FV[PPV[`@\x80Q`\xA0\x81\x01\x82R\x82Q\x81R` \x80\x84\x01Q\x90\x82\x01R\x82\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x81\x83\x01R`\0``\x82\x01\x81\x90R2`\x80\x83\x01R\x80T\x92Qc\x94H\x08\x05`\xE0\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\x94H\x08\x05\x90a\x04\xA6\x90\x84\x90`\x04\x01a\x15LV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04\xC5W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xE9\x91\x90a\x15\x04V[\x93\x92PPPV[`\0\x80T`@\x80Qcd\x1Dr\x9D`\xE0\x1B\x81R\x90Q\x83\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cd\x1Dr\x9D\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05:W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05^\x91\x90a\x15\x04V[\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16cdxF\xA5`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05\xB1W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xD5\x91\x90a\x16}V[`\x01`\x01`\xA0\x1B\x03\x16c#\xB8r\xDD30\x86`\xC0\x01QQ\x85a\x05\xF6\x91\x90a\x16\x9AV[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x86\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x04\x82\x01R\x92\x90\x91\x16`$\x83\x01R`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x06JW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06n\x91\x90a\x16\xB1V[P`@\x80Q`\xC0\x80\x82\x01\x83R` \x80\x87\x01Q\x83R`\x80\x80\x88\x01Q\x91\x84\x01\x91\x90\x91R\x90\x86\x01Q\x82\x84\x01R`\xA0\x80\x87\x01Q`\x01`\x01`@\x1B\x03\x16``\x84\x01R`\0\x91\x83\x01\x82\x90R2\x90\x83\x01RT\x91Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x06\xE5\x90\x84\x90`\x04\x01a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x07\x04W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07(\x91\x90a\x15\x04V[\x94\x93PPPPV[`\0`@Q\x80`\xC0\x01`@R\x80a\x07F\x84a\n\x84V[\x81R` \x01`@Q\x80`@\x01`@R\x80`\x08\x81R` \x01g\x1A\\\xDB\\\x0BX\\\xDD`\xC2\x1B\x81RP\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0E\x81R` \x01mhello from evm`\x90\x1B\x81RP\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x16\x81R` \x01`\0\x81R` \x012`\x01`\x01`\xA0\x1B\x03\x16\x81RP\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xB8\xF3\xE8\xF5\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08\x02\x91\x90a\x14pV[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x08!W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08E\x91\x90a\x15\x04V[PPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08uW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xBB\xF4\x8AR\xB8>\xBC=\x9E9\xF0\x92\xA8\xB9\xB7\xE5o\x1D\xD0\xDCC\x8B\xEF@\xDC}\x92\x99Bp\xA5\x9F\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08\xCCW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x83\xE6 %\xE4\xBCXu\x16\xD0\xBC1^2\x9E\xAC\x0Cf6(T\xFE\xB7\xCDA5\xEF\x81C\xBA\x15\xF9\x90`\0\x90\xA1PV[`@\x80Q`\xA0\x80\x82\x01\x83R` \x80\x85\x01Q\x83R`\xC0\x85\x01Q`\x01`\x01`@\x1B\x03\x90\x81\x16\x91\x84\x01\x91\x90\x91R\x90\x84\x01Q\x82\x84\x01R`\x80\x80\x85\x01Q\x90\x91\x16``\x83\x01R3\x90\x82\x01R`\0\x80T\x92Qc47VA`\xE2\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD0\xDDY\x04\x90a\x04\xA6\x90\x84\x90`\x04\x01a\x16\xD3V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x98W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xCB\xCB\xCAfM\xFE\xB9$\xCC\xD8P\xA0\x08h\x13\x0B\xFB\x1D\xF1W\t\x9A\x06\xF9)h\"\xCB{\xC3\xAD\x01\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\xEFW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x7F\xFB\x08{?\xFB\xBB\x0F\xC9\"\xDC\xCF\x87%\x08g\x1Av\x05\x85\x94#\xEB\x90\xEB\x01LV\xFD\xBA\x14\x84\xDC\x81`\xC0\x01Q`@Qa\n\"\x91\x90a\x17\x96V[`@Q\x80\x91\x03\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\nXW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xD7\xDC\x99\xAF\xB6\xC309\xCE\xA4PZ\x9E,\xAB4q\xD3Y\xCE\xBE\x02\x1E\xC1'\xDC\x94\xDD\xD3Y\xD3\xC5\x90`\0\x90\xA1PV[``a\n\x8F\x82a\n\xB5V[`@Q` \x01a\n\x9F\x91\x90a\x17\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[```\0a\n\xC2\x83a\x0BHV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xE1Wa\n\xE1a\x0C!V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x0BW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x15W[P\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0B\x87Wr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x0B\xB3Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0B\xD1Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0B\xE9Wc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0B\xFDWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0C\x0FW`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x0C\x1BW`\x01\x01[\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@R\x90V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CYWa\x0CYa\x0C!V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0C\xCBWa\x0C\xCBa\x0C!V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0C\xECWa\x0C\xECa\x0C!V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\r\x0BW`\0\x80\xFD[\x815a\r\x1Ea\r\x19\x82a\x0C\xD3V[a\x0C\xA3V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\r3W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\rgW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\r~W`\0\x80\xFD[a\r\x86a\x0C7V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\r\x9FW`\0\x80\xFD[a\r\xAB\x85\x83\x86\x01a\x0C\xFAV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\r\xC1W`\0\x80\xFD[a\r\xCD\x85\x83\x86\x01a\x0C\xFAV[` \x84\x01Ra\r\xDE`@\x85\x01a\rPV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\r\xF7W`\0\x80\xFD[a\x0E\x03\x85\x83\x86\x01a\x0C\xFAV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\x0E\x1CW`\0\x80\xFD[a\x0E(\x85\x83\x86\x01a\x0C\xFAV[`\x80\x84\x01Ra\x0E9`\xA0\x85\x01a\rPV[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\x0ERW`\0\x80\xFD[Pa\x0E_\x84\x82\x85\x01a\x0C\xFAV[`\xC0\x83\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x0E}W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0E\x94W`\0\x80\xFD[\x90\x83\x01\x90``\x82\x86\x03\x12\x15a\x0E\xA8W`\0\x80\xFD[`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17\x15a\x0E\xC3Wa\x0E\xC3a\x0C!V[`@R\x825\x82\x81\x11\x15a\x0E\xD5W`\0\x80\xFD[a\x0E\xE1\x87\x82\x86\x01a\rlV[\x82RP` \x83\x015\x82\x81\x11\x15a\x0E\xF6W`\0\x80\xFD[a\x0F\x02\x87\x82\x86\x01a\x0C\xFAV[` \x83\x01RPa\x0F\x14`@\x84\x01a\rPV[`@\x82\x01R\x95\x94PPPPPV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0F7W`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a\x0FLW`\0\x80\xFD[\x815a\x04\xE9\x81a\x0F\"V[`\0` \x82\x84\x03\x12\x15a\x0FiW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0F\x80W`\0\x80\xFD[\x90\x83\x01\x90`\xA0\x82\x86\x03\x12\x15a\x0F\x94W`\0\x80\xFD[a\x0F\x9Ca\x0C_V[\x825\x82\x81\x11\x15a\x0F\xABW`\0\x80\xFD[a\x0F\xB7\x87\x82\x86\x01a\x0C\xFAV[\x82RP` \x83\x015\x91Pa\x0F\xCA\x82a\x0F\"V[\x81` \x82\x01Ra\x0F\xDC`@\x84\x01a\rPV[`@\x82\x01R``\x83\x015``\x82\x01R`\x80\x83\x015`\x80\x82\x01R\x80\x93PPPP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10\x13W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10)W`\0\x80\xFD[a\x07(\x84\x82\x85\x01a\rlV[`\0` \x82\x84\x03\x12\x15a\x10GW`\0\x80\xFD[P5\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x10gWa\x10ga\x0C!V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x10\x82W`\0\x80\xFD[\x815` a\x10\x92a\r\x19\x83a\x10NV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x10\xB1W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x10\xF0W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\xD4W`\0\x80\x81\xFD[a\x10\xE2\x89\x86\x83\x8B\x01\x01a\x0C\xFAV[\x84RP\x91\x83\x01\x91\x83\x01a\x10\xB5V[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x11\rW`\0\x80\xFD[a\x11\x15a\x0C7V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x11.W`\0\x80\xFD[a\x11:\x85\x83\x86\x01a\x0C\xFAV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x11PW`\0\x80\xFD[a\x11\\\x85\x83\x86\x01a\x0C\xFAV[` \x84\x01Ra\x11m`@\x85\x01a\rPV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x11\x86W`\0\x80\xFD[a\x11\x92\x85\x83\x86\x01a\x0C\xFAV[``\x84\x01Ra\x11\xA3`\x80\x85\x01a\rPV[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x11\xBCW`\0\x80\xFD[Pa\x11\xC9\x84\x82\x85\x01a\x10qV[`\xA0\x83\x01RPa\x11\xDB`\xC0\x83\x01a\rPV[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x11\xF8W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\x0EW`\0\x80\xFD[a\x07(\x84\x82\x85\x01a\x10\xFBV[`\0` \x80\x83\x85\x03\x12\x15a\x12-W`\0\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x12DW`\0\x80\xFD[\x81\x85\x01\x91P`@\x80\x83\x88\x03\x12\x15a\x12ZW`\0\x80\xFD[a\x12ba\x0C\x81V[\x835\x83\x81\x11\x15a\x12qW`\0\x80\xFD[a\x12}\x89\x82\x87\x01a\x10\xFBV[\x82RP\x84\x84\x015\x83\x81\x11\x15a\x12\x91W`\0\x80\xFD[\x80\x85\x01\x94PP\x87`\x1F\x85\x01\x12a\x12\xA6W`\0\x80\xFD[\x835a\x12\xB4a\r\x19\x82a\x10NV[\x81\x81R`\x05\x91\x90\x91\x1B\x85\x01\x86\x01\x90\x86\x81\x01\x90\x8A\x83\x11\x15a\x12\xD3W`\0\x80\xFD[\x87\x87\x01[\x83\x81\x10\x15a\x13cW\x805\x87\x81\x11\x15a\x12\xEFW`\0\x80\x81\xFD[\x88\x01\x80\x8D\x03`\x1F\x19\x01\x87\x13\x15a\x13\x05W`\0\x80\x81\xFD[a\x13\ra\x0C\x81V[\x8A\x82\x015\x89\x81\x11\x15a\x13\x1FW`\0\x80\x81\xFD[a\x13-\x8F\x8D\x83\x86\x01\x01a\x0C\xFAV[\x82RP\x87\x82\x015\x89\x81\x11\x15a\x13BW`\0\x80\x81\xFD[a\x13P\x8F\x8D\x83\x86\x01\x01a\x0C\xFAV[\x82\x8D\x01RP\x84RP\x91\x88\x01\x91\x88\x01a\x12\xD7V[P\x96\x83\x01\x96\x90\x96RP\x97\x96PPPPPPPV[`\0[\x83\x81\x10\x15a\x13\x92W\x81\x81\x01Q\x83\x82\x01R` \x01a\x13zV[PP`\0\x91\x01RV[`\0` \x82\x84\x03\x12\x15a\x13\xADW`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xC3W`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x13\xD4W`\0\x80\xFD[\x80Qa\x13\xE2a\r\x19\x82a\x0C\xD3V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\xF7W`\0\x80\xFD[a\x14\x08\x82` \x83\x01` \x86\x01a\x13wV[\x95\x94PPPPPV[j\x03C+ccy\x033\x93{i`\xAD\x1B\x81R`\0\x82Qa\x147\x81`\x0B\x85\x01` \x87\x01a\x13wV[\x91\x90\x91\x01`\x0B\x01\x92\x91PPV[`\0\x81Q\x80\x84Ra\x14\\\x81` \x86\x01` \x86\x01a\x13wV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0\x82Q`\xC0` \x84\x01Ra\x14\x8C`\xE0\x84\x01\x82a\x14DV[\x90P` \x84\x01Q`\x1F\x19\x80\x85\x84\x03\x01`@\x86\x01Ra\x14\xAA\x83\x83a\x14DV[\x92P`@\x86\x01Q\x91P\x80\x85\x84\x03\x01``\x86\x01RPa\x14\xC8\x82\x82a\x14DV[\x91PP`\x01`\x01`@\x1B\x03``\x85\x01Q\x16`\x80\x84\x01R`\x80\x84\x01Q`\xA0\x84\x01R`\x01\x80`\xA0\x1B\x03`\xA0\x85\x01Q\x16`\xC0\x84\x01R\x80\x91PP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x15\x16W`\0\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x15EWa\x15Ea\x15\x1DV[P`\x01\x01\x90V[` \x81R`\0\x82Q`\xA0` \x84\x01R\x80Q`\xE0`\xC0\x85\x01Ra\x15ra\x01\xA0\x85\x01\x82a\x14DV[\x90P` \x82\x01Q`\xBF\x19\x80\x86\x84\x03\x01`\xE0\x87\x01Ra\x15\x90\x83\x83a\x14DV[\x92P`\x01`\x01`@\x1B\x03`@\x85\x01Q\x16a\x01\0\x87\x01R``\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01 \x87\x01Ra\x15\xC2\x83\x83a\x14DV[\x92P`\x80\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01@\x87\x01Ra\x15\xE0\x83\x83a\x14DV[\x92P`\xA0\x84\x01Q\x91Pa\x15\xFFa\x01`\x87\x01\x83`\x01`\x01`@\x1B\x03\x16\x90RV[`\xC0\x84\x01Q\x93P\x80\x86\x84\x03\x01a\x01\x80\x87\x01RPPa\x16\x1D\x81\x83a\x14DV[\x91PP` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x16;\x82\x82a\x14DV[\x91PP`@\x84\x01Qa\x16X``\x85\x01\x82`\x01`\x01`@\x1B\x03\x16\x90RV[P``\x84\x01Q`\x80\x84\x01R`\x80\x84\x01Qa\x0B@`\xA0\x85\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[`\0` \x82\x84\x03\x12\x15a\x16\x8FW`\0\x80\xFD[\x81Qa\x04\xE9\x81a\x0F\"V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0C\x1BWa\x0C\x1Ba\x15\x1DV[`\0` \x82\x84\x03\x12\x15a\x16\xC3W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x04\xE9W`\0\x80\xFD[`\0` \x80\x83R\x83Q`\xA0\x82\x85\x01Ra\x16\xEF`\xC0\x85\x01\x82a\x14DV[\x90P`\x01`\x01`@\x1B\x03\x82\x86\x01Q\x16`@\x85\x01R`@\x85\x01Q`\x1F\x19\x80\x86\x84\x03\x01``\x87\x01R\x82\x82Q\x80\x85R\x85\x85\x01\x91P\x85\x81`\x05\x1B\x86\x01\x01\x86\x85\x01\x94P`\0[\x82\x81\x10\x15a\x17\\W\x84\x87\x83\x03\x01\x84Ra\x17J\x82\x87Qa\x14DV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01a\x170V[P``\x8A\x01Q`\x01`\x01`@\x1B\x03\x81\x16`\x80\x8B\x01R\x96P`\x80\x8A\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x8B\x01R\x96P\x99\x98PPPPPPPPPV[` \x81R`\0a\x04\xE9` \x83\x01\x84a\x14DV[fKUSAMA-`\xC8\x1B\x81R`\0\x82Qa\x17\xCB\x81`\x07\x85\x01` \x87\x01a\x13wV[\x91\x90\x91\x01`\x07\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \x1C\xD1\xC4\x875x\x14 #\xB3zHZh\x8B\t\xED!\xD1\x80\xDE-\xF2!O{g2\xBCvb2dsolcC\0\x08\x11\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0\xCFW`\x005`\xE0\x1C\x80cr5N\x9B\x11a\0\x8CW\x80c\xBC\r\xD4G\x11a\0fW\x80c\xBC\r\xD4G\x14a\x01\x94W\x80c\xC4\x92\xE4&\x14a\x01\xA7W\x80c\xD5\xF6\xEE\xFD\x14a\x01\xBAW\x80c\xF47\xBCY\x14a\x01\xCDW`\0\x80\xFD[\x80cr5N\x9B\x14a\x01[W\x80c\xB2\xA0\x1B\xF5\x14a\x01nW\x80c\xB5\xA9\x82K\x14a\x01\x81W`\0\x80\xFD[\x80c\x0B\xC3{\xAB\x14a\0\xD4W\x80c\x0E\x83$\xA2\x14a\0\xE9W\x80c\x0F\xEE2\xCE\x14a\0\xFCW\x80cJi.\x06\x14a\x01\x0FW\x80cM\r\x9C;\x14a\x01\"W\x80cp\xC5GO\x14a\x01HW[`\0\x80\xFD[a\0\xE7a\0\xE26`\x04a\x0F\x06V[a\x01\xE8V[\0[a\0\xE7a\0\xF76`\x04a\x0F]V[a\x02?V[a\0\xE7a\x01\n6`\x04a\x0FzV[a\x02\x8CV[a\0\xE7a\x01\x1D6`\x04a\x0F\xFDV[a\x02\xF6V[a\x015a\x0106`\x04a\x0F\x06V[a\x04\xAAV[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x015a\x01V6`\x04a\x10\xA7V[a\x05ZV[a\0\xE7a\x01i6`\x04a\x10\xDBV[a\x07\x9AV[a\0\xE7a\x01|6`\x04a\x10\xF4V[a\x08\xB4V[a\0\xE7a\x01\x8F6`\x04a\x12\xECV[a\t\x0BV[a\0\xE7a\x01\xA26`\x04a\x10\xA7V[a\tbV[a\0\xE7a\x01\xB56`\x04a\x14\x94V[a\t\xB9V[a\x015a\x01\xC86`\x04a\x14\x94V[a\n\x10V[`\0T`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01?V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\x13W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7Fhv\xFA>\xCC}\x82\x1F!]\x82\x12B\xCB\xBE\x1F\x0E0\xA0\n\x85\xC2\"\xD6\x92\xA7\x96\x8F\xD3\xAF\xF1\x0B\x90`\0\x90\xA1PV[`\x01T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02jW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x90\x91\x17\x90UV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x02\xB7W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80Q`\xC0\x01Q`@Q\x7F\xFB\x08{?\xFB\xBB\x0F\xC9\"\xDC\xCF\x87%\x08g\x1Av\x05\x85\x94#\xEB\x90\xEB\x01LV\xFD\xBA\x14\x84\xDC\x91a\x02\xEB\x91a\x15\x18V[`@Q\x80\x91\x03\x90\xA1PV[`\0[\x81``\x01Q\x81\x10\x15a\x04\xA6W`\0`@Q\x80`\xC0\x01`@R\x80\x84`\0\x01Q\x81R` \x01\x84` \x01Q`@Q` \x01a\x03I\x91\x90``\x91\x90\x91\x1Bk\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x81R`\x14\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x81R` \x01`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xF47\xBCY`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xAEW=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x03\xD6\x91\x90\x81\x01\x90a\x15+V[`@Q` \x01a\x03\xE6\x91\x90a\x15\xA1V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x81R\x90\x82R\x85\x81\x01Q`\x01`\x01`@\x1B\x03\x16` \x83\x01R`\x80\x86\x01Q\x82\x82\x01R2``\x90\x92\x01\x91\x90\x91R`\0T\x90Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x91\x92P`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x04N\x90\x84\x90`\x04\x01a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x04mW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\x91\x91\x90a\x16hV[PP\x80\x80a\x04\x9E\x90a\x16\x97V[\x91PPa\x02\xF9V[PPV[`@\x80Q`\xA0\x81\x01\x82R\x82Q\x81R` \x80\x84\x01Q\x90\x82\x01R\x82\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x81\x83\x01R`\0``\x82\x01\x81\x90R2`\x80\x83\x01R\x80T\x92Qc\x94H\x08\x05`\xE0\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\x94H\x08\x05\x90a\x05\x10\x90\x84\x90`\x04\x01a\x16\xB0V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x05/W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05S\x91\x90a\x16hV[\x93\x92PPPV[`\0\x80T`@\x80Qcd\x1Dr\x9D`\xE0\x1B\x81R\x90Q\x83\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cd\x1Dr\x9D\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\x05\xA4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\xC8\x91\x90a\x16hV[\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16cdxF\xA5`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06\x1BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06?\x91\x90a\x17\xE1V[`\x01`\x01`\xA0\x1B\x03\x16c#\xB8r\xDD30\x86`\xC0\x01QQ\x85a\x06`\x91\x90a\x17\xFEV[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x86\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x04\x82\x01R\x92\x90\x91\x16`$\x83\x01R`D\x82\x01R`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x06\xB4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xD8\x91\x90a\x18\x15V[P`@\x80Q`\xC0\x80\x82\x01\x83R` \x80\x87\x01Q\x83R`\x80\x80\x88\x01Q\x91\x84\x01\x91\x90\x91R\x90\x86\x01Q\x82\x84\x01R`\xA0\x80\x87\x01Q`\x01`\x01`@\x1B\x03\x16``\x84\x01R`\0\x91\x83\x01\x82\x90R2\x90\x83\x01RT\x91Qc\xB8\xF3\xE8\xF5`\xE0\x1B\x81R\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90c\xB8\xF3\xE8\xF5\x90a\x07O\x90\x84\x90`\x04\x01a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x07nW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x92\x91\x90a\x16hV[\x94\x93PPPPV[`\0`@Q\x80`\xC0\x01`@R\x80a\x07\xB0\x84a\n\x85V[\x81R` \x01`@Q\x80`@\x01`@R\x80`\x08\x81R` \x01g\x1A\\\xDB\\\x0BX\\\xDD`\xC2\x1B\x81RP\x81R` \x01`@Q\x80`@\x01`@R\x80`\x0E\x81R` \x01mhello from evm`\x90\x1B\x81RP\x81R` \x01`\0`\x01`\x01`@\x1B\x03\x16\x81R` \x01`\0\x81R` \x012`\x01`\x01`\xA0\x1B\x03\x16\x81RP\x90P`\0\x80T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16c\xB8\xF3\xE8\xF5\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08l\x91\x90a\x15\xD4V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x08\x8BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAF\x91\x90a\x16hV[PPPV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x08\xDFW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xD7\xDC\x99\xAF\xB6\xC309\xCE\xA4PZ\x9E,\xAB4q\xD3Y\xCE\xBE\x02\x1E\xC1'\xDC\x94\xDD\xD3Y\xD3\xC5\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t6W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xCB\xCB\xCAfM\xFE\xB9$\xCC\xD8P\xA0\x08h\x13\x0B\xFB\x1D\xF1W\t\x9A\x06\xF9)h\"\xCB{\xC3\xAD\x01\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\x8DW`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\xBB\xF4\x8AR\xB8>\xBC=\x9E9\xF0\x92\xA8\xB9\xB7\xE5o\x1D\xD0\xDCC\x8B\xEF@\xDC}\x92\x99Bp\xA5\x9F\x90`\0\x90\xA1PV[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\t\xE4W`@QcQ\xAB\x8D\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x7F\x83\xE6 %\xE4\xBCXu\x16\xD0\xBC1^2\x9E\xAC\x0Cf6(T\xFE\xB7\xCDA5\xEF\x81C\xBA\x15\xF9\x90`\0\x90\xA1PV[`@\x80Q`\xA0\x80\x82\x01\x83R` \x80\x85\x01Q\x83R`\xC0\x85\x01Q`\x01`\x01`@\x1B\x03\x90\x81\x16\x91\x84\x01\x91\x90\x91R\x90\x84\x01Q\x82\x84\x01R`\x80\x80\x85\x01Q\x90\x91\x16``\x83\x01R3\x90\x82\x01R`\0\x80T\x92Qc47VA`\xE2\x1B\x81R\x90\x92`\x01`\x01`\xA0\x1B\x03\x16\x90c\xD0\xDDY\x04\x90a\x05\x10\x90\x84\x90`\x04\x01a\x187V[``a\n\x90\x82a\n\xB6V[`@Q` \x01a\n\xA0\x91\x90a\x18\xFAV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x91\x90PV[```\0a\n\xC3\x83a\x0BIV[`\x01\x01\x90P`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\n\xE2Wa\n\xE2a\x0C\"V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0B\x0CW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P\x81\x81\x01` \x01[`\0\x19\x01o\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B`\n\x86\x06\x1A\x81S`\n\x85\x04\x94P\x84a\x0B\x16W[P\x93\x92PPPV[`\0\x80r\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x10a\x0B\x88Wr\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01`@\x1B\x83\x04\x92P`@\x01[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x0B\xB4Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x04\x92P` \x01[f#\x86\xF2o\xC1\0\0\x83\x10a\x0B\xD2Wf#\x86\xF2o\xC1\0\0\x83\x04\x92P`\x10\x01[c\x05\xF5\xE1\0\x83\x10a\x0B\xEAWc\x05\xF5\xE1\0\x83\x04\x92P`\x08\x01[a'\x10\x83\x10a\x0B\xFEWa'\x10\x83\x04\x92P`\x04\x01[`d\x83\x10a\x0C\x10W`d\x83\x04\x92P`\x02\x01[`\n\x83\x10a\x0C\x1CW`\x01\x01[\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\xE0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@R\x90V[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0CZWa\x0CZa\x0C\"V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0C\xCCWa\x0C\xCCa\x0C\"V[`@R\x91\x90PV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0C\xEDWa\x0C\xEDa\x0C\"V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\r\x0CW`\0\x80\xFD[\x815a\r\x1Fa\r\x1A\x82a\x0C\xD4V[a\x0C\xA4V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\r4W`\0\x80\xFD[\x81` \x85\x01` \x83\x017`\0\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x805`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\rhW`\0\x80\xFD[\x91\x90PV[`\0`\xE0\x82\x84\x03\x12\x15a\r\x7FW`\0\x80\xFD[a\r\x87a\x0C8V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\r\xA0W`\0\x80\xFD[a\r\xAC\x85\x83\x86\x01a\x0C\xFBV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\r\xC2W`\0\x80\xFD[a\r\xCE\x85\x83\x86\x01a\x0C\xFBV[` \x84\x01Ra\r\xDF`@\x85\x01a\rQV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\r\xF8W`\0\x80\xFD[a\x0E\x04\x85\x83\x86\x01a\x0C\xFBV[``\x84\x01R`\x80\x84\x015\x91P\x80\x82\x11\x15a\x0E\x1DW`\0\x80\xFD[a\x0E)\x85\x83\x86\x01a\x0C\xFBV[`\x80\x84\x01Ra\x0E:`\xA0\x85\x01a\rQV[`\xA0\x84\x01R`\xC0\x84\x015\x91P\x80\x82\x11\x15a\x0ESW`\0\x80\xFD[Pa\x0E`\x84\x82\x85\x01a\x0C\xFBV[`\xC0\x83\x01RP\x92\x91PPV[`\0``\x82\x84\x03\x12\x15a\x0E~W`\0\x80\xFD[`@Q``\x81\x01`\x01`\x01`@\x1B\x03\x82\x82\x10\x81\x83\x11\x17\x15a\x0E\xA1Wa\x0E\xA1a\x0C\"V[\x81`@R\x82\x93P\x845\x91P\x80\x82\x11\x15a\x0E\xB9W`\0\x80\xFD[a\x0E\xC5\x86\x83\x87\x01a\rmV[\x83R` \x85\x015\x91P\x80\x82\x11\x15a\x0E\xDBW`\0\x80\xFD[Pa\x0E\xE8\x85\x82\x86\x01a\x0C\xFBV[` \x83\x01RPa\x0E\xFA`@\x84\x01a\rQV[`@\x82\x01RP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x0F\x18W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x0F.W`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\x0ElV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0FOW`\0\x80\xFD[PV[\x805a\rh\x81a\x0F:V[`\0` \x82\x84\x03\x12\x15a\x0FoW`\0\x80\xFD[\x815a\x05S\x81a\x0F:V[`\0` \x82\x84\x03\x12\x15a\x0F\x8CW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x0F\xA3W`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x0F\xB7W`\0\x80\xFD[a\x0F\xBFa\x0C`V[\x825\x82\x81\x11\x15a\x0F\xCEW`\0\x80\xFD[a\x0F\xDA\x87\x82\x86\x01a\rmV[\x82RP` \x83\x015\x92Pa\x0F\xED\x83a\x0F:V[` \x81\x01\x92\x90\x92RP\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a\x10\x0FW`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x10&W`\0\x80\xFD[\x90\x83\x01\x90`\xA0\x82\x86\x03\x12\x15a\x10:W`\0\x80\xFD[a\x10Ba\x0C\x82V[\x825\x82\x81\x11\x15a\x10QW`\0\x80\xFD[a\x10]\x87\x82\x86\x01a\x0C\xFBV[\x82RP` \x83\x015\x91Pa\x10p\x82a\x0F:V[\x81` \x82\x01Ra\x10\x82`@\x84\x01a\rQV[`@\x82\x01R``\x83\x015``\x82\x01R`\x80\x83\x015`\x80\x82\x01R\x80\x93PPPP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x10\xB9W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10\xCFW`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\rmV[`\0` \x82\x84\x03\x12\x15a\x10\xEDW`\0\x80\xFD[P5\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x11\x06W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x11\x1DW`\0\x80\xFD[\x90\x83\x01\x90`@\x82\x86\x03\x12\x15a\x111W`\0\x80\xFD[a\x119a\x0C`V[\x825\x82\x81\x11\x15a\x11HW`\0\x80\xFD[a\x0F\xDA\x87\x82\x86\x01a\x0ElV[`\0`\x01`\x01`@\x1B\x03\x82\x11\x15a\x11mWa\x11ma\x0C\"V[P`\x05\x1B` \x01\x90V[`\0\x82`\x1F\x83\x01\x12a\x11\x88W`\0\x80\xFD[\x815` a\x11\x98a\r\x1A\x83a\x11TV[\x82\x81R`\x05\x92\x90\x92\x1B\x84\x01\x81\x01\x91\x81\x81\x01\x90\x86\x84\x11\x15a\x11\xB7W`\0\x80\xFD[\x82\x86\x01[\x84\x81\x10\x15a\x11\xF6W\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\xDAW`\0\x80\x81\xFD[a\x11\xE8\x89\x86\x83\x8B\x01\x01a\x0C\xFBV[\x84RP\x91\x83\x01\x91\x83\x01a\x11\xBBV[P\x96\x95PPPPPPV[`\0`\xE0\x82\x84\x03\x12\x15a\x12\x13W`\0\x80\xFD[a\x12\x1Ba\x0C8V[\x90P\x815`\x01`\x01`@\x1B\x03\x80\x82\x11\x15a\x124W`\0\x80\xFD[a\x12@\x85\x83\x86\x01a\x0C\xFBV[\x83R` \x84\x015\x91P\x80\x82\x11\x15a\x12VW`\0\x80\xFD[a\x12b\x85\x83\x86\x01a\x0C\xFBV[` \x84\x01Ra\x12s`@\x85\x01a\rQV[`@\x84\x01R``\x84\x015\x91P\x80\x82\x11\x15a\x12\x8CW`\0\x80\xFD[a\x12\x98\x85\x83\x86\x01a\x0C\xFBV[``\x84\x01Ra\x12\xA9`\x80\x85\x01a\rQV[`\x80\x84\x01R`\xA0\x84\x015\x91P\x80\x82\x11\x15a\x12\xC2W`\0\x80\xFD[Pa\x12\xCF\x84\x82\x85\x01a\x11wV[`\xA0\x83\x01RPa\x12\xE1`\xC0\x83\x01a\rQV[`\xC0\x82\x01R\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x12\xFEW`\0\x80\xFD[`\x01`\x01`@\x1B\x03\x80\x835\x11\x15a\x13\x14W`\0\x80\xFD[\x825\x83\x01`@\x81\x86\x03\x12\x15a\x13(W`\0\x80\xFD[a\x130a\x0C`V[\x82\x825\x11\x15a\x13>W`\0\x80\xFD[\x815\x82\x01`@\x81\x88\x03\x12\x15a\x13RW`\0\x80\xFD[a\x13Za\x0C`V[\x84\x825\x11\x15a\x13hW`\0\x80\xFD[a\x13u\x88\x835\x84\x01a\x12\x01V[\x81R\x84` \x83\x015\x11\x15a\x13\x88W`\0\x80\xFD[` \x82\x015\x82\x01\x91P\x87`\x1F\x83\x01\x12a\x13\xA0W`\0\x80\xFD[a\x13\xADa\r\x1A\x835a\x11TV[\x825\x80\x82R` \x80\x83\x01\x92\x91`\x05\x1B\x85\x01\x01\x8A\x81\x11\x15a\x13\xCCW`\0\x80\xFD[` \x85\x01[\x81\x81\x10\x15a\x14kW\x88\x815\x11\x15a\x13\xE7W`\0\x80\xFD[\x805\x86\x01`@\x81\x8E\x03`\x1F\x19\x01\x12\x15a\x13\xFFW`\0\x80\xFD[a\x14\x07a\x0C`V[\x8A` \x83\x015\x11\x15a\x14\x18W`\0\x80\xFD[a\x14*\x8E` \x80\x85\x015\x85\x01\x01a\x0C\xFBV[\x81R\x8A`@\x83\x015\x11\x15a\x14=W`\0\x80\xFD[a\x14P\x8E` `@\x85\x015\x85\x01\x01a\x0C\xFBV[` \x82\x01R\x80\x86RPP` \x84\x01\x93P` \x81\x01\x90Pa\x13\xD1V[PP\x80` \x84\x01RPP\x80\x83RPPa\x14\x86` \x83\x01a\x0FRV[` \x82\x01R\x95\x94PPPPPV[`\0` \x82\x84\x03\x12\x15a\x14\xA6W`\0\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x14\xBCW`\0\x80\xFD[a\x07\x92\x84\x82\x85\x01a\x12\x01V[`\0[\x83\x81\x10\x15a\x14\xE3W\x81\x81\x01Q\x83\x82\x01R` \x01a\x14\xCBV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra\x15\x04\x81` \x86\x01` \x86\x01a\x14\xC8V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x05S` \x83\x01\x84a\x14\xECV[`\0` \x82\x84\x03\x12\x15a\x15=W`\0\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15SW`\0\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15dW`\0\x80\xFD[\x80Qa\x15ra\r\x1A\x82a\x0C\xD4V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x15\x87W`\0\x80\xFD[a\x15\x98\x82` \x83\x01` \x86\x01a\x14\xC8V[\x95\x94PPPPPV[j\x03C+ccy\x033\x93{i`\xAD\x1B\x81R`\0\x82Qa\x15\xC7\x81`\x0B\x85\x01` \x87\x01a\x14\xC8V[\x91\x90\x91\x01`\x0B\x01\x92\x91PPV[` \x81R`\0\x82Q`\xC0` \x84\x01Ra\x15\xF0`\xE0\x84\x01\x82a\x14\xECV[\x90P` \x84\x01Q`\x1F\x19\x80\x85\x84\x03\x01`@\x86\x01Ra\x16\x0E\x83\x83a\x14\xECV[\x92P`@\x86\x01Q\x91P\x80\x85\x84\x03\x01``\x86\x01RPa\x16,\x82\x82a\x14\xECV[\x91PP`\x01`\x01`@\x1B\x03``\x85\x01Q\x16`\x80\x84\x01R`\x80\x84\x01Q`\xA0\x84\x01R`\x01\x80`\xA0\x1B\x03`\xA0\x85\x01Q\x16`\xC0\x84\x01R\x80\x91PP\x92\x91PPV[`\0` \x82\x84\x03\x12\x15a\x16zW`\0\x80\xFD[PQ\x91\x90PV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x16\xA9Wa\x16\xA9a\x16\x81V[P`\x01\x01\x90V[` \x81R`\0\x82Q`\xA0` \x84\x01R\x80Q`\xE0`\xC0\x85\x01Ra\x16\xD6a\x01\xA0\x85\x01\x82a\x14\xECV[\x90P` \x82\x01Q`\xBF\x19\x80\x86\x84\x03\x01`\xE0\x87\x01Ra\x16\xF4\x83\x83a\x14\xECV[\x92P`\x01`\x01`@\x1B\x03`@\x85\x01Q\x16a\x01\0\x87\x01R``\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01 \x87\x01Ra\x17&\x83\x83a\x14\xECV[\x92P`\x80\x84\x01Q\x91P\x80\x86\x84\x03\x01a\x01@\x87\x01Ra\x17D\x83\x83a\x14\xECV[\x92P`\xA0\x84\x01Q\x91Pa\x17ca\x01`\x87\x01\x83`\x01`\x01`@\x1B\x03\x16\x90RV[`\xC0\x84\x01Q\x93P\x80\x86\x84\x03\x01a\x01\x80\x87\x01RPPa\x17\x81\x81\x83a\x14\xECV[\x91PP` \x84\x01Q`\x1F\x19\x84\x83\x03\x01`@\x85\x01Ra\x17\x9F\x82\x82a\x14\xECV[\x91PP`@\x84\x01Qa\x17\xBC``\x85\x01\x82`\x01`\x01`@\x1B\x03\x16\x90RV[P``\x84\x01Q`\x80\x84\x01R`\x80\x84\x01Qa\x0BA`\xA0\x85\x01\x82`\x01`\x01`\xA0\x1B\x03\x16\x90RV[`\0` \x82\x84\x03\x12\x15a\x17\xF3W`\0\x80\xFD[\x81Qa\x05S\x81a\x0F:V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x0C\x1CWa\x0C\x1Ca\x16\x81V[`\0` \x82\x84\x03\x12\x15a\x18'W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x05SW`\0\x80\xFD[`\0` \x80\x83R\x83Q`\xA0\x82\x85\x01Ra\x18S`\xC0\x85\x01\x82a\x14\xECV[\x90P`\x01`\x01`@\x1B\x03\x82\x86\x01Q\x16`@\x85\x01R`@\x85\x01Q`\x1F\x19\x80\x86\x84\x03\x01``\x87\x01R\x82\x82Q\x80\x85R\x85\x85\x01\x91P\x85\x81`\x05\x1B\x86\x01\x01\x86\x85\x01\x94P`\0[\x82\x81\x10\x15a\x18\xC0W\x84\x87\x83\x03\x01\x84Ra\x18\xAE\x82\x87Qa\x14\xECV[\x95\x88\x01\x95\x93\x88\x01\x93\x91P`\x01\x01a\x18\x94V[P``\x8A\x01Q`\x01`\x01`@\x1B\x03\x81\x16`\x80\x8B\x01R\x96P`\x80\x8A\x01Q`\x01`\x01`\xA0\x1B\x03\x81\x16`\xA0\x8B\x01R\x96P\x99\x98PPPPPPPPPV[fKUSAMA-`\xC8\x1B\x81R`\0\x82Qa\x19\x1C\x81`\x07\x85\x01` \x87\x01a\x14\xC8V[\x91\x90\x91\x01`\x07\x01\x92\x91PPV\xFE\xA2dipfsX\"\x12 \x0CU\xE8m\x17\x1C\xF0\xDD\xF4p\xF1\x8C}\x9D\xD3I3=hCE\x0Ev;J\xBAK \xB3Y\xB7\x82dsolcC\0\x08\x11\x003"; /// The deployed bytecode of the contract. pub static PINGMODULE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); @@ -574,22 +585,22 @@ pub mod ping_module { .method_hash([244, 55, 188, 89], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `onAccept` (0xeaee1caa) function + ///Calls the contract's `onAccept` (0x0fee32ce) function pub fn on_accept( &self, - request: PostRequest, + incoming: IncomingPostRequest, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([234, 238, 28, 170], (request,)) + .method_hash([15, 238, 50, 206], (incoming,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `onGetResponse` (0xdeae54f5) function + ///Calls the contract's `onGetResponse` (0xb5a9824b) function pub fn on_get_response( &self, - p0: GetResponse, + p0: IncomingGetResponse, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([222, 174, 84, 245], (p0,)) + .method_hash([181, 169, 130, 75], (p0,)) .expect("method not found (this should never happen)") } ///Calls the contract's `onGetTimeout` (0xc492e426) function @@ -610,13 +621,13 @@ pub mod ping_module { .method_hash([188, 13, 212, 71], (p0,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `onPostResponse` (0xfeff7fa8) function + ///Calls the contract's `onPostResponse` (0xb2a01bf5) function pub fn on_post_response( &self, - p0: PostResponse, + p0: IncomingPostResponse, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([254, 255, 127, 168], (p0,)) + .method_hash([178, 160, 27, 245], (p0,)) .expect("method not found (this should never happen)") } ///Calls the contract's `onPostResponseTimeout` (0x0bc37bab) function @@ -1073,7 +1084,8 @@ pub mod ping_module { #[ethcall(name = "host", abi = "host()")] pub struct HostCall; ///Container type for all input parameters for the `onAccept` function with signature - /// `onAccept((bytes,bytes,uint64,bytes,bytes,uint64,bytes))` and selector `0xeaee1caa` + /// `onAccept(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),address))` and selector + /// `0x0fee32ce` #[derive( Clone, ::ethers::contract::EthCall, @@ -1084,13 +1096,16 @@ pub mod ping_module { Eq, Hash, )] - #[ethcall(name = "onAccept", abi = "onAccept((bytes,bytes,uint64,bytes,bytes,uint64,bytes))")] + #[ethcall( + name = "onAccept", + abi = "onAccept(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),address))" + )] pub struct OnAcceptCall { - pub request: PostRequest, + pub incoming: IncomingPostRequest, } ///Container type for all input parameters for the `onGetResponse` function with signature - /// `onGetResponse(((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]))` and - /// selector `0xdeae54f5` + /// `onGetResponse((((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]), + /// address))` and selector `0xb5a9824b` #[derive( Clone, ::ethers::contract::EthCall, @@ -1103,9 +1118,9 @@ pub mod ping_module { )] #[ethcall( name = "onGetResponse", - abi = "onGetResponse(((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]))" + abi = "onGetResponse((((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]),address))" )] - pub struct OnGetResponseCall(pub GetResponse); + pub struct OnGetResponseCall(pub IncomingGetResponse); ///Container type for all input parameters for the `onGetTimeout` function with signature /// `onGetTimeout((bytes,bytes,uint64,bytes,uint64,bytes[],uint64))` and selector `0xc492e426` #[derive( @@ -1142,8 +1157,8 @@ pub mod ping_module { )] pub struct OnPostRequestTimeoutCall(pub PostRequest); ///Container type for all input parameters for the `onPostResponse` function with signature - /// `onPostResponse(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64))` and selector - /// `0xfeff7fa8` + /// `onPostResponse((((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64),address))` and + /// selector `0xb2a01bf5` #[derive( Clone, ::ethers::contract::EthCall, @@ -1156,9 +1171,9 @@ pub mod ping_module { )] #[ethcall( name = "onPostResponse", - abi = "onPostResponse(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64))" + abi = "onPostResponse((((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64),address))" )] - pub struct OnPostResponseCall(pub PostResponse); + pub struct OnPostResponseCall(pub IncomingPostResponse); ///Container type for all input parameters for the `onPostResponseTimeout` function with /// signature `onPostResponseTimeout(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes, /// uint64))` and selector `0x0bc37bab` diff --git a/evm/abi/src/generated/shared_types.rs b/evm/abi/src/generated/shared_types.rs index 7a24fc59a..b6facc741 100644 --- a/evm/abi/src/generated/shared_types.rs +++ b/evm/abi/src/generated/shared_types.rs @@ -33,6 +33,52 @@ pub struct GetResponse { pub request: GetRequest, pub values: ::std::vec::Vec, } +///`IncomingGetResponse(((bytes,bytes,uint64,bytes,uint64,bytes[],uint64),(bytes,bytes)[]), +/// address)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct IncomingGetResponse { + pub response: GetResponse, + pub relayer: ::ethers::core::types::Address, +} +///`IncomingPostRequest((bytes,bytes,uint64,bytes,bytes,uint64,bytes),address)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct IncomingPostRequest { + pub request: PostRequest, + pub relayer: ::ethers::core::types::Address, +} +///`IncomingPostResponse(((bytes,bytes,uint64,bytes,bytes,uint64,bytes),bytes,uint64),address)` +#[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, +)] +pub struct IncomingPostResponse { + pub response: PostResponse, + pub relayer: ::ethers::core::types::Address, +} ///`PostRequest(bytes,bytes,uint64,bytes,bytes,uint64,bytes)` #[derive( Clone, diff --git a/evm/examples/CrossChainMessenger.sol b/evm/examples/CrossChainMessenger.sol index f55a53489..6947c25e4 100644 --- a/evm/examples/CrossChainMessenger.sol +++ b/evm/examples/CrossChainMessenger.sol @@ -62,15 +62,15 @@ contract CrossChainMessenger is IIsmpModule { IDispatcher(host).dispatch(post); } - function onAccept(PostRequest memory request) external onlyIsmpHost { - emit PostReceived(request.nonce, request.source, string(request.body)); + function onAccept(IncomingPostRequest memory incoming) external onlyIsmpHost { + emit PostReceived(incoming.request.nonce, incoming.request.source, string(incoming.request.body)); } function onPostRequestTimeout(PostRequest memory) external view onlyIsmpHost { revert("No timeouts for now"); } - function onPostResponse(PostResponse memory) external view onlyIsmpHost { + function onPostResponse(IncomingPostResponse memory) external view onlyIsmpHost { revert("CrossChainMessenger doesn't emit responses"); } @@ -78,7 +78,7 @@ contract CrossChainMessenger is IIsmpModule { revert("Token gateway doesn't emit Get Requests"); } - function onGetResponse(GetResponse memory) external view onlyIsmpHost { + function onGetResponse(IncomingGetResponse memory) external view onlyIsmpHost { revert("CrossChainMessenger doesn't emit Get Requests"); } diff --git a/evm/examples/PingModule.sol b/evm/examples/PingModule.sol index 3d5c8038c..bd3d7b863 100644 --- a/evm/examples/PingModule.sol +++ b/evm/examples/PingModule.sol @@ -135,15 +135,15 @@ contract PingModule is IIsmpModule { IDispatcher(_host).dispatch(post); } - function onAccept(PostRequest memory request) external onlyIsmpHost { - emit PostReceived(string(request.body)); + function onAccept(IncomingPostRequest memory incoming) external onlyIsmpHost { + emit PostReceived(string(incoming.request.body)); } - function onPostResponse(PostResponse memory) external onlyIsmpHost { + function onPostResponse(IncomingPostResponse memory) external onlyIsmpHost { emit PostResponseReceived(); } - function onGetResponse(GetResponse memory) external onlyIsmpHost { + function onGetResponse(IncomingGetResponse memory) external onlyIsmpHost { emit GetResponseReceived(); } diff --git a/evm/lib/ismp-solidity b/evm/lib/ismp-solidity index 68f657a6b..345fc9d1f 160000 --- a/evm/lib/ismp-solidity +++ b/evm/lib/ismp-solidity @@ -1 +1 @@ -Subproject commit 68f657a6bc69801abe4587b755836769840d862c +Subproject commit 345fc9d1fc2c424be8b53af8c736c2eae7d57032 diff --git a/evm/script/DeployIsmp.s.sol b/evm/script/DeployIsmp.s.sol index 381c06e08..2e190a53c 100644 --- a/evm/script/DeployIsmp.s.sol +++ b/evm/script/DeployIsmp.s.sol @@ -79,7 +79,6 @@ contract DeployScript is Script { consensusState: new bytes(0), perByteFee: 3 * 1e15, // $0.003/byte feeToken: address(feeToken), - latestStateMachineHeight: 0, stateMachineWhitelist: stateMachineWhitelist }); diff --git a/evm/src/hosts/EvmHost.sol b/evm/src/hosts/EvmHost.sol index e9222a1cc..490c7f672 100644 --- a/evm/src/hosts/EvmHost.sol +++ b/evm/src/hosts/EvmHost.sol @@ -6,7 +6,7 @@ import {Math} from "openzeppelin/utils/math/Math.sol"; import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol"; import {Bytes} from "solidity-merkle-trees/trie/Bytes.sol"; -import {IIsmpModule} from "ismp/IIsmpModule.sol"; +import {IIsmpModule, IncomingPostRequest, IncomingPostResponse, IncomingGetResponse} from "ismp/IIsmpModule.sol"; import {DispatchPost, DispatchPostResponse, DispatchGet} from "ismp/IDispatcher.sol"; import {IIsmpHost, FeeMetadata, ResponseReceipt} from "ismp/IIsmpHost.sol"; import {StateCommitment, StateMachineHeight} from "ismp/IConsensusClient.sol"; @@ -38,8 +38,6 @@ struct HostParams { bytes consensusState; // timestamp for when the consensus was most recently updated uint256 consensusUpdateTimestamp; - // latest state machine height - uint256 latestStateMachineHeight; // whitelisted state machines uint256[] stateMachineWhitelist; } @@ -187,7 +185,12 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { } constructor(HostParams memory params) { - initHostParams(params); + _hostParams = params; + uint256 length = params.stateMachineWhitelist.length; + for (uint256 i = 0; i < length; i++) { + // set it to non-zero + _latestStateMachineHeight[params.stateMachineWhitelist[i]] = 1; + } } /** @@ -235,19 +238,6 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { return _frozen; } - /** - * @dev initialize the host params. Won't work if it has already been initialized. - */ - function initHostParams(HostParams memory params) public { - require(_hostParams.consensusState.length == 0, "HostParams already set"); - _hostParams = params; - uint256 length = params.stateMachineWhitelist.length; - for (uint256 i = 0; i < length; i++) { - // set it to non-zero - _latestStateMachineHeight[params.stateMachineWhitelist[i]] = 1; - } - } - /** * @return the `HostParams` */ @@ -380,14 +370,6 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { _hostParams.consensusUpdateTimestamp = block.timestamp; } - /** - * @dev Store the latest state machine height - * @param height State Machine Latest Height - */ - function storeLatestStateMachineHeight(uint256 height) external onlyHandler { - _hostParams.latestStateMachineHeight = height; - } - /** * @dev Store the state commitment at given state height alongside relevant metadata. Assumes the state commitment is of the latest height. */ @@ -420,7 +402,6 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { if (chainId() == block.chainid) { require(_hostParams.consensusState.equals(new bytes(0)), "Unauthorized action"); } - _hostParams.latestStateMachineHeight = 0; _hostParams.consensusState = state; } @@ -439,7 +420,9 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { return; } - (bool success,) = address(destination).call(abi.encodeWithSelector(IIsmpModule.onAccept.selector, request)); + (bool success,) = address(destination).call( + abi.encodeWithSelector(IIsmpModule.onAccept.selector, IncomingPostRequest(request, relayer)) + ); if (success) { bytes32 commitment = request.hash(); @@ -455,7 +438,9 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { */ function dispatchIncoming(PostResponse memory response, address relayer) external onlyHandler { address origin = _bytesToAddress(response.request.from); - (bool success,) = address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostResponse.selector, response)); + (bool success,) = address(origin).call( + abi.encodeWithSelector(IIsmpModule.onPostResponse.selector, IncomingPostResponse(response, relayer)) + ); if (success) { bytes32 commitment = response.request.hash(); @@ -471,7 +456,9 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { */ function dispatchIncoming(GetResponse memory response, address relayer) external onlyHandler { address origin = _bytesToAddress(response.request.from); - (bool success,) = address(origin).call(abi.encodeWithSelector(IIsmpModule.onGetResponse.selector, response)); + (bool success,) = address(origin).call( + abi.encodeWithSelector(IIsmpModule.onGetResponse.selector, IncomingGetResponse(response, relayer)) + ); if (success) { bytes32 commitment = response.request.hash(); diff --git a/evm/src/modules/HandlerV1.sol b/evm/src/modules/HandlerV1.sol index bf12f30e2..85b0fa1bd 100644 --- a/evm/src/modules/HandlerV1.sol +++ b/evm/src/modules/HandlerV1.sol @@ -39,8 +39,6 @@ contract HandlerV1 is IHandler, Context { _; } - event StateMachineUpdated(uint256 stateMachineId, uint256 height); - /** * @dev Handle incoming consensus messages. These message are accompanied with some cryptographic proof. * If the Host's internal consensus client verifies this proof successfully, diff --git a/evm/src/modules/HostManager.sol b/evm/src/modules/HostManager.sol index 0018f9341..a01934c9b 100644 --- a/evm/src/modules/HostManager.sol +++ b/evm/src/modules/HostManager.sol @@ -6,7 +6,7 @@ import {PostRequest, PostResponse, GetRequest, GetResponse, PostTimeout} from "i import {StateMachine} from "ismp/StateMachine.sol"; import {HostParams, IHostManager, WithdrawParams, EvmHost} from "../hosts/EvmHost.sol"; -import {BaseIsmpModule} from "ismp/IIsmpModule.sol"; +import {BaseIsmpModule, IncomingPostRequest} from "ismp/IIsmpModule.sol"; /// Host manager params struct HostManagerParams { @@ -56,7 +56,8 @@ contract HostManager is BaseIsmpModule { _params.admin = address(0); } - function onAccept(PostRequest calldata request) external override onlyIsmpHost { + function onAccept(IncomingPostRequest calldata incoming) external override onlyIsmpHost { + PostRequest calldata request = incoming.request; // Only Hyperbridge governor parachain can send requests to this module. require(request.source.equals(StateMachine.polkadot(_params.governorStateMachineId)), "Unauthorized request"); diff --git a/evm/src/modules/TokenGateway.sol b/evm/src/modules/TokenGateway.sol index a35f08807..612c9549a 100644 --- a/evm/src/modules/TokenGateway.sol +++ b/evm/src/modules/TokenGateway.sol @@ -4,12 +4,11 @@ pragma solidity 0.8.17; import {IDispatcher, DispatchPost} from "ismp/IDispatcher.sol"; import {IIsmpHost} from "ismp/IIsmpHost.sol"; import {StateMachine} from "ismp/StateMachine.sol"; -import {BaseIsmpModule, PostRequest} from "ismp/IIsmpModule.sol"; +import {BaseIsmpModule, PostRequest, IncomingPostRequest} from "ismp/IIsmpModule.sol"; import {Bytes} from "solidity-merkle-trees/trie/Bytes.sol"; import {IERC6160Ext20} from "ERC6160/interfaces/IERC6160Ext20.sol"; import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol"; import {CallDispatcher, ICallDispatcher} from "./CallDispatcher.sol"; - import {IUniswapV2Router} from "../interfaces/IUniswapV2Router.sol"; struct TeleportParams { @@ -131,16 +130,13 @@ contract TokenGateway is BaseIsmpModule { // Relayer provided some liquidity event LiquidityProvided(address relayer, uint256 amount, bytes32 assetId); - - // todo: map assetId to liquidity fee, so fees are configurable on a per asset basis - // User has received some assets event AssetReceived(bytes source, uint256 nonce, address beneficiary, uint256 amount, bytes32 assetId); // User has sent some assets event AssetTeleported( address from, bytes32 to, uint256 amount, bytes32 assetId, bool redeem, bytes32 requestCommitment ); - // User assets could not be delivered and has been refunded. + // User assets could not be delivered and have been refunded. event AssetRefunded(address beneficiary, uint256 amount, bytes32 assetId, bytes dest, uint256 nonce); // restricts call to `IIsmpHost` @@ -236,9 +232,7 @@ contract TokenGateway is BaseIsmpModule { // only swap if the feeToken is not the token intended for fee if (feeToken != teleportParams.feeToken) { address[] memory path = new address[](2); - // from path[0] = teleportParams.feeToken; - // to path[1] = feeToken; require( @@ -277,17 +271,17 @@ contract TokenGateway is BaseIsmpModule { }); } - function onAccept(PostRequest calldata request) external override onlyIsmpHost { - OnAcceptActions action = OnAcceptActions(uint8(request.body[0])); + function onAccept(IncomingPostRequest calldata incoming) external override onlyIsmpHost { + OnAcceptActions action = OnAcceptActions(uint8(incoming.request.body[0])); if (action == OnAcceptActions.IncomingAsset) { - if (request.body.length > BODY_BYTES_SIZE) { - handleIncomingAssetWithCall(request); + if (incoming.request.body.length > BODY_BYTES_SIZE) { + handleIncomingAssetWithCall(incoming); } else { - handleIncomingAssetWithoutCall(request); + handleIncomingAssetWithoutCall(incoming); } } else if (action == OnAcceptActions.GovernanceAction) { - handleGovernance(request); + handleGovernance(incoming.request); } else { revert("Unknown Action"); } @@ -295,8 +289,19 @@ contract TokenGateway is BaseIsmpModule { function onPostRequestTimeout(PostRequest calldata request) external override onlyIsmpHost { // The funds could not be sent, this would allow users to get their funds back. - // todo: test this with BodyWithCall - Body memory body = abi.decode(request.body[1:161], (Body)); + Body memory body; + if (request.body.length > BODY_BYTES_SIZE) { + BodyWithCall memory bodyWithCall = abi.decode(request.body[1:], (BodyWithCall)); + body = Body({ + amount: bodyWithCall.amount, + assetId: bodyWithCall.assetId, + redeem: bodyWithCall.redeem, + from: bodyWithCall.from, + to: bodyWithCall.to + }); + } else { + body = abi.decode(request.body[1:], (Body)); + } address _erc20 = _erc20s[body.assetId]; address _erc6160 = _erc6160s[body.assetId]; @@ -319,12 +324,13 @@ contract TokenGateway is BaseIsmpModule { }); } - function handleIncomingAssetWithoutCall(PostRequest calldata request) private { - /// TokenGateway only accepts incoming assets from it's instances on other chains. + function handleIncomingAssetWithoutCall(IncomingPostRequest calldata incoming) private { + PostRequest calldata request = incoming.request; + // TokenGateway only accepts incoming assets from it's instances on other chains. require(request.from.equals(abi.encodePacked(address(this))), "Unauthorized request"); Body memory body = abi.decode(request.body[1:], (Body)); address to = bytes32ToAddress(body.to); - handleIncomingAsset(body.assetId, body.redeem, body.amount, to); + handleIncomingAsset(body.assetId, body.redeem, body.amount, to, incoming.relayer); emit AssetReceived({ source: request.source, @@ -335,12 +341,13 @@ contract TokenGateway is BaseIsmpModule { }); } - function handleIncomingAssetWithCall(PostRequest calldata request) private { + function handleIncomingAssetWithCall(IncomingPostRequest calldata incoming) private { + PostRequest calldata request = incoming.request; /// TokenGateway only accepts incoming assets from it's instances on other chains. require(request.from.equals(abi.encodePacked(address(this))), "Unauthorized request"); BodyWithCall memory body = abi.decode(request.body[1:], (BodyWithCall)); address to = bytes32ToAddress(body.to); - handleIncomingAsset(body.assetId, body.redeem, body.amount, to); + handleIncomingAsset(body.assetId, body.redeem, body.amount, to, incoming.relayer); // dispatching low level call ICallDispatcher(_params.dispatcher).dispatch(to, body.data); @@ -353,7 +360,7 @@ contract TokenGateway is BaseIsmpModule { }); } - function handleIncomingAsset(bytes32 assetId, bool redeem, uint256 amount, address to) private { + function handleIncomingAsset(bytes32 assetId, bool redeem, uint256 amount, address to, address relayer) private { address _erc20 = _erc20s[assetId]; address _erc6160 = _erc6160s[assetId]; @@ -365,15 +372,12 @@ contract TokenGateway is BaseIsmpModule { // user is swapping, relayers should double as liquidity providers. uint256 transferredAmount = amount - relayerLiquidityFee(assetId, amount); require( - // we assume that the relayer is an EOA - IERC20(_erc20).transferFrom(tx.origin, to, transferredAmount), - "Gateway: Insufficient relayer balance" + IERC20(_erc20).transferFrom(relayer, to, transferredAmount), "Gateway: Insufficient relayer balance" ); - - emit LiquidityProvided({relayer: tx.origin, amount: transferredAmount, assetId: assetId}); - // hand the relayer the erc6160, so they can redeem on the source chain - IERC6160Ext20(_erc6160).mint(tx.origin, amount, ""); + IERC6160Ext20(_erc6160).mint(relayer, amount, ""); + + emit LiquidityProvided({relayer: relayer, amount: transferredAmount, assetId: assetId}); } else if (_erc6160 != address(0)) { IERC6160Ext20(_erc6160).mint(to, amount, ""); } else { diff --git a/evm/test/BaseTest.sol b/evm/test/BaseTest.sol index 8a8fecd3e..061d57bf6 100644 --- a/evm/test/BaseTest.sol +++ b/evm/test/BaseTest.sol @@ -71,7 +71,6 @@ contract BaseTest is Test { consensusState: new bytes(0), perByteFee: 1000000000000000000, // 1FTK feeToken: address(feeToken), - latestStateMachineHeight: 0, stateMachineWhitelist: stateMachineWhitelist }); host = new TestHost(params); diff --git a/evm/test/HostManagerTest.sol b/evm/test/HostManagerTest.sol index 508e3499e..527df672b 100644 --- a/evm/test/HostManagerTest.sol +++ b/evm/test/HostManagerTest.sol @@ -5,6 +5,7 @@ import "forge-std/Test.sol"; import {BaseTest} from "./BaseTest.sol"; import {PostRequest} from "ismp/Message.sol"; +import {IncomingPostRequest} from "ismp/IIsmpModule.sol"; import {HostManagerParams, HostManager} from "../src/modules/HostManager.sol"; import {HostParams} from "../src/hosts/EvmHost.sol"; @@ -16,7 +17,7 @@ contract HostManagerTest is BaseTest { require(feeToken.balanceOf(address(host)) == 1000e18, "Failed to mint user tokens"); vm.startPrank(address(host)); - HostManager(host.hostParams().hostManager).onAccept(request); + HostManager(host.hostParams().hostManager).onAccept(IncomingPostRequest(request, tx.origin)); require(feeToken.balanceOf(address(host)) == 500e18, "Failed to process request"); } @@ -24,7 +25,7 @@ contract HostManagerTest is BaseTest { function HostManagerSetParams(PostRequest calldata request) public { vm.startPrank(address(host)); - HostManager(host.hostParams().hostManager).onAccept(request); + HostManager(host.hostParams().hostManager).onAccept(IncomingPostRequest(request, tx.origin)); HostParams memory params = abi.decode(request.body[1:], (HostParams)); console.logUint(host.hostParams().challengePeriod); @@ -34,6 +35,6 @@ contract HostManagerTest is BaseTest { function HostManagerOnAccept(PostRequest calldata request) public { vm.startPrank(address(host)); - HostManager(host.hostParams().hostManager).onAccept(request); + HostManager(host.hostParams().hostManager).onAccept(IncomingPostRequest(request, tx.origin)); } } diff --git a/evm/test/MainnetForkBaseTest.sol b/evm/test/MainnetForkBaseTest.sol index f6fd65911..36637a840 100644 --- a/evm/test/MainnetForkBaseTest.sol +++ b/evm/test/MainnetForkBaseTest.sol @@ -77,7 +77,6 @@ contract MainnetForkBaseTest is Test { consensusState: new bytes(0), perByteFee: 1000000000000000000, // 1FTK feeToken: address(feeToken), - latestStateMachineHeight: 0, stateMachineWhitelist: stateMachineWhitelist }); diff --git a/evm/test/TokenGatewayTest.sol b/evm/test/TokenGatewayTest.sol index ac0d1862d..b138ef61f 100644 --- a/evm/test/TokenGatewayTest.sol +++ b/evm/test/TokenGatewayTest.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.17; import "forge-std/Test.sol"; import {BaseTest} from "./BaseTest.sol"; +import {IncomingPostRequest} from "ismp/IIsmpModule.sol"; import {GetResponseMessage, GetTimeoutMessage, GetRequest, PostRequest, Message} from "ismp/Message.sol"; import { TeleportParams, @@ -108,14 +109,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(body)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(body)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -138,14 +142,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(body)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(body)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -176,11 +183,28 @@ contract TokenGatewayTest is BaseTest { ); assert(feeToken.balanceOf(address(this)) == 1_000 * 1e18); - } - function getMappingValue(address target, uint256 mapSlot, bytes32 key) public view returns (bytes32) { - bytes32 slotValue = vm.load(target, keccak256(abi.encode(key, mapSlot))); - return slotValue; + bytes memory stakeCalldata = abi.encodeWithSignature("recordStake(address)", address(this)); + BodyWithCall memory bodyWithCall = BodyWithCall({ + assetId: keccak256("USD.h"), + to: addressToBytes32(address(miniStaking)), + redeem: false, + amount: 1_000 * 1e18, + from: addressToBytes32(address(this)), + data: stakeCalldata + }); + vm.prank(address(host)); + gateway.onPostRequestTimeout( + PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(bodyWithCall)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }) + ); } function testAddAssetOnAccept() public { @@ -202,14 +226,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -242,14 +269,17 @@ contract TokenGatewayTest is BaseTest { vm.expectRevert(bytes("Unauthorized request")); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"0100", abi.encode(assets)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"0100", abi.encode(assets)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); } @@ -273,14 +303,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -313,14 +346,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -347,14 +383,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -371,14 +410,17 @@ contract TokenGatewayTest is BaseTest { }); vm.expectRevert(bytes("TokenGateway: Unauthorized action")); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(body)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(body)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); } @@ -394,15 +436,18 @@ contract TokenGatewayTest is BaseTest { vm.startPrank(address(host)); vm.expectRevert(bytes("Unauthorized request")); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - // not from gateway - from: abi.encodePacked(address(this)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(body)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + // not from gateway + from: abi.encodePacked(address(this)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(body)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); } @@ -431,14 +476,17 @@ contract TokenGatewayTest is BaseTest { // Adding Erc20 token to the existing `USD.h` asset using governance action gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -446,7 +494,7 @@ contract TokenGatewayTest is BaseTest { // now the relayer is bringing the ERC6160 asset obatined from the other chain for providing this liquidity. mockUSDC.mint(address(gateway), 1_000 * 1e18); - // Relayer USDC receaiving address + // Relayer USDC receiving address address relayer_vault = address(1); Body memory redeemBody = Body({ @@ -459,14 +507,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(redeemBody)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(redeemBody)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -499,14 +550,17 @@ contract TokenGatewayTest is BaseTest { vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"01", abi.encode(params)), - nonce: 0, - source: hyperbridge, - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"01", abi.encode(params)), + nonce: 0, + source: hyperbridge, + timeoutTimestamp: 0 + }), + relayer: address(0) }) ); @@ -529,14 +583,17 @@ contract TokenGatewayTest is BaseTest { // hitting the gateway with the incoming asset vm.prank(address(host)); gateway.onAccept( - PostRequest({ - to: abi.encodePacked(address(0)), - from: abi.encodePacked(address(gateway)), - dest: new bytes(0), - body: bytes.concat(hex"00", abi.encode(body)), - nonce: 0, - source: new bytes(0), - timeoutTimestamp: 0 + IncomingPostRequest({ + request: PostRequest({ + to: abi.encodePacked(address(0)), + from: abi.encodePacked(address(gateway)), + dest: new bytes(0), + body: bytes.concat(hex"00", abi.encode(body)), + nonce: 0, + source: new bytes(0), + timeoutTimestamp: 0 + }), + relayer: relayer_address }) ); diff --git a/modules/client/src/providers/evm.rs b/modules/client/src/providers/evm.rs index 7b90d5e13..3cdff26b7 100644 --- a/modules/client/src/providers/evm.rs +++ b/modules/client/src/providers/evm.rs @@ -308,7 +308,7 @@ impl Client for EvmClient { return Some((Ok(None), (block_number, interval, client))); } - let contract = Handler::new(client.ismp_handler, client.client.clone()); + let contract = EvmHost::new(client.host_address, client.client.clone()); let results = match contract .events() .address(client.ismp_handler.into()) @@ -327,13 +327,16 @@ impl Client for EvmClient { }; let mut events = results .into_iter() - .map(|(ev, meta)| WithMetadata { - meta: EventMetadata { - block_hash: meta.block_hash, - transaction_hash: meta.transaction_hash, - block_number: meta.block_number.as_u64(), - }, - event: StateMachineUpdated::from(ev), + .filter_map(|(ev, meta)| { + let Event::StateMachineUpdated(event) = ev.try_into().ok()? else { None? }; + Some(WithMetadata { + meta: EventMetadata { + block_hash: meta.block_hash, + transaction_hash: meta.transaction_hash, + block_number: meta.block_number.as_u64(), + }, + event, + }) }) .collect::>(); // we only want the highest event diff --git a/modules/consensus/beefy/prover/src/runtime.rs b/modules/consensus/beefy/prover/src/runtime.rs index 8be27c6e0..d84daba46 100644 --- a/modules/consensus/beefy/prover/src/runtime.rs +++ b/modules/consensus/beefy/prover/src/runtime.rs @@ -1,6 +1,6 @@ -#[cfg(any(feature = "rococo-local", test))] +#[cfg(feature = "rococo-local")] mod rococo_local; -#[cfg(any(feature = "rococo-local", test))] +#[cfg(feature = "rococo-local")] pub use rococo_local::api::*; #[cfg(not(feature = "rococo-local"))] diff --git a/modules/ismp/pallet/asset-gateway/src/lib.rs b/modules/ismp/pallet/asset-gateway/src/lib.rs index d81206c2a..253228ca9 100644 --- a/modules/ismp/pallet/asset-gateway/src/lib.rs +++ b/modules/ismp/pallet/asset-gateway/src/lib.rs @@ -320,6 +320,25 @@ where } ); + // parachains/solochains shouldn't be sending us a request. + ensure!( + !matches!( + request.source_chain(), + StateMachine::Kusama(_) | + StateMachine::Polkadot(_) | + StateMachine::Grandpa(_) | + StateMachine::Beefy(_) + ), + ismp::error::Error::ModuleDispatchError { + msg: "Token Gateway: Illegal source chain".to_string(), + meta: Meta { + source: request.source_chain(), + dest: request.dest_chain(), + nonce: request.nonce(), + }, + } + ); + let body: Body = alloy_rlp::Decodable::decode(&mut &post.data[1..]).map_err(|_| { ismp::error::Error::ModuleDispatchError { msg: "Token Gateway: Failed to decode request body".to_string(), diff --git a/modules/ismp/pallet/host-executive/src/params.rs b/modules/ismp/pallet/host-executive/src/params.rs index 9ad6675fb..4a3d2c3df 100644 --- a/modules/ismp/pallet/host-executive/src/params.rs +++ b/modules/ismp/pallet/host-executive/src/params.rs @@ -1,6 +1,8 @@ +use alloc::vec::Vec; use alloy_rlp_derive::{RlpDecodable, RlpEncodable}; -use frame_support::{BoundedVec, __private::RuntimeDebug, pallet_prelude::ConstU32}; +use frame_support::{pallet_prelude::ConstU32, BoundedVec}; use sp_core::H160; +use sp_runtime::RuntimeDebug; /// The host parameters of all connected chains #[derive( @@ -9,12 +11,10 @@ use sp_core::H160; pub struct HostParam { /// the minimum default timeout in seconds pub default_timeout: u128, - /// Base fee for GET requests - pub base_get_request_fee: u128, /// The fee to charge per byte pub per_byte_fee: u128, /// The address of the fee token contract - pub fee_token_address: H160, + pub fee_token: H160, /// The admin account pub admin: H160, /// The handler contract @@ -30,11 +30,9 @@ pub struct HostParam { /// The current consensus state pub consensus_state: BoundedVec>, /// Timestamp for when the consensus state was last updated - pub last_updated: u128, - /// The latest state machine height for hyperbridge - pub latest_state_machine_height: u128, + pub consensus_update_timestamp: u128, /// The state machine identifier for hyperbridge - pub hyperbridge: BoundedVec>, + pub state_machine_whitelist: BoundedVec>, } impl HostParam { @@ -44,16 +42,12 @@ impl HostParam { self.default_timeout = default_timeout; } - if let Some(base_get_request_fee) = update.base_get_request_fee { - self.base_get_request_fee = base_get_request_fee; - } - if let Some(per_byte_fee) = update.per_byte_fee { self.per_byte_fee = per_byte_fee; } - if let Some(fee_token_address) = update.fee_token_address { - self.fee_token_address = fee_token_address; + if let Some(fee_token_address) = update.fee_token { + self.fee_token = fee_token_address; } if let Some(admin) = update.admin { @@ -84,16 +78,12 @@ impl HostParam { self.consensus_state = consensus_state; } - if let Some(last_updated) = update.last_updated { - self.last_updated = last_updated; - } - - if let Some(latest_state_machine_height) = update.latest_state_machine_height { - self.latest_state_machine_height = latest_state_machine_height; + if let Some(consensus_update_timestamp) = update.consensus_update_timestamp { + self.consensus_update_timestamp = consensus_update_timestamp; } - if let Some(hyperbridge) = update.hyperbridge { - self.hyperbridge = hyperbridge; + if let Some(state_machine_whitelist) = update.state_machine_whitelist { + self.state_machine_whitelist = state_machine_whitelist; } } } @@ -105,12 +95,10 @@ impl HostParam { pub struct HostParamUpdate { /// the minimum default timeout in seconds pub default_timeout: Option, - /// Base fee for GET requests - pub base_get_request_fee: Option, /// The fee to charge per byte pub per_byte_fee: Option, /// The address of the fee token contract - pub fee_token_address: Option, + pub fee_token: Option, /// The admin account pub admin: Option, /// The handler contract @@ -126,11 +114,9 @@ pub struct HostParamUpdate { /// The current consensus state pub consensus_state: Option>>, /// Timestamp for when the consensus state was last updated - pub last_updated: Option, - /// The latest state machine height for hyperbridge - pub latest_state_machine_height: Option, + pub consensus_update_timestamp: Option, /// The state machine identifier for hyperbridge - pub hyperbridge: Option>>, + pub state_machine_whitelist: Option>>, } /// The host parameters of all connected chains, ethereum friendly version @@ -138,12 +124,10 @@ pub struct HostParamUpdate { pub struct HostParamRlp { /// the minimum default timeout in seconds pub default_timeout: alloy_primitives::U256, - /// Base fee for GET requests - pub base_get_request_fee: alloy_primitives::U256, /// The fee to charge per byte pub per_byte_fee: alloy_primitives::U256, /// The address of the fee token contract - pub fee_token_address: alloy_primitives::Address, + pub fee_token: alloy_primitives::Address, /// The admin account pub admin: alloy_primitives::Address, /// The handler contract @@ -159,11 +143,9 @@ pub struct HostParamRlp { /// The current consensus state pub consensus_state: alloy_primitives::Bytes, /// Timestamp for when the consensus state was last updated - pub last_updated: alloy_primitives::U256, - /// The latest state machine height for hyperbridge - pub latest_state_machine_height: alloy_primitives::U256, + pub consensus_update_timestamp: alloy_primitives::U256, /// The state machine identifier for hyperbridge - pub hyperbridge: alloy_primitives::Bytes, + pub state_machine_whitelist: Vec, } impl TryFrom for HostParamRlp { @@ -172,12 +154,8 @@ impl TryFrom for HostParamRlp { fn try_from(value: HostParam) -> Result { Ok(HostParamRlp { default_timeout: value.default_timeout.try_into().map_err(anyhow::Error::msg)?, - base_get_request_fee: value - .base_get_request_fee - .try_into() - .map_err(anyhow::Error::msg)?, per_byte_fee: value.per_byte_fee.try_into().map_err(anyhow::Error::msg)?, - fee_token_address: value.fee_token_address.0.try_into().map_err(anyhow::Error::msg)?, + fee_token: value.fee_token.0.try_into().map_err(anyhow::Error::msg)?, admin: value.admin.0.try_into().map_err(anyhow::Error::msg)?, handler: value.handler.0.try_into().map_err(anyhow::Error::msg)?, host_manager: value.host_manager.0.try_into().map_err(anyhow::Error::msg)?, @@ -185,12 +163,15 @@ impl TryFrom for HostParamRlp { challenge_period: value.challenge_period.try_into().map_err(anyhow::Error::msg)?, consensus_client: value.consensus_client.0.try_into().map_err(anyhow::Error::msg)?, consensus_state: value.consensus_state.to_vec().into(), - last_updated: value.last_updated.try_into().map_err(anyhow::Error::msg)?, - latest_state_machine_height: value - .latest_state_machine_height + consensus_update_timestamp: value + .consensus_update_timestamp .try_into() .map_err(anyhow::Error::msg)?, - hyperbridge: value.hyperbridge.to_vec().into(), + state_machine_whitelist: value + .state_machine_whitelist + .into_iter() + .map(|id| id.try_into().map_err(anyhow::Error::msg)) + .collect::, anyhow::Error>>()?, }) } }