diff --git a/contracts/prototypes/evm/ERC20CustodyNew.sol b/contracts/prototypes/evm/ERC20CustodyNew.sol index e62022e0..b7019c94 100644 --- a/contracts/prototypes/evm/ERC20CustodyNew.sol +++ b/contracts/prototypes/evm/ERC20CustodyNew.sol @@ -2,34 +2,39 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "./IGatewayEVM.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "./IGatewayEVM.sol"; +import "./IERC20CustodyNew.sol"; + // As the current version, ERC20CustodyNew hold the ERC20s deposited on ZetaChain // This version include a functionality allowing to call a contract // ERC20Custody doesn't call smart contract directly, it passes through the Gateway contract -contract ERC20CustodyNew is ReentrancyGuard{ +contract ERC20CustodyNew is IERC20CustodyNewEvents, IERC20CustodyNewErrors, ReentrancyGuard { using SafeERC20 for IERC20; - error ZeroAddress(); IGatewayEVM public gateway; + address public tssAddress; - event Withdraw(address indexed token, address indexed to, uint256 amount); - event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data); - event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data); + // @dev Only TSS address allowed modifier. + modifier onlyTSS() { + if (msg.sender != tssAddress) { + revert InvalidSender(); + } + _; + } - constructor(address _gateway) { - if (_gateway == address(0)) { + constructor(address _gateway, address _tssAddress) { + if (_gateway == address(0) || _tssAddress == address(0)) { revert ZeroAddress(); } gateway = IGatewayEVM(_gateway); + tssAddress = _tssAddress; } - + // Withdraw is called by TSS address, it directly transfers the tokens to the destination address without contract call - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 - function withdraw(address token, address to, uint256 amount) external nonReentrant { + function withdraw(address token, address to, uint256 amount) external nonReentrant onlyTSS { IERC20(token).safeTransfer(to, amount); emit Withdraw(token, to, amount); @@ -37,9 +42,7 @@ contract ERC20CustodyNew is ReentrancyGuard{ // WithdrawAndCall is called by TSS address, it transfers the tokens and call a contract // For this, it passes through the Gateway contract, it transfers the tokens to the Gateway contract and then calls the contract - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 - function withdrawAndCall(address token, address to, uint256 amount, bytes calldata data) public nonReentrant { + function withdrawAndCall(address token, address to, uint256 amount, bytes calldata data) public nonReentrant onlyTSS { // Transfer the tokens to the Gateway contract IERC20(token).safeTransfer(address(gateway), amount); @@ -51,9 +54,7 @@ contract ERC20CustodyNew is ReentrancyGuard{ // WithdrawAndRevert is called by TSS address, it transfers the tokens and call a contract // For this, it passes through the Gateway contract, it transfers the tokens to the Gateway contract and then calls the contract - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 - function withdrawAndRevert(address token, address to, uint256 amount, bytes calldata data) public nonReentrant { + function withdrawAndRevert(address token, address to, uint256 amount, bytes calldata data) public nonReentrant onlyTSS { // Transfer the tokens to the Gateway contract IERC20(token).safeTransfer(address(gateway), amount); diff --git a/contracts/prototypes/evm/GatewayEVM.sol b/contracts/prototypes/evm/GatewayEVM.sol index 2114d3ad..85301914 100644 --- a/contracts/prototypes/evm/GatewayEVM.sol +++ b/contracts/prototypes/evm/GatewayEVM.sol @@ -27,6 +27,22 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate /// @notice The address of the Zeta token contract. address public zetaToken; + // @dev Only TSS address allowed modifier. + modifier onlyTSS() { + if (msg.sender != tssAddress) { + revert InvalidSender(); + } + _; + } + + // @dev Only asset handler (custody, connector) allowed modifier. + modifier onlyAssetHandler() { + if (msg.sender != custody && msg.sender != zetaConnector) { + revert InvalidSender(); + } + _; + } + /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); @@ -56,7 +72,7 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate // Called by the TSS // Calling onRevert directly - function executeRevert(address destination, bytes calldata data) public payable { + function executeRevert(address destination, bytes calldata data) public payable onlyTSS { (bool success, bytes memory result) = destination.call{value: msg.value}(""); if (!success) revert ExecutionFailed(); Revertable(destination).onRevert(data); @@ -67,7 +83,7 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate // Called by the TSS // Execution without ERC20 tokens, it is payable and can be used in the case of WithdrawAndCall for Gas ZRC20 // It can be also used for contract call without asset movement - function execute(address destination, bytes calldata data) external payable returns (bytes memory) { + function execute(address destination, bytes calldata data) external payable onlyTSS returns (bytes memory) { bytes memory result = _execute(destination, data); emit Executed(destination, msg.value, data); @@ -84,7 +100,7 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate address to, uint256 amount, bytes calldata data - ) public nonReentrant { + ) public nonReentrant onlyAssetHandler { if (amount == 0) revert InsufficientERC20Amount(); // Approve the target contract to spend the tokens if(!resetApproval(token, to)) revert ApprovalFailed(); @@ -111,7 +127,7 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate address to, uint256 amount, bytes calldata data - ) external nonReentrant { + ) external nonReentrant onlyAssetHandler { if (amount == 0) revert InsufficientERC20Amount(); IERC20(token).safeTransfer(address(to), amount); @@ -163,14 +179,14 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate emit Call(msg.sender, receiver, payload); } - function setCustody(address _custody) external { + function setCustody(address _custody) external onlyTSS { if (custody != address(0)) revert CustodyInitialized(); if (_custody == address(0)) revert ZeroAddress(); custody = _custody; } - function setConnector(address _zetaConnector) external { + function setConnector(address _zetaConnector) external onlyTSS { if (zetaConnector != address(0)) revert CustodyInitialized(); if (_zetaConnector == address(0)) revert ZeroAddress(); diff --git a/contracts/prototypes/evm/IERC20CustodyNew.sol b/contracts/prototypes/evm/IERC20CustodyNew.sol new file mode 100644 index 00000000..a07db920 --- /dev/null +++ b/contracts/prototypes/evm/IERC20CustodyNew.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IERC20CustodyNewEvents { + event Withdraw(address indexed token, address indexed to, uint256 amount); + event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data); +} + +interface IERC20CustodyNewErrors { + error ZeroAddress(); + error InvalidSender(); +} \ No newline at end of file diff --git a/contracts/prototypes/evm/IGatewayEVM.sol b/contracts/prototypes/evm/IGatewayEVM.sol index d3260726..ae81b687 100644 --- a/contracts/prototypes/evm/IGatewayEVM.sol +++ b/contracts/prototypes/evm/IGatewayEVM.sol @@ -18,6 +18,7 @@ interface IGatewayEVMErrors { error ZeroAddress(); error ApprovalFailed(); error CustodyInitialized(); + error InvalidSender(); } interface IGatewayEVM { diff --git a/contracts/prototypes/evm/IZetaConnector.sol b/contracts/prototypes/evm/IZetaConnector.sol new file mode 100644 index 00000000..40e49ffc --- /dev/null +++ b/contracts/prototypes/evm/IZetaConnector.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IZetaConnectorEvents { + event Withdraw(address indexed to, uint256 amount); + event WithdrawAndCall(address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); +} \ No newline at end of file diff --git a/contracts/prototypes/evm/ZetaConnectorNative.sol b/contracts/prototypes/evm/ZetaConnectorNative.sol index 6b34035d..d3fce429 100644 --- a/contracts/prototypes/evm/ZetaConnectorNative.sol +++ b/contracts/prototypes/evm/ZetaConnectorNative.sol @@ -8,18 +8,18 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract ZetaConnectorNative is ZetaConnectorNewBase { using SafeERC20 for IERC20; - constructor(address _gateway, address _zetaToken) - ZetaConnectorNewBase(_gateway, _zetaToken) + constructor(address _gateway, address _zetaToken, address _tssAddress) + ZetaConnectorNewBase(_gateway, _zetaToken, _tssAddress) {} // @dev withdraw is called by TSS address, it directly transfers zetaToken to the destination address without contract call - function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant { + function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant onlyTSS { IERC20(zetaToken).safeTransfer(to, amount); emit Withdraw(to, amount); } // @dev withdrawAndCall is called by TSS address, it transfers zetaToken to the gateway and calls a contract - function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant onlyTSS { // Transfer zetaToken to the Gateway contract IERC20(zetaToken).safeTransfer(address(gateway), amount); @@ -30,7 +30,7 @@ contract ZetaConnectorNative is ZetaConnectorNewBase { } // @dev withdrawAndRevert is called by TSS address, it transfers zetaToken to the gateway and calls onRevert on a contract - function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant onlyTSS { // Transfer zetaToken to the Gateway contract IERC20(zetaToken).safeTransfer(address(gateway), amount); @@ -40,7 +40,7 @@ contract ZetaConnectorNative is ZetaConnectorNewBase { emit WithdrawAndRevert(to, amount, data); } - // @dev receiveTokens handles token transfer and burn them + // @dev receiveTokens handles token transfer back to connector function receiveTokens(uint256 amount) external override { IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); } diff --git a/contracts/prototypes/evm/ZetaConnectorNewBase.sol b/contracts/prototypes/evm/ZetaConnectorNewBase.sol index f1762051..f2223afd 100644 --- a/contracts/prototypes/evm/ZetaConnectorNewBase.sol +++ b/contracts/prototypes/evm/ZetaConnectorNewBase.sol @@ -2,28 +2,37 @@ pragma solidity 0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "./IGatewayEVM.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -abstract contract ZetaConnectorNewBase is ReentrancyGuard { +import "./IGatewayEVM.sol"; +import "./IZetaConnector.sol"; + +abstract contract ZetaConnectorNewBase is IZetaConnectorEvents, ReentrancyGuard { using SafeERC20 for IERC20; error ZeroAddress(); + error InvalidSender(); IGatewayEVM public immutable gateway; address public immutable zetaToken; + address public tssAddress; - event Withdraw(address indexed to, uint256 amount); - event WithdrawAndCall(address indexed to, uint256 amount, bytes data); - event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); + // @dev Only TSS address allowed modifier. + modifier onlyTSS() { + if (msg.sender != tssAddress) { + revert InvalidSender(); + } + _; + } - constructor(address _gateway, address _zetaToken) { - if (_gateway == address(0) || _zetaToken == address(0)) { + constructor(address _gateway, address _zetaToken, address _tssAddress) { + if (_gateway == address(0) || _zetaToken == address(0) || _tssAddress == address(0)) { revert ZeroAddress(); } gateway = IGatewayEVM(_gateway); zetaToken = _zetaToken; + tssAddress = _tssAddress; } function withdraw(address to, uint256 amount, bytes32 internalSendHash) external virtual; diff --git a/contracts/prototypes/evm/ZetaConnectorNonNative.sol b/contracts/prototypes/evm/ZetaConnectorNonNative.sol index 1cf9a693..3bb8a04a 100644 --- a/contracts/prototypes/evm/ZetaConnectorNonNative.sol +++ b/contracts/prototypes/evm/ZetaConnectorNonNative.sol @@ -6,18 +6,18 @@ import "./IZetaNonEthNew.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; contract ZetaConnectorNonNative is ZetaConnectorNewBase { - constructor(address _gateway, address _zetaToken) - ZetaConnectorNewBase(_gateway, _zetaToken) + constructor(address _gateway, address _zetaToken, address _tssAddress) + ZetaConnectorNewBase(_gateway, _zetaToken, _tssAddress) {} // @dev withdraw is called by TSS address, it mints zetaToken to the destination address - function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant { + function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant onlyTSS { IZetaNonEthNew(zetaToken).mint(to, amount, internalSendHash); emit Withdraw(to, amount); } // @dev withdrawAndCall is called by TSS address, it mints zetaToken and calls a contract - function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant onlyTSS { // Mint zetaToken to the Gateway contract IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); @@ -28,7 +28,7 @@ contract ZetaConnectorNonNative is ZetaConnectorNewBase { } // @dev withdrawAndRevert is called by TSS address, it mints zetaToken to the gateway and calls onRevert on a contract - function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant onlyTSS { // Mint zetaToken to the Gateway contract IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); diff --git a/contracts/prototypes/zevm/GatewayZEVM.sol b/contracts/prototypes/zevm/GatewayZEVM.sol index 17fe9c4f..99d1f9ca 100644 --- a/contracts/prototypes/zevm/GatewayZEVM.sol +++ b/contracts/prototypes/zevm/GatewayZEVM.sol @@ -19,6 +19,14 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; address public zetaToken; + // @dev Only Fungible module address allowed modifier. + modifier onlyFungible() { + if (msg.sender != FUNGIBLE_MODULE_ADDRESS) { + revert CallerIsNotFungibleModule(); + } + _; + } + /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); @@ -94,45 +102,35 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O } // Deposit foreign coins into ZRC20 - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function deposit( address zrc20, uint256 amount, address target - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); + ) external onlyFungible { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); IZRC20(zrc20).deposit(target, amount); } // Execute user specified contract on ZEVM - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function execute( zContext calldata context, address zrc20, uint256 amount, address target, bytes calldata message - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); - + ) external onlyFungible { UniversalContract(target).onCrossChainCall(context, zrc20, amount, message); } // Deposit foreign coins into ZRC20 and call user specified contract on ZEVM - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function depositAndCall( zContext calldata context, address zrc20, uint256 amount, address target, bytes calldata message - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); + ) external onlyFungible { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); IZRC20(zrc20).deposit(target, amount); @@ -140,15 +138,12 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O } // Deposit zeta and call user specified contract on ZEVM - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function depositAndCall( zContext calldata context, uint256 amount, address target, bytes calldata message - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); + ) external onlyFungible { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); _transferZETA(amount, target); @@ -156,31 +151,24 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O } // Revert user specified contract on ZEVM - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function executeRevert( revertContext calldata context, address zrc20, uint256 amount, address target, bytes calldata message - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); - + ) external onlyFungible { UniversalContract(target).onRevert(context, zrc20, amount, message); } // Deposit foreign coins into ZRC20 and revert user specified contract on ZEVM - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function depositAndRevert( revertContext calldata context, address zrc20, uint256 amount, address target, bytes calldata message - ) external { - if (msg.sender != FUNGIBLE_MODULE_ADDRESS) revert CallerIsNotFungibleModule(); + ) external onlyFungible { if (target == FUNGIBLE_MODULE_ADDRESS || target == address(this)) revert InvalidTarget(); IZRC20(zrc20).deposit(target, amount); diff --git a/contracts/zevm/ZRC20New.sol b/contracts/zevm/ZRC20New.sol index 351c6c53..116661ef 100644 --- a/contracts/zevm/ZRC20New.sol +++ b/contracts/zevm/ZRC20New.sol @@ -229,8 +229,6 @@ contract ZRC20New is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @param amount, amount to deposit. * @return true/false if succeeded/failed. */ - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function deposit(address to, uint256 amount) external override returns (bool) { if (msg.sender != FUNGIBLE_MODULE_ADDRESS && msg.sender != SYSTEM_CONTRACT_ADDRESS && msg.sender != GATEWAY_CONTRACT_ADDRESS) revert InvalidSender(); _mint(to, amount); @@ -275,8 +273,6 @@ contract ZRC20New is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @dev Updates system contract address. Can only be updated by the fungible module. * @param addr, new system contract address. */ - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function updateSystemContractAddress(address addr) external onlyFungible { SYSTEM_CONTRACT_ADDRESS = addr; emit UpdatedSystemContract(addr); @@ -286,8 +282,6 @@ contract ZRC20New is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @dev Updates gas limit. Can only be updated by the fungible module. * @param gasLimit, new gas limit. */ - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function updateGasLimit(uint256 gasLimit) external onlyFungible { GAS_LIMIT = gasLimit; emit UpdatedGasLimit(gasLimit); @@ -297,8 +291,6 @@ contract ZRC20New is IZRC20Metadata, ZRC20Errors, ZRC20Events { * @dev Updates protocol flat fee. Can only be updated by the fungible module. * @param protocolFlatFee, new protocol flat fee. */ - // TODO: Finalize access control - // https://github.com/zeta-chain/protocol-contracts/issues/204 function updateProtocolFlatFee(uint256 protocolFlatFee) external onlyFungible { PROTOCOL_FLAT_FEE = protocolFlatFee; emit UpdatedProtocolFlatFee(protocolFlatFee); diff --git a/data/addresses.mainnet.json b/data/addresses.mainnet.json index 376b03d2..30604da4 100644 --- a/data/addresses.mainnet.json +++ b/data/addresses.mainnet.json @@ -118,6 +118,48 @@ "chain_name": "bsc_mainnet", "type": "zetaToken" }, + { + "address": "0x73cE2544d30A71D833C70D418FB5Ddf7a4A75455", + "category": "messaging", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "connector" + }, + { + "address": "0x69727Ef241ebD6e42Fc3A798092077069B415B2D", + "category": "omnichain", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "erc20Custody" + }, + { + "address": "0x7828F92E7d79E141189f24C98aceF71Bc07bad3f", + "category": "messaging", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "pauser" + }, + { + "address": "0x70e967acFcC17c3941E87562161406d41676FD83", + "category": "omnichain", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "tss" + }, + { + "address": "0x7828F92E7d79E141189f24C98aceF71Bc07bad3f", + "category": "omnichain", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "tssUpdater" + }, + { + "address": "0x2eff750c9D770BaBE6dBe84d05E40e4C65d7938d", + "category": "messaging", + "chain_id": 137, + "chain_name": "polygon_mainnet", + "type": "zetaToken" + }, { "address": "0x239e96c8f17C85c30100AC26F635Ea15f23E9c67", "category": "messaging", @@ -264,6 +306,19 @@ "symbol": "USDT.BSC", "type": "zrc20" }, + { + "address": "0xADF73ebA3Ebaa7254E859549A44c74eF7cff7501", + "asset": "", + "category": "omnichain", + "chain_id": 7000, + "chain_name": "zeta_mainnet", + "coin_type": "gas", + "decimals": 18, + "description": "ZetaChain ZRC20 Polygon POL-polygon_mainnet", + "foreign_chain_id": "137", + "symbol": "POL.POLYGON", + "type": "zrc20" + }, { "address": "0xcC683A782f4B30c138787CB5576a86AF66fdc31d", "asset": "0x6b175474e89094c44da98b954eedeac495271d0f", diff --git a/lib/types.ts b/lib/types.ts index c733dfed..5affdc02 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -1,4 +1,4 @@ -export type ParamSymbol = "USDC.BSC" | "USDC.ETH" | "BTC.BTC" | "PEPE.ETH" | "BNB.BSC" | "SHIB.ETH" | "USDT.ETH" | "USDT.BSC" | "DAI.ETH" | "ETH.ETH" | "sETH.SEPOLIA" | "USDC" | "gETH" | "tMATIC" | "tBTC" | "MATIC.AMOY" | "USDC.SEPOLIA" | "tBNB"; -export type ParamChainName = "eth_mainnet" | "bsc_mainnet" | "zeta_mainnet" | "btc_mainnet" | "bsc_testnet" | "zeta_testnet" | "btc_testnet" | "amoy_testnet" | "sepolia_testnet"; +export type ParamSymbol = "USDC.BSC" | "USDC.ETH" | "BTC.BTC" | "PEPE.ETH" | "BNB.BSC" | "SHIB.ETH" | "USDT.ETH" | "USDT.BSC" | "POL.POLYGON" | "DAI.ETH" | "ETH.ETH" | "sETH.SEPOLIA" | "USDC" | "gETH" | "tMATIC" | "tBTC" | "MATIC.AMOY" | "USDC.SEPOLIA" | "tBNB"; +export type ParamChainName = "eth_mainnet" | "bsc_mainnet" | "polygon_mainnet" | "zeta_mainnet" | "btc_mainnet" | "bsc_testnet" | "zeta_testnet" | "btc_testnet" | "amoy_testnet" | "sepolia_testnet"; export type ParamType = "connector" | "erc20Custody" | "pauser" | "tss" | "tssUpdater" | "uniswapV2Factory" | "uniswapV2Router02" | "uniswapV3Factory" | "uniswapV3Router" | "weth9" | "zetaToken" | "fungibleModule" | "systemContract" | "zrc20" | "zetaTokenConsumerUniV3"; diff --git a/package.json b/package.json index 852b6aee..03b75e05 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@uniswap/v2-core": "^1.0.1", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@uniswap/v3-periphery": "^1.4.3", - "@zetachain/networks": "^8.0.0", + "@zetachain/networks": "^9.0.0", "axios": "^1.6.5", "chai": "^4.3.6", "concurrently": "^8.2.2", diff --git a/pkg/contracts/prototypes/evm/erc20custodynew.sol/erc20custodynew.go b/pkg/contracts/prototypes/evm/erc20custodynew.sol/erc20custodynew.go index aa92c1f9..6438908b 100644 --- a/pkg/contracts/prototypes/evm/erc20custodynew.sol/erc20custodynew.go +++ b/pkg/contracts/prototypes/evm/erc20custodynew.sol/erc20custodynew.go @@ -31,8 +31,8 @@ var ( // ERC20CustodyNewMetaData contains all meta data concerning the ERC20CustodyNew contract. var ERC20CustodyNewMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200107f3803806200107f833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ee4806200019b6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063116191b61461005157806321fc65f21461006f578063c8a023621461008b578063d9caed12146100a7575b600080fd5b6100596100c3565b6040516100669190610b42565b60405180910390f35b610089600480360381019061008491906108af565b6100e9565b005b6100a560048036038101906100a091906108af565b61024b565b005b6100c160048036038101906100bc919061085c565b6103ad565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100f1610452565b61013e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b81526004016101a1959493929190610acb565b600060405180830381600087803b1580156101bb57600080fd5b505af11580156101cf573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023493929190610c1a565b60405180910390a3610244610528565b5050505050565b610253610452565b6102a0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8969bd486868686866040518663ffffffff1660e01b8152600401610303959493929190610acb565b600060405180830381600087803b15801561031d57600080fd5b505af1158015610331573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c885858560405161039693929190610c1a565b60405180910390a36103a6610528565b5050505050565b6103b5610452565b6103e082828573ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8360405161043d9190610bff565b60405180910390a361044d610528565b505050565b60026000541415610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90610bdf565b60405180910390fd5b6002600081905550565b6105238363a9059cbb60e01b84846040516024016104c1929190610b19565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b505050565b6001600081905550565b6000610594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166105f99092919063ffffffff16565b90506000815111156105f457808060200190518101906105b49190610937565b6105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610bbf565b60405180910390fd5b5b505050565b60606106088484600085610611565b90509392505050565b606082471015610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90610b7f565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161067f9190610ab4565b60006040518083038185875af1925050503d80600081146106bc576040519150601f19603f3d011682016040523d82523d6000602084013e6106c1565b606091505b50915091506106d2878383876106de565b92505050949350505050565b6060831561074157600083511415610739576106f985610754565b610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90610b9f565b60405180910390fd5b5b82905061074c565b61074b8383610777565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561078a5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be9190610b5d565b60405180910390fd5b6000813590506107d681610e69565b92915050565b6000815190506107eb81610e80565b92915050565b60008083601f84011261080757610806610d54565b5b8235905067ffffffffffffffff81111561082457610823610d4f565b5b6020830191508360018202830111156108405761083f610d59565b5b9250929050565b60008135905061085681610e97565b92915050565b60008060006060848603121561087557610874610d63565b5b6000610883868287016107c7565b9350506020610894868287016107c7565b92505060406108a586828701610847565b9150509250925092565b6000806000806000608086880312156108cb576108ca610d63565b5b60006108d9888289016107c7565b95505060206108ea888289016107c7565b94505060406108fb88828901610847565b935050606086013567ffffffffffffffff81111561091c5761091b610d5e565b5b610928888289016107f1565b92509250509295509295909350565b60006020828403121561094d5761094c610d63565b5b600061095b848285016107dc565b91505092915050565b61096d81610c8f565b82525050565b600061097f8385610c62565b935061098c838584610d0d565b61099583610d68565b840190509392505050565b60006109ab82610c4c565b6109b58185610c73565b93506109c5818560208601610d1c565b80840191505092915050565b6109da81610cd7565b82525050565b60006109eb82610c57565b6109f58185610c7e565b9350610a05818560208601610d1c565b610a0e81610d68565b840191505092915050565b6000610a26602683610c7e565b9150610a3182610d79565b604082019050919050565b6000610a49601d83610c7e565b9150610a5482610dc8565b602082019050919050565b6000610a6c602a83610c7e565b9150610a7782610df1565b604082019050919050565b6000610a8f601f83610c7e565b9150610a9a82610e40565b602082019050919050565b610aae81610ccd565b82525050565b6000610ac082846109a0565b915081905092915050565b6000608082019050610ae06000830188610964565b610aed6020830187610964565b610afa6040830186610aa5565b8181036060830152610b0d818486610973565b90509695505050505050565b6000604082019050610b2e6000830185610964565b610b3b6020830184610aa5565b9392505050565b6000602082019050610b5760008301846109d1565b92915050565b60006020820190508181036000830152610b7781846109e0565b905092915050565b60006020820190508181036000830152610b9881610a19565b9050919050565b60006020820190508181036000830152610bb881610a3c565b9050919050565b60006020820190508181036000830152610bd881610a5f565b9050919050565b60006020820190508181036000830152610bf881610a82565b9050919050565b6000602082019050610c146000830184610aa5565b92915050565b6000604082019050610c2f6000830186610aa5565b8181036020830152610c42818486610973565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c9a82610cad565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ce282610ce9565b9050919050565b6000610cf482610cfb565b9050919050565b6000610d0682610cad565b9050919050565b82818337600083830152505050565b60005b83811015610d3a578082015181840152602081019050610d1f565b83811115610d49576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e7281610c8f565b8114610e7d57600080fd5b50565b610e8981610ca1565b8114610e9457600080fd5b50565b610ea081610ccd565b8114610eab57600080fd5b5056fea264697066735822122004af522ce13639b271307b4d29ba4ac4a6b589721315ec5393584474746ecd2864736f6c63430008070033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040516200130d3803806200130d833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b6110e3806200022a6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063116191b61461005c57806321fc65f21461007a5780635b11259114610096578063c8a02362146100b4578063d9caed12146100d0575b600080fd5b6100646100ec565b6040516100719190610d41565b60405180910390f35b610094600480360381019061008f9190610a93565b610112565b005b61009e6102fb565b6040516100ab9190610caf565b60405180910390f35b6100ce60048036038101906100c99190610a93565b610321565b005b6100ea60048036038101906100e59190610a40565b61050a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61011a610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101a1576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ee600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b8152600401610251959493929190610cca565b600060405180830381600087803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8585856040516102e493929190610e19565b60405180910390a36102f461070c565b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610329610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b0576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8969bd486868686866040518663ffffffff1660e01b8152600401610460959493929190610cca565b600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88585856040516104f393929190610e19565b60405180910390a361050361070c565b5050505050565b610512610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610599576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c482828573ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516106219190610dfe565b60405180910390a361063161070c565b505050565b6002600054141561067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067390610dde565b60405180910390fd5b6002600081905550565b6107078363a9059cbb60e01b84846040516024016106a5929190610d18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610716565b505050565b6001600081905550565b6000610778826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107dd9092919063ffffffff16565b90506000815111156107d857808060200190518101906107989190610b1b565b6107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90610dbe565b60405180910390fd5b5b505050565b60606107ec84846000856107f5565b90509392505050565b60608247101561083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190610d7e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516108639190610c98565b60006040518083038185875af1925050503d80600081146108a0576040519150601f19603f3d011682016040523d82523d6000602084013e6108a5565b606091505b50915091506108b6878383876108c2565b92505050949350505050565b606083156109255760008351141561091d576108dd85610938565b61091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390610d9e565b60405180910390fd5b5b829050610930565b61092f838361095b565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561096e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29190610d5c565b60405180910390fd5b6000813590506109ba81611068565b92915050565b6000815190506109cf8161107f565b92915050565b60008083601f8401126109eb576109ea610f53565b5b8235905067ffffffffffffffff811115610a0857610a07610f4e565b5b602083019150836001820283011115610a2457610a23610f58565b5b9250929050565b600081359050610a3a81611096565b92915050565b600080600060608486031215610a5957610a58610f62565b5b6000610a67868287016109ab565b9350506020610a78868287016109ab565b9250506040610a8986828701610a2b565b9150509250925092565b600080600080600060808688031215610aaf57610aae610f62565b5b6000610abd888289016109ab565b9550506020610ace888289016109ab565b9450506040610adf88828901610a2b565b935050606086013567ffffffffffffffff811115610b0057610aff610f5d565b5b610b0c888289016109d5565b92509250509295509295909350565b600060208284031215610b3157610b30610f62565b5b6000610b3f848285016109c0565b91505092915050565b610b5181610e8e565b82525050565b6000610b638385610e61565b9350610b70838584610f0c565b610b7983610f67565b840190509392505050565b6000610b8f82610e4b565b610b998185610e72565b9350610ba9818560208601610f1b565b80840191505092915050565b610bbe81610ed6565b82525050565b6000610bcf82610e56565b610bd98185610e7d565b9350610be9818560208601610f1b565b610bf281610f67565b840191505092915050565b6000610c0a602683610e7d565b9150610c1582610f78565b604082019050919050565b6000610c2d601d83610e7d565b9150610c3882610fc7565b602082019050919050565b6000610c50602a83610e7d565b9150610c5b82610ff0565b604082019050919050565b6000610c73601f83610e7d565b9150610c7e8261103f565b602082019050919050565b610c9281610ecc565b82525050565b6000610ca48284610b84565b915081905092915050565b6000602082019050610cc46000830184610b48565b92915050565b6000608082019050610cdf6000830188610b48565b610cec6020830187610b48565b610cf96040830186610c89565b8181036060830152610d0c818486610b57565b90509695505050505050565b6000604082019050610d2d6000830185610b48565b610d3a6020830184610c89565b9392505050565b6000602082019050610d566000830184610bb5565b92915050565b60006020820190508181036000830152610d768184610bc4565b905092915050565b60006020820190508181036000830152610d9781610bfd565b9050919050565b60006020820190508181036000830152610db781610c20565b9050919050565b60006020820190508181036000830152610dd781610c43565b9050919050565b60006020820190508181036000830152610df781610c66565b9050919050565b6000602082019050610e136000830184610c89565b92915050565b6000604082019050610e2e6000830186610c89565b8181036020830152610e41818486610b57565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610e9982610eac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ee182610ee8565b9050919050565b6000610ef382610efa565b9050919050565b6000610f0582610eac565b9050919050565b82818337600083830152505050565b60005b83811015610f39578082015181840152602081019050610f1e565b83811115610f48576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61107181610e8e565b811461107c57600080fd5b50565b61108881610ea0565b811461109357600080fd5b50565b61109f81610ecc565b81146110aa57600080fd5b5056fea264697066735822122044d7b7350c040f6f061e6eaa0b8afe75af494d90bcf301dc70592c8d6e1c014564736f6c63430008070033", } // ERC20CustodyNewABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ERC20CustodyNewABI = ERC20CustodyNewMetaData.ABI var ERC20CustodyNewBin = ERC20CustodyNewMetaData.Bin // DeployERC20CustodyNew deploys a new Ethereum contract, binding an instance of ERC20CustodyNew to it. -func DeployERC20CustodyNew(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address) (common.Address, *types.Transaction, *ERC20CustodyNew, error) { +func DeployERC20CustodyNew(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _tssAddress common.Address) (common.Address, *types.Transaction, *ERC20CustodyNew, error) { parsed, err := ERC20CustodyNewMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployERC20CustodyNew(auth *bind.TransactOpts, backend bind.ContractBackend return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyNewBin), backend, _gateway) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ERC20CustodyNewBin), backend, _gateway, _tssAddress) if err != nil { return common.Address{}, nil, nil, err } @@ -233,6 +233,37 @@ func (_ERC20CustodyNew *ERC20CustodyNewCallerSession) Gateway() (common.Address, return _ERC20CustodyNew.Contract.Gateway(&_ERC20CustodyNew.CallOpts) } +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyNew *ERC20CustodyNewCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ERC20CustodyNew.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyNew *ERC20CustodyNewSession) TssAddress() (common.Address, error) { + return _ERC20CustodyNew.Contract.TssAddress(&_ERC20CustodyNew.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ERC20CustodyNew *ERC20CustodyNewCallerSession) TssAddress() (common.Address, error) { + return _ERC20CustodyNew.Contract.TssAddress(&_ERC20CustodyNew.CallOpts) +} + // Withdraw is a paid mutator transaction binding the contract method 0xd9caed12. // // Solidity: function withdraw(address token, address to, uint256 amount) returns() diff --git a/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go b/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go index 13dd70da..f6538886 100644 --- a/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go +++ b/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go @@ -31,8 +31,8 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108782611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220062def546691dc60b8b2347c044e9cea9bd00dadb4eab14ae756bd185359a69964736f6c63430008070033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c6140266200024360003960008181610b3c01528181610bcb01528181610f3501528181610fc4015261140701526140266000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612f0a565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612fff565b610647565b005b6101a660048036038101906101a19190612fff565b6106b3565b6040516101b391906136b5565b60405180910390f35b3480156101c857600080fd5b506101d16107a8565b6040516101de91906135d2565b60405180910390f35b61020160048036038101906101fc9190612fff565b6107ce565b005b61021d60048036038101906102189190612fff565b610948565b005b34801561022b57600080fd5b5061024660048036038101906102419190612f0a565b610b3a565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612f37565b610cc3565b005b61028b6004803603810190610286919061305f565b610f33565b005b34801561029957600080fd5b506102b460048036038101906102af9190612f77565b611070565b005b3480156102c257600080fd5b506102cb611403565b6040516102d89190613676565b60405180910390f35b3480156102ed57600080fd5b506102f66114bc565b60405161030391906135d2565b60405180910390f35b34801561031857600080fd5b506103216114e2565b60405161032e91906135d2565b60405180910390f35b34801561034357600080fd5b5061034c611508565b005b34801561035a57600080fd5b506103756004803603810190610370919061310e565b61151c565b005b34801561038357600080fd5b5061038c6115d4565b60405161039991906135d2565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612f0a565b6115fe565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612f77565b6117b8565b005b34801561040057600080fd5b506104096119ee565b60405161041691906135d2565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f0a565b611a14565b005b610462600480360381019061045d9190612f0a565b611a98565b005b34801561047057600080fd5b5061048b600480360381019061048691906130bb565b611c0c565b005b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610514576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461059c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610603576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516106a6929190613691565b60405180910390a3505050565b606060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610749858585611cbe565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516107959392919061396b565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415610809576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610851906135bd565b60006040518083038185875af1925050503d806000811461088e576040519150601f19603f3d011682016040523d82523d6000602084013e610893565b606091505b505090506000151581151514156108d6576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161093a94939291906138ef565b60405180910390a350505050565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109cf576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16346040516109f6906135bd565b60006040518083038185875af1925050503d8060008114610a33576040519150601f19603f3d011682016040523d82523d6000602084013e610a38565b606091505b509150915081610a74576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b8152600401610aaf929190613691565b600060405180830381600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610b2b9392919061396b565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613734565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c08611d75565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613754565b60405180910390fd5b610c6781611dcc565b610cc081600067ffffffffffffffff811115610c8657610c85613b2c565b5b6040519080825280601f01601f191660200182016040528015610cb85781602001600182028036833780820191505090505b506000611dd7565b50565b60008060019054906101000a900460ff16159050808015610cf45750600160008054906101000a900460ff1660ff16105b80610d215750610d0330611f54565b158015610d205750600160008054906101000a900460ff1660ff16145b5b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610d9d576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e045750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610e3b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e43611f77565b610e4b611fd0565b610e53612021565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610f2e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f2591906136d7565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990613734565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611001611d75565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90613754565b60405180910390fd5b61106082611dcc565b61106c82826001611dd7565b5050565b61107861207a565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611124575060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561115b576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415611196576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a085856120ca565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b815260040161121192919061364d565b602060405180830381600087803b15801561122b57600080fd5b505af115801561123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112639190613196565b611299576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112a6858484611cbe565b90506112b286866120ca565b6112e8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161132391906135d2565b60206040518083038186803b15801561133b57600080fd5b505afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906131f0565b90506000811115611389576113888782612162565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516113ea9392919061396b565b60405180910390a350506113fc61234c565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613794565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611510612356565b61151a60006123d4565b565b6000841415611557576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61156233848661249a565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516115c594939291906138ef565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611685576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611774576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117c061207a565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561186c575060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156118a3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156118de576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190984848773ffffffffffffffffffffffffffffffffffffffff166126b49092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b8152600401611944929190613691565b600060405180830381600087803b15801561195e57600080fd5b505af1158015611972573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516119d79392919061396b565b60405180910390a36119e761234c565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c612356565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613714565b60405180910390fd5b611a95816123d4565b50565b6000341415611ad3576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611b1b906135bd565b60006040518083038185875af1925050503d8060008114611b58576040519150601f19603f3d011682016040523d82523d6000602084013e611b5d565b606091505b50509050600015158115151415611ba0576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000604051611c0092919061392f565b60405180910390a35050565b6000821415611c47576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c5233828461249a565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48484604051611cb192919061392f565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16348686604051611ceb92919061358d565b60006040518083038185875af1925050503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b509150915081611d69576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b6000611da37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61273a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dd4612356565b50565b611e037f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612744565b60000160009054906101000a900460ff1615611e2757611e228361274e565b611f4f565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6d57600080fd5b505afa925050508015611e9e57506040513d601f19601f82011682018060405250810190611e9b91906131c3565b60015b611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906137f4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906137b4565b60405180910390fd5b50611f4e838383612807565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd90613874565b60405180910390fd5b611fce612833565b565b600060019054906101000a900460ff1661201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613874565b60405180910390fd5b565b600060019054906101000a900460ff16612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790613874565b60405180910390fd5b612078612894565b565b600260c95414156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906138b4565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401612108929190613624565b602060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190613196565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fa578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161221592919061364d565b602060405180830381600087803b15801561222f57600080fd5b505af1158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613196565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b81526004016122c391906138d4565b600060405180830381600087803b1580156122dd57600080fd5b505af11580156122f1573d6000803e3d6000fd5b50505050612348565b61234760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166126b49092919063ffffffff16565b5b5050565b600160c981905550565b61235e6128ed565b73ffffffffffffffffffffffffffffffffffffffff1661237c6115d4565b73ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990613834565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265f5761251d8330838573ffffffffffffffffffffffffffffffffffffffff166128f5909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161257a92919061364d565b602060405180830381600087803b15801561259457600080fd5b505af11580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190613196565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161262891906138d4565b600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b505050506126af565b6126ae8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff166128f5909392919063ffffffff16565b5b505050565b6127358363a9059cbb60e01b84846040516024016126d392919061364d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061297e565b505050565b6000819050919050565b6000819050919050565b61275781611f54565b612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90613814565b60405180910390fd5b806127c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61273a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61281083612a45565b60008251118061281d5750805b1561282e5761282c8383612a94565b505b505050565b600060019054906101000a900460ff16612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287990613874565b60405180910390fd5b61289261288d6128ed565b6123d4565b565b600060019054906101000a900460ff166128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90613874565b60405180910390fd5b600160c981905550565b600033905090565b612978846323b872dd60e01b858585604051602401612916939291906135ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061297e565b50505050565b60006129e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ac19092919063ffffffff16565b9050600081511115612a405780806020019051810190612a009190613196565b612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3690613894565b60405180910390fd5b5b505050565b612a4e8161274e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060612ab98383604051806060016040528060278152602001613fca60279139612ad9565b905092915050565b6060612ad08484600085612b5f565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051612b0391906135a6565b600060405180830381855af49150503d8060008114612b3e576040519150601f19603f3d011682016040523d82523d6000602084013e612b43565b606091505b5091509150612b5486838387612c2c565b925050509392505050565b606082471015612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90613774565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612bcd91906135a6565b60006040518083038185875af1925050503d8060008114612c0a576040519150601f19603f3d011682016040523d82523d6000602084013e612c0f565b606091505b5091509150612c2087838387612ca2565b92505050949350505050565b60608315612c8f57600083511415612c8757612c4785611f54565b612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d90613854565b60405180910390fd5b5b829050612c9a565b612c998383612d18565b5b949350505050565b60608315612d0557600083511415612cfd57612cbd85612d68565b612cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf390613854565b60405180910390fd5b5b829050612d10565b612d0f8383612d8b565b5b949350505050565b600082511115612d2b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f91906136f2565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115612d9e5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd291906136f2565b60405180910390fd5b6000612dee612de9846139c2565b61399d565b905082815260208101848484011115612e0a57612e09613b6a565b5b612e15848285613ab9565b509392505050565b600081359050612e2c81613f6d565b92915050565b600081519050612e4181613f84565b92915050565b600081519050612e5681613f9b565b92915050565b60008083601f840112612e7257612e71613b60565b5b8235905067ffffffffffffffff811115612e8f57612e8e613b5b565b5b602083019150836001820283011115612eab57612eaa613b65565b5b9250929050565b600082601f830112612ec757612ec6613b60565b5b8135612ed7848260208601612ddb565b91505092915050565b600081359050612eef81613fb2565b92915050565b600081519050612f0481613fb2565b92915050565b600060208284031215612f2057612f1f613b74565b5b6000612f2e84828501612e1d565b91505092915050565b60008060408385031215612f4e57612f4d613b74565b5b6000612f5c85828601612e1d565b9250506020612f6d85828601612e1d565b9150509250929050565b600080600080600060808688031215612f9357612f92613b74565b5b6000612fa188828901612e1d565b9550506020612fb288828901612e1d565b9450506040612fc388828901612ee0565b935050606086013567ffffffffffffffff811115612fe457612fe3613b6f565b5b612ff088828901612e5c565b92509250509295509295909350565b60008060006040848603121561301857613017613b74565b5b600061302686828701612e1d565b935050602084013567ffffffffffffffff81111561304757613046613b6f565b5b61305386828701612e5c565b92509250509250925092565b6000806040838503121561307657613075613b74565b5b600061308485828601612e1d565b925050602083013567ffffffffffffffff8111156130a5576130a4613b6f565b5b6130b185828601612eb2565b9150509250929050565b6000806000606084860312156130d4576130d3613b74565b5b60006130e286828701612e1d565b93505060206130f386828701612ee0565b925050604061310486828701612e1d565b9150509250925092565b60008060008060006080868803121561312a57613129613b74565b5b600061313888828901612e1d565b955050602061314988828901612ee0565b945050604061315a88828901612e1d565b935050606086013567ffffffffffffffff81111561317b5761317a613b6f565b5b61318788828901612e5c565b92509250509295509295909350565b6000602082840312156131ac576131ab613b74565b5b60006131ba84828501612e32565b91505092915050565b6000602082840312156131d9576131d8613b74565b5b60006131e784828501612e47565b91505092915050565b60006020828403121561320657613205613b74565b5b600061321484828501612ef5565b91505092915050565b61322681613a36565b82525050565b61323581613a54565b82525050565b60006132478385613a09565b9350613254838584613ab9565b61325d83613b79565b840190509392505050565b60006132748385613a1a565b9350613281838584613ab9565b82840190509392505050565b6000613298826139f3565b6132a28185613a09565b93506132b2818560208601613ac8565b6132bb81613b79565b840191505092915050565b60006132d1826139f3565b6132db8185613a1a565b93506132eb818560208601613ac8565b80840191505092915050565b61330081613a95565b82525050565b61330f81613aa7565b82525050565b6000613320826139fe565b61332a8185613a25565b935061333a818560208601613ac8565b61334381613b79565b840191505092915050565b600061335b602683613a25565b915061336682613b8a565b604082019050919050565b600061337e602c83613a25565b915061338982613bd9565b604082019050919050565b60006133a1602c83613a25565b91506133ac82613c28565b604082019050919050565b60006133c4602683613a25565b91506133cf82613c77565b604082019050919050565b60006133e7603883613a25565b91506133f282613cc6565b604082019050919050565b600061340a602983613a25565b915061341582613d15565b604082019050919050565b600061342d602e83613a25565b915061343882613d64565b604082019050919050565b6000613450602e83613a25565b915061345b82613db3565b604082019050919050565b6000613473602d83613a25565b915061347e82613e02565b604082019050919050565b6000613496602083613a25565b91506134a182613e51565b602082019050919050565b60006134b9600083613a09565b91506134c482613e7a565b600082019050919050565b60006134dc600083613a1a565b91506134e782613e7a565b600082019050919050565b60006134ff601d83613a25565b915061350a82613e7d565b602082019050919050565b6000613522602b83613a25565b915061352d82613ea6565b604082019050919050565b6000613545602a83613a25565b915061355082613ef5565b604082019050919050565b6000613568601f83613a25565b915061357382613f44565b602082019050919050565b61358781613a7e565b82525050565b600061359a828486613268565b91508190509392505050565b60006135b282846132c6565b915081905092915050565b60006135c8826134cf565b9150819050919050565b60006020820190506135e7600083018461321d565b92915050565b6000606082019050613602600083018661321d565b61360f602083018561321d565b61361c604083018461357e565b949350505050565b6000604082019050613639600083018561321d565b61364660208301846132f7565b9392505050565b6000604082019050613662600083018561321d565b61366f602083018461357e565b9392505050565b600060208201905061368b600083018461322c565b92915050565b600060208201905081810360008301526136ac81848661323b565b90509392505050565b600060208201905081810360008301526136cf818461328d565b905092915050565b60006020820190506136ec6000830184613306565b92915050565b6000602082019050818103600083015261370c8184613315565b905092915050565b6000602082019050818103600083015261372d8161334e565b9050919050565b6000602082019050818103600083015261374d81613371565b9050919050565b6000602082019050818103600083015261376d81613394565b9050919050565b6000602082019050818103600083015261378d816133b7565b9050919050565b600060208201905081810360008301526137ad816133da565b9050919050565b600060208201905081810360008301526137cd816133fd565b9050919050565b600060208201905081810360008301526137ed81613420565b9050919050565b6000602082019050818103600083015261380d81613443565b9050919050565b6000602082019050818103600083015261382d81613466565b9050919050565b6000602082019050818103600083015261384d81613489565b9050919050565b6000602082019050818103600083015261386d816134f2565b9050919050565b6000602082019050818103600083015261388d81613515565b9050919050565b600060208201905081810360008301526138ad81613538565b9050919050565b600060208201905081810360008301526138cd8161355b565b9050919050565b60006020820190506138e9600083018461357e565b92915050565b6000606082019050613904600083018761357e565b613911602083018661321d565b818103604083015261392481848661323b565b905095945050505050565b6000606082019050613944600083018561357e565b613951602083018461321d565b8181036040830152613962816134ac565b90509392505050565b6000604082019050613980600083018661357e565b818103602083015261399381848661323b565b9050949350505050565b60006139a76139b8565b90506139b38282613afb565b919050565b6000604051905090565b600067ffffffffffffffff8211156139dd576139dc613b2c565b5b6139e682613b79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613a4182613a5e565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613aa082613a7e565b9050919050565b6000613ab282613a88565b9050919050565b82818337600083830152505050565b60005b83811015613ae6578082015181840152602081019050613acb565b83811115613af5576000848401525b50505050565b613b0482613b79565b810181811067ffffffffffffffff82111715613b2357613b22613b2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613f7681613a36565b8114613f8157600080fd5b50565b613f8d81613a48565b8114613f9857600080fd5b50565b613fa481613a54565b8114613faf57600080fd5b50565b613fbb81613a7e565b8114613fc657600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4d187c762f40390aee121e3267997df07017a0032a9b500d43abd12e540b6bd64736f6c63430008070033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 33a46b99..fe03c8af 100644 --- a/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -31,8 +31,8 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a620a8f5e1407bdf259d6a98d79803d9d2c249529f99712b2a74e1bc0a940a664736f6c63430008070033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207506291c2cc1340a6799328d29a82686f260d59d78d6f67136dac5bd6578979464736f6c63430008070033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewerrors.go b/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewerrors.go new file mode 100644 index 00000000..d3f0af38 --- /dev/null +++ b/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewerrors.go @@ -0,0 +1,181 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ierc20custodynew + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IERC20CustodyNewErrorsMetaData contains all meta data concerning the IERC20CustodyNewErrors contract. +var IERC20CustodyNewErrorsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"}]", +} + +// IERC20CustodyNewErrorsABI is the input ABI used to generate the binding from. +// Deprecated: Use IERC20CustodyNewErrorsMetaData.ABI instead. +var IERC20CustodyNewErrorsABI = IERC20CustodyNewErrorsMetaData.ABI + +// IERC20CustodyNewErrors is an auto generated Go binding around an Ethereum contract. +type IERC20CustodyNewErrors struct { + IERC20CustodyNewErrorsCaller // Read-only binding to the contract + IERC20CustodyNewErrorsTransactor // Write-only binding to the contract + IERC20CustodyNewErrorsFilterer // Log filterer for contract events +} + +// IERC20CustodyNewErrorsCaller is an auto generated read-only Go binding around an Ethereum contract. +type IERC20CustodyNewErrorsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewErrorsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IERC20CustodyNewErrorsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewErrorsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IERC20CustodyNewErrorsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewErrorsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IERC20CustodyNewErrorsSession struct { + Contract *IERC20CustodyNewErrors // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyNewErrorsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IERC20CustodyNewErrorsCallerSession struct { + Contract *IERC20CustodyNewErrorsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IERC20CustodyNewErrorsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IERC20CustodyNewErrorsTransactorSession struct { + Contract *IERC20CustodyNewErrorsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyNewErrorsRaw is an auto generated low-level Go binding around an Ethereum contract. +type IERC20CustodyNewErrorsRaw struct { + Contract *IERC20CustodyNewErrors // Generic contract binding to access the raw methods on +} + +// IERC20CustodyNewErrorsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IERC20CustodyNewErrorsCallerRaw struct { + Contract *IERC20CustodyNewErrorsCaller // Generic read-only contract binding to access the raw methods on +} + +// IERC20CustodyNewErrorsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IERC20CustodyNewErrorsTransactorRaw struct { + Contract *IERC20CustodyNewErrorsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIERC20CustodyNewErrors creates a new instance of IERC20CustodyNewErrors, bound to a specific deployed contract. +func NewIERC20CustodyNewErrors(address common.Address, backend bind.ContractBackend) (*IERC20CustodyNewErrors, error) { + contract, err := bindIERC20CustodyNewErrors(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IERC20CustodyNewErrors{IERC20CustodyNewErrorsCaller: IERC20CustodyNewErrorsCaller{contract: contract}, IERC20CustodyNewErrorsTransactor: IERC20CustodyNewErrorsTransactor{contract: contract}, IERC20CustodyNewErrorsFilterer: IERC20CustodyNewErrorsFilterer{contract: contract}}, nil +} + +// NewIERC20CustodyNewErrorsCaller creates a new read-only instance of IERC20CustodyNewErrors, bound to a specific deployed contract. +func NewIERC20CustodyNewErrorsCaller(address common.Address, caller bind.ContractCaller) (*IERC20CustodyNewErrorsCaller, error) { + contract, err := bindIERC20CustodyNewErrors(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyNewErrorsCaller{contract: contract}, nil +} + +// NewIERC20CustodyNewErrorsTransactor creates a new write-only instance of IERC20CustodyNewErrors, bound to a specific deployed contract. +func NewIERC20CustodyNewErrorsTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20CustodyNewErrorsTransactor, error) { + contract, err := bindIERC20CustodyNewErrors(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyNewErrorsTransactor{contract: contract}, nil +} + +// NewIERC20CustodyNewErrorsFilterer creates a new log filterer instance of IERC20CustodyNewErrors, bound to a specific deployed contract. +func NewIERC20CustodyNewErrorsFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20CustodyNewErrorsFilterer, error) { + contract, err := bindIERC20CustodyNewErrors(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IERC20CustodyNewErrorsFilterer{contract: contract}, nil +} + +// bindIERC20CustodyNewErrors binds a generic wrapper to an already deployed contract. +func bindIERC20CustodyNewErrors(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IERC20CustodyNewErrorsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20CustodyNewErrors.Contract.IERC20CustodyNewErrorsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20CustodyNewErrors.Contract.IERC20CustodyNewErrorsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20CustodyNewErrors.Contract.IERC20CustodyNewErrorsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20CustodyNewErrors.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20CustodyNewErrors.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20CustodyNewErrors *IERC20CustodyNewErrorsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20CustodyNewErrors.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewevents.go b/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewevents.go new file mode 100644 index 00000000..bae33183 --- /dev/null +++ b/pkg/contracts/prototypes/evm/ierc20custodynew.sol/ierc20custodynewevents.go @@ -0,0 +1,645 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ierc20custodynew + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IERC20CustodyNewEventsMetaData contains all meta data concerning the IERC20CustodyNewEvents contract. +var IERC20CustodyNewEventsMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"}]", +} + +// IERC20CustodyNewEventsABI is the input ABI used to generate the binding from. +// Deprecated: Use IERC20CustodyNewEventsMetaData.ABI instead. +var IERC20CustodyNewEventsABI = IERC20CustodyNewEventsMetaData.ABI + +// IERC20CustodyNewEvents is an auto generated Go binding around an Ethereum contract. +type IERC20CustodyNewEvents struct { + IERC20CustodyNewEventsCaller // Read-only binding to the contract + IERC20CustodyNewEventsTransactor // Write-only binding to the contract + IERC20CustodyNewEventsFilterer // Log filterer for contract events +} + +// IERC20CustodyNewEventsCaller is an auto generated read-only Go binding around an Ethereum contract. +type IERC20CustodyNewEventsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewEventsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IERC20CustodyNewEventsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewEventsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IERC20CustodyNewEventsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IERC20CustodyNewEventsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IERC20CustodyNewEventsSession struct { + Contract *IERC20CustodyNewEvents // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyNewEventsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IERC20CustodyNewEventsCallerSession struct { + Contract *IERC20CustodyNewEventsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IERC20CustodyNewEventsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IERC20CustodyNewEventsTransactorSession struct { + Contract *IERC20CustodyNewEventsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IERC20CustodyNewEventsRaw is an auto generated low-level Go binding around an Ethereum contract. +type IERC20CustodyNewEventsRaw struct { + Contract *IERC20CustodyNewEvents // Generic contract binding to access the raw methods on +} + +// IERC20CustodyNewEventsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IERC20CustodyNewEventsCallerRaw struct { + Contract *IERC20CustodyNewEventsCaller // Generic read-only contract binding to access the raw methods on +} + +// IERC20CustodyNewEventsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IERC20CustodyNewEventsTransactorRaw struct { + Contract *IERC20CustodyNewEventsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIERC20CustodyNewEvents creates a new instance of IERC20CustodyNewEvents, bound to a specific deployed contract. +func NewIERC20CustodyNewEvents(address common.Address, backend bind.ContractBackend) (*IERC20CustodyNewEvents, error) { + contract, err := bindIERC20CustodyNewEvents(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEvents{IERC20CustodyNewEventsCaller: IERC20CustodyNewEventsCaller{contract: contract}, IERC20CustodyNewEventsTransactor: IERC20CustodyNewEventsTransactor{contract: contract}, IERC20CustodyNewEventsFilterer: IERC20CustodyNewEventsFilterer{contract: contract}}, nil +} + +// NewIERC20CustodyNewEventsCaller creates a new read-only instance of IERC20CustodyNewEvents, bound to a specific deployed contract. +func NewIERC20CustodyNewEventsCaller(address common.Address, caller bind.ContractCaller) (*IERC20CustodyNewEventsCaller, error) { + contract, err := bindIERC20CustodyNewEvents(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsCaller{contract: contract}, nil +} + +// NewIERC20CustodyNewEventsTransactor creates a new write-only instance of IERC20CustodyNewEvents, bound to a specific deployed contract. +func NewIERC20CustodyNewEventsTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20CustodyNewEventsTransactor, error) { + contract, err := bindIERC20CustodyNewEvents(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsTransactor{contract: contract}, nil +} + +// NewIERC20CustodyNewEventsFilterer creates a new log filterer instance of IERC20CustodyNewEvents, bound to a specific deployed contract. +func NewIERC20CustodyNewEventsFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20CustodyNewEventsFilterer, error) { + contract, err := bindIERC20CustodyNewEvents(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsFilterer{contract: contract}, nil +} + +// bindIERC20CustodyNewEvents binds a generic wrapper to an already deployed contract. +func bindIERC20CustodyNewEvents(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IERC20CustodyNewEventsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20CustodyNewEvents.Contract.IERC20CustodyNewEventsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20CustodyNewEvents.Contract.IERC20CustodyNewEventsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20CustodyNewEvents.Contract.IERC20CustodyNewEventsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IERC20CustodyNewEvents.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IERC20CustodyNewEvents.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IERC20CustodyNewEvents.Contract.contract.Transact(opts, method, params...) +} + +// IERC20CustodyNewEventsWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdrawIterator struct { + Event *IERC20CustodyNewEventsWithdraw // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyNewEventsWithdrawIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyNewEventsWithdrawIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyNewEventsWithdrawIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyNewEventsWithdraw represents a Withdraw event raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdraw struct { + Token common.Address + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdraw is a free log retrieval operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) FilterWithdraw(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyNewEventsWithdrawIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.FilterLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsWithdrawIterator{contract: _IERC20CustodyNewEvents.contract, event: "Withdraw", logs: logs, sub: sub}, nil +} + +// WatchWithdraw is a free log subscription operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *IERC20CustodyNewEventsWithdraw, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.WatchLogs(opts, "Withdraw", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyNewEventsWithdraw) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "Withdraw", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdraw is a log parse operation binding the contract event 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb. +// +// Solidity: event Withdraw(address indexed token, address indexed to, uint256 amount) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) ParseWithdraw(log types.Log) (*IERC20CustodyNewEventsWithdraw, error) { + event := new(IERC20CustodyNewEventsWithdraw) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "Withdraw", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyNewEventsWithdrawAndCallIterator is returned from FilterWithdrawAndCall and is used to iterate over the raw logs and unpacked data for WithdrawAndCall events raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdrawAndCallIterator struct { + Event *IERC20CustodyNewEventsWithdrawAndCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyNewEventsWithdrawAndCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyNewEventsWithdrawAndCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyNewEventsWithdrawAndCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyNewEventsWithdrawAndCall represents a WithdrawAndCall event raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdrawAndCall struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndCall is a free log retrieval operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) FilterWithdrawAndCall(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyNewEventsWithdrawAndCallIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.FilterLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsWithdrawAndCallIterator{contract: _IERC20CustodyNewEvents.contract, event: "WithdrawAndCall", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndCall is a free log subscription operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) WatchWithdrawAndCall(opts *bind.WatchOpts, sink chan<- *IERC20CustodyNewEventsWithdrawAndCall, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.WatchLogs(opts, "WithdrawAndCall", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyNewEventsWithdrawAndCall) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndCall is a log parse operation binding the contract event 0x85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e. +// +// Solidity: event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) ParseWithdrawAndCall(log types.Log) (*IERC20CustodyNewEventsWithdrawAndCall, error) { + event := new(IERC20CustodyNewEventsWithdrawAndCall) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IERC20CustodyNewEventsWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdrawAndRevertIterator struct { + Event *IERC20CustodyNewEventsWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IERC20CustodyNewEventsWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IERC20CustodyNewEventsWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IERC20CustodyNewEventsWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IERC20CustodyNewEventsWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IERC20CustodyNewEventsWithdrawAndRevert represents a WithdrawAndRevert event raised by the IERC20CustodyNewEvents contract. +type IERC20CustodyNewEventsWithdrawAndRevert struct { + Token common.Address + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*IERC20CustodyNewEventsWithdrawAndRevertIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.FilterLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return &IERC20CustodyNewEventsWithdrawAndRevertIterator{contract: _IERC20CustodyNewEvents.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *IERC20CustodyNewEventsWithdrawAndRevert, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IERC20CustodyNewEvents.contract.WatchLogs(opts, "WithdrawAndRevert", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IERC20CustodyNewEventsWithdrawAndRevert) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c8. +// +// Solidity: event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data) +func (_IERC20CustodyNewEvents *IERC20CustodyNewEventsFilterer) ParseWithdrawAndRevert(log types.Log) (*IERC20CustodyNewEventsWithdrawAndRevert, error) { + event := new(IERC20CustodyNewEventsWithdrawAndRevert) + if err := _IERC20CustodyNewEvents.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/igatewayevm.sol/igatewayevmerrors.go b/pkg/contracts/prototypes/evm/igatewayevm.sol/igatewayevmerrors.go index d4c84c67..5b894d97 100644 --- a/pkg/contracts/prototypes/evm/igatewayevm.sol/igatewayevmerrors.go +++ b/pkg/contracts/prototypes/evm/igatewayevm.sol/igatewayevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMErrorsMetaData contains all meta data concerning the IGatewayEVMErrors contract. var IGatewayEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"}]", } // IGatewayEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/izetaconnector.sol/izetaconnectorevents.go b/pkg/contracts/prototypes/evm/izetaconnector.sol/izetaconnectorevents.go new file mode 100644 index 00000000..ecd0bb09 --- /dev/null +++ b/pkg/contracts/prototypes/evm/izetaconnector.sol/izetaconnectorevents.go @@ -0,0 +1,618 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package izetaconnector + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IZetaConnectorEventsMetaData contains all meta data concerning the IZetaConnectorEvents contract. +var IZetaConnectorEventsMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"}]", +} + +// IZetaConnectorEventsABI is the input ABI used to generate the binding from. +// Deprecated: Use IZetaConnectorEventsMetaData.ABI instead. +var IZetaConnectorEventsABI = IZetaConnectorEventsMetaData.ABI + +// IZetaConnectorEvents is an auto generated Go binding around an Ethereum contract. +type IZetaConnectorEvents struct { + IZetaConnectorEventsCaller // Read-only binding to the contract + IZetaConnectorEventsTransactor // Write-only binding to the contract + IZetaConnectorEventsFilterer // Log filterer for contract events +} + +// IZetaConnectorEventsCaller is an auto generated read-only Go binding around an Ethereum contract. +type IZetaConnectorEventsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IZetaConnectorEventsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IZetaConnectorEventsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IZetaConnectorEventsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IZetaConnectorEventsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IZetaConnectorEventsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IZetaConnectorEventsSession struct { + Contract *IZetaConnectorEvents // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IZetaConnectorEventsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IZetaConnectorEventsCallerSession struct { + Contract *IZetaConnectorEventsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IZetaConnectorEventsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IZetaConnectorEventsTransactorSession struct { + Contract *IZetaConnectorEventsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IZetaConnectorEventsRaw is an auto generated low-level Go binding around an Ethereum contract. +type IZetaConnectorEventsRaw struct { + Contract *IZetaConnectorEvents // Generic contract binding to access the raw methods on +} + +// IZetaConnectorEventsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IZetaConnectorEventsCallerRaw struct { + Contract *IZetaConnectorEventsCaller // Generic read-only contract binding to access the raw methods on +} + +// IZetaConnectorEventsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IZetaConnectorEventsTransactorRaw struct { + Contract *IZetaConnectorEventsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIZetaConnectorEvents creates a new instance of IZetaConnectorEvents, bound to a specific deployed contract. +func NewIZetaConnectorEvents(address common.Address, backend bind.ContractBackend) (*IZetaConnectorEvents, error) { + contract, err := bindIZetaConnectorEvents(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IZetaConnectorEvents{IZetaConnectorEventsCaller: IZetaConnectorEventsCaller{contract: contract}, IZetaConnectorEventsTransactor: IZetaConnectorEventsTransactor{contract: contract}, IZetaConnectorEventsFilterer: IZetaConnectorEventsFilterer{contract: contract}}, nil +} + +// NewIZetaConnectorEventsCaller creates a new read-only instance of IZetaConnectorEvents, bound to a specific deployed contract. +func NewIZetaConnectorEventsCaller(address common.Address, caller bind.ContractCaller) (*IZetaConnectorEventsCaller, error) { + contract, err := bindIZetaConnectorEvents(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsCaller{contract: contract}, nil +} + +// NewIZetaConnectorEventsTransactor creates a new write-only instance of IZetaConnectorEvents, bound to a specific deployed contract. +func NewIZetaConnectorEventsTransactor(address common.Address, transactor bind.ContractTransactor) (*IZetaConnectorEventsTransactor, error) { + contract, err := bindIZetaConnectorEvents(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsTransactor{contract: contract}, nil +} + +// NewIZetaConnectorEventsFilterer creates a new log filterer instance of IZetaConnectorEvents, bound to a specific deployed contract. +func NewIZetaConnectorEventsFilterer(address common.Address, filterer bind.ContractFilterer) (*IZetaConnectorEventsFilterer, error) { + contract, err := bindIZetaConnectorEvents(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsFilterer{contract: contract}, nil +} + +// bindIZetaConnectorEvents binds a generic wrapper to an already deployed contract. +func bindIZetaConnectorEvents(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IZetaConnectorEventsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IZetaConnectorEvents *IZetaConnectorEventsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IZetaConnectorEvents.Contract.IZetaConnectorEventsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IZetaConnectorEvents *IZetaConnectorEventsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IZetaConnectorEvents.Contract.IZetaConnectorEventsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IZetaConnectorEvents *IZetaConnectorEventsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IZetaConnectorEvents.Contract.IZetaConnectorEventsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IZetaConnectorEvents *IZetaConnectorEventsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IZetaConnectorEvents.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IZetaConnectorEvents *IZetaConnectorEventsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IZetaConnectorEvents.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IZetaConnectorEvents *IZetaConnectorEventsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IZetaConnectorEvents.Contract.contract.Transact(opts, method, params...) +} + +// IZetaConnectorEventsWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdrawIterator struct { + Event *IZetaConnectorEventsWithdraw // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IZetaConnectorEventsWithdrawIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IZetaConnectorEventsWithdrawIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IZetaConnectorEventsWithdrawIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IZetaConnectorEventsWithdraw represents a Withdraw event raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdraw struct { + To common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdraw is a free log retrieval operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364. +// +// Solidity: event Withdraw(address indexed to, uint256 amount) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdraw(opts *bind.FilterOpts, to []common.Address) (*IZetaConnectorEventsWithdrawIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.FilterLogs(opts, "Withdraw", toRule) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsWithdrawIterator{contract: _IZetaConnectorEvents.contract, event: "Withdraw", logs: logs, sub: sub}, nil +} + +// WatchWithdraw is a free log subscription operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364. +// +// Solidity: event Withdraw(address indexed to, uint256 amount) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsWithdraw, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.WatchLogs(opts, "Withdraw", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IZetaConnectorEventsWithdraw) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "Withdraw", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdraw is a log parse operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364. +// +// Solidity: event Withdraw(address indexed to, uint256 amount) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseWithdraw(log types.Log) (*IZetaConnectorEventsWithdraw, error) { + event := new(IZetaConnectorEventsWithdraw) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "Withdraw", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IZetaConnectorEventsWithdrawAndCallIterator is returned from FilterWithdrawAndCall and is used to iterate over the raw logs and unpacked data for WithdrawAndCall events raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdrawAndCallIterator struct { + Event *IZetaConnectorEventsWithdrawAndCall // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IZetaConnectorEventsWithdrawAndCallIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdrawAndCall) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IZetaConnectorEventsWithdrawAndCallIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IZetaConnectorEventsWithdrawAndCallIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IZetaConnectorEventsWithdrawAndCall represents a WithdrawAndCall event raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdrawAndCall struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndCall is a free log retrieval operation binding the contract event 0x7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced. +// +// Solidity: event WithdrawAndCall(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawAndCall(opts *bind.FilterOpts, to []common.Address) (*IZetaConnectorEventsWithdrawAndCallIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.FilterLogs(opts, "WithdrawAndCall", toRule) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsWithdrawAndCallIterator{contract: _IZetaConnectorEvents.contract, event: "WithdrawAndCall", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndCall is a free log subscription operation binding the contract event 0x7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced. +// +// Solidity: event WithdrawAndCall(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawAndCall(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsWithdrawAndCall, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.WatchLogs(opts, "WithdrawAndCall", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IZetaConnectorEventsWithdrawAndCall) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndCall is a log parse operation binding the contract event 0x7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced. +// +// Solidity: event WithdrawAndCall(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseWithdrawAndCall(log types.Log) (*IZetaConnectorEventsWithdrawAndCall, error) { + event := new(IZetaConnectorEventsWithdrawAndCall) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawAndCall", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IZetaConnectorEventsWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdrawAndRevertIterator struct { + Event *IZetaConnectorEventsWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IZetaConnectorEventsWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IZetaConnectorEventsWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IZetaConnectorEventsWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IZetaConnectorEventsWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IZetaConnectorEventsWithdrawAndRevert represents a WithdrawAndRevert event raised by the IZetaConnectorEvents contract. +type IZetaConnectorEventsWithdrawAndRevert struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, to []common.Address) (*IZetaConnectorEventsWithdrawAndRevertIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.FilterLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return &IZetaConnectorEventsWithdrawAndRevertIterator{contract: _IZetaConnectorEvents.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsWithdrawAndRevert, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _IZetaConnectorEvents.contract.WatchLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IZetaConnectorEventsWithdrawAndRevert) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseWithdrawAndRevert(log types.Log) (*IZetaConnectorEventsWithdrawAndRevert, error) { + event := new(IZetaConnectorEventsWithdrawAndRevert) + if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go b/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go index cbc1e8c0..16797a2e 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620013b3380380620013b3833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c6111376200027c60003960008181610142015281816101c4015281816102a90152818161036e015281816103bf01528181610441015261051f015260008181610120015281816101880152818161034a0152818161039d015261040501526111376000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c9190610a62565b610113565b005b61009d60048036038101906100989190610a0f565b61029a565b005b6100a7610348565b6040516100b49190610d74565b60405180910390f35b6100c561036c565b6040516100d29190610cab565b60405180910390f35b6100f560048036038101906100f09190610a62565b610390565b005b610111600480360381019061010c9190610b17565b610517565b005b61011b610567565b6101867f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610207959493929190610cfd565b600060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161028393929190610e4c565b60405180910390a261029361063d565b5050505050565b6102a2610567565b6102ed83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103339190610e31565b60405180910390a261034361063d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610398610567565b6104037f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610484959493929190610cfd565b600060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161050093929190610e4c565b60405180910390a261051061063d565b5050505050565b6105643330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610647909392919063ffffffff16565b50565b600260005414156105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490610e11565b60405180910390fd5b6002600081905550565b6106388363a9059cbb60e01b84846040516024016105d6929190610d4b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b505050565b6001600081905550565b6106ca846323b872dd60e01b85858560405160240161066893929190610cc6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b50505050565b6000610732826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107979092919063ffffffff16565b905060008151111561079257808060200190518101906107529190610aea565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078890610df1565b60405180910390fd5b5b505050565b60606107a684846000856107af565b90509392505050565b6060824710156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90610db1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161081d9190610c94565b60006040518083038185875af1925050503d806000811461085a576040519150601f19603f3d011682016040523d82523d6000602084013e61085f565b606091505b50915091506108708783838761087c565b92505050949350505050565b606083156108df576000835114156108d757610897856108f2565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90610dd1565b60405180910390fd5b5b8290506108ea565b6108e98383610915565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156109285781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9190610d8f565b60405180910390fd5b600081359050610974816110a5565b92915050565b600081519050610989816110bc565b92915050565b60008135905061099e816110d3565b92915050565b60008083601f8401126109ba576109b9610f90565b5b8235905067ffffffffffffffff8111156109d7576109d6610f8b565b5b6020830191508360018202830111156109f3576109f2610f95565b5b9250929050565b600081359050610a09816110ea565b92915050565b600080600060608486031215610a2857610a27610f9f565b5b6000610a3686828701610965565b9350506020610a47868287016109fa565b9250506040610a588682870161098f565b9150509250925092565b600080600080600060808688031215610a7e57610a7d610f9f565b5b6000610a8c88828901610965565b9550506020610a9d888289016109fa565b945050604086013567ffffffffffffffff811115610abe57610abd610f9a565b5b610aca888289016109a4565b93509350506060610add8882890161098f565b9150509295509295909350565b600060208284031215610b0057610aff610f9f565b5b6000610b0e8482850161097a565b91505092915050565b600060208284031215610b2d57610b2c610f9f565b5b6000610b3b848285016109fa565b91505092915050565b610b4d81610ec1565b82525050565b6000610b5f8385610e94565b9350610b6c838584610f49565b610b7583610fa4565b840190509392505050565b6000610b8b82610e7e565b610b958185610ea5565b9350610ba5818560208601610f58565b80840191505092915050565b610bba81610f13565b82525050565b6000610bcb82610e89565b610bd58185610eb0565b9350610be5818560208601610f58565b610bee81610fa4565b840191505092915050565b6000610c06602683610eb0565b9150610c1182610fb5565b604082019050919050565b6000610c29601d83610eb0565b9150610c3482611004565b602082019050919050565b6000610c4c602a83610eb0565b9150610c578261102d565b604082019050919050565b6000610c6f601f83610eb0565b9150610c7a8261107c565b602082019050919050565b610c8e81610f09565b82525050565b6000610ca08284610b80565b915081905092915050565b6000602082019050610cc06000830184610b44565b92915050565b6000606082019050610cdb6000830186610b44565b610ce86020830185610b44565b610cf56040830184610c85565b949350505050565b6000608082019050610d126000830188610b44565b610d1f6020830187610b44565b610d2c6040830186610c85565b8181036060830152610d3f818486610b53565b90509695505050505050565b6000604082019050610d606000830185610b44565b610d6d6020830184610c85565b9392505050565b6000602082019050610d896000830184610bb1565b92915050565b60006020820190508181036000830152610da98184610bc0565b905092915050565b60006020820190508181036000830152610dca81610bf9565b9050919050565b60006020820190508181036000830152610dea81610c1c565b9050919050565b60006020820190508181036000830152610e0a81610c3f565b9050919050565b60006020820190508181036000830152610e2a81610c62565b9050919050565b6000602082019050610e466000830184610c85565b92915050565b6000604082019050610e616000830186610c85565b8181036020830152610e74818486610b53565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610ecc82610ee9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610f1e82610f25565b9050919050565b6000610f3082610f37565b9050919050565b6000610f4282610ee9565b9050919050565b82818337600083830152505050565b60005b83811015610f76578082015181840152602081019050610f5b565b83811115610f85576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6110ae81610ec1565b81146110b957600080fd5b50565b6110c581610ed3565b81146110d057600080fd5b50565b6110dc81610edf565b81146110e757600080fd5b50565b6110f381610f09565b81146110fe57600080fd5b5056fea26469706673582212200e9dddf368c3ba5db7f48f5e58ca49b68962f70e56e54ab42ef1145f5ce62e6164736f6c63430008070033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162001638380380620016388339818101604052810190620000379190620001ec565b8282826001600081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620000aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620000e25750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200011a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200029b565b600081519050620001e68162000281565b92915050565b6000806000606084860312156200020857620002076200027c565b5b60006200021886828701620001d5565b93505060206200022b86828701620001d5565b92505060406200023e86828701620001d5565b9150509250925092565b600062000255826200025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200028c8162000248565b81146200029857600080fd5b50565b60805160601c60a05160601c61132b6200030d6000396000818161020201528181610284015281816103f0015281816104b5015281816105b30152818161063501526107130152600081816101e001528181610248015281816104910152818161059101526105f9015261132b6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806321e093b11161005b57806321e093b1146100d85780635b112591146100f65780635e3e9fef14610114578063743e0c9b146101305761007d565b806302d5c89914610082578063106e62901461009e578063116191b6146100ba575b600080fd5b61009c60048036038101906100979190610c56565b61014c565b005b6100b860048036038101906100b39190610c03565b61035a565b005b6100c261048f565b6040516100cf9190610f68565b60405180910390f35b6100e06104b3565b6040516100ed9190610e9f565b60405180910390f35b6100fe6104d7565b60405161010b9190610e9f565b60405180910390f35b61012e60048036038101906101299190610c56565b6104fd565b005b61014a60048036038101906101459190610d0b565b61070b565b005b61015461075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101db576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102467f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b81526004016102c7959493929190610ef1565b600060405180830381600087803b1580156102e157600080fd5b505af11580156102f5573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161034393929190611040565b60405180910390a2610353610831565b5050505050565b61036261075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e9576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043483837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648360405161047a9190611025565b60405180910390a261048a610831565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61050561075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461058c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f77f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610678959493929190610ef1565b600060405180830381600087803b15801561069257600080fd5b505af11580156106a6573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516106f493929190611040565b60405180910390a2610704610831565b5050505050565b6107583330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661083b909392919063ffffffff16565b50565b600260005414156107a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079890611005565b60405180910390fd5b6002600081905550565b61082c8363a9059cbb60e01b84846040516024016107ca929190610f3f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506108c4565b505050565b6001600081905550565b6108be846323b872dd60e01b85858560405160240161085c93929190610eba565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506108c4565b50505050565b6000610926826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661098b9092919063ffffffff16565b905060008151111561098657808060200190518101906109469190610cde565b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90610fe5565b60405180910390fd5b5b505050565b606061099a84846000856109a3565b90509392505050565b6060824710156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df90610fa5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a119190610e88565b60006040518083038185875af1925050503d8060008114610a4e576040519150601f19603f3d011682016040523d82523d6000602084013e610a53565b606091505b5091509150610a6487838387610a70565b92505050949350505050565b60608315610ad357600083511415610acb57610a8b85610ae6565b610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190610fc5565b60405180910390fd5b5b829050610ade565b610add8383610b09565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115610b1c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b509190610f83565b60405180910390fd5b600081359050610b6881611299565b92915050565b600081519050610b7d816112b0565b92915050565b600081359050610b92816112c7565b92915050565b60008083601f840112610bae57610bad611184565b5b8235905067ffffffffffffffff811115610bcb57610bca61117f565b5b602083019150836001820283011115610be757610be6611189565b5b9250929050565b600081359050610bfd816112de565b92915050565b600080600060608486031215610c1c57610c1b611193565b5b6000610c2a86828701610b59565b9350506020610c3b86828701610bee565b9250506040610c4c86828701610b83565b9150509250925092565b600080600080600060808688031215610c7257610c71611193565b5b6000610c8088828901610b59565b9550506020610c9188828901610bee565b945050604086013567ffffffffffffffff811115610cb257610cb161118e565b5b610cbe88828901610b98565b93509350506060610cd188828901610b83565b9150509295509295909350565b600060208284031215610cf457610cf3611193565b5b6000610d0284828501610b6e565b91505092915050565b600060208284031215610d2157610d20611193565b5b6000610d2f84828501610bee565b91505092915050565b610d41816110b5565b82525050565b6000610d538385611088565b9350610d6083858461113d565b610d6983611198565b840190509392505050565b6000610d7f82611072565b610d898185611099565b9350610d9981856020860161114c565b80840191505092915050565b610dae81611107565b82525050565b6000610dbf8261107d565b610dc981856110a4565b9350610dd981856020860161114c565b610de281611198565b840191505092915050565b6000610dfa6026836110a4565b9150610e05826111a9565b604082019050919050565b6000610e1d601d836110a4565b9150610e28826111f8565b602082019050919050565b6000610e40602a836110a4565b9150610e4b82611221565b604082019050919050565b6000610e63601f836110a4565b9150610e6e82611270565b602082019050919050565b610e82816110fd565b82525050565b6000610e948284610d74565b915081905092915050565b6000602082019050610eb46000830184610d38565b92915050565b6000606082019050610ecf6000830186610d38565b610edc6020830185610d38565b610ee96040830184610e79565b949350505050565b6000608082019050610f066000830188610d38565b610f136020830187610d38565b610f206040830186610e79565b8181036060830152610f33818486610d47565b90509695505050505050565b6000604082019050610f546000830185610d38565b610f616020830184610e79565b9392505050565b6000602082019050610f7d6000830184610da5565b92915050565b60006020820190508181036000830152610f9d8184610db4565b905092915050565b60006020820190508181036000830152610fbe81610ded565b9050919050565b60006020820190508181036000830152610fde81610e10565b9050919050565b60006020820190508181036000830152610ffe81610e33565b9050919050565b6000602082019050818103600083015261101e81610e56565b9050919050565b600060208201905061103a6000830184610e79565b92915050565b60006040820190506110556000830186610e79565b8181036020830152611068818486610d47565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006110c0826110dd565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061111282611119565b9050919050565b60006111248261112b565b9050919050565b6000611136826110dd565b9050919050565b82818337600083830152505050565b60005b8381101561116a57808201518184015260208101905061114f565b83811115611179576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6112a2816110b5565b81146112ad57600080fd5b50565b6112b9816110c7565b81146112c457600080fd5b50565b6112d0816110d3565b81146112db57600080fd5b50565b6112e7816110fd565b81146112f257600080fd5b5056fea2646970667358221220724dfbb3e6e4b9c22a02d27916991d2dd9a38c585c03f6d0aef019c03f957ee464736f6c63430008070033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ZetaConnectorNativeABI = ZetaConnectorNativeMetaData.ABI var ZetaConnectorNativeBin = ZetaConnectorNativeMetaData.Bin // DeployZetaConnectorNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNative to it. -func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { +func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address, _tssAddress common.Address) (common.Address, *types.Transaction, *ZetaConnectorNative, error) { parsed, err := ZetaConnectorNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployZetaConnectorNative(auth *bind.TransactOpts, backend bind.ContractBac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend, _gateway, _zetaToken) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNativeBin), backend, _gateway, _zetaToken, _tssAddress) if err != nil { return common.Address{}, nil, nil, err } @@ -233,6 +233,37 @@ func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) Gateway() (common. return _ZetaConnectorNative.Contract.Gateway(&_ZetaConnectorNative.CallOpts) } +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNative *ZetaConnectorNativeCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNative.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNative *ZetaConnectorNativeSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNative.Contract.TssAddress(&_ZetaConnectorNative.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNative *ZetaConnectorNativeCallerSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNative.Contract.TssAddress(&_ZetaConnectorNative.CallOpts) +} + // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) diff --git a/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go b/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go index 5fe23ae9..61c83283 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go @@ -31,7 +31,7 @@ var ( // ZetaConnectorNewBaseMetaData contains all meta data concerning the ZetaConnectorNewBase contract. var ZetaConnectorNewBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ZetaConnectorNewBaseABI is the input ABI used to generate the binding from. @@ -211,6 +211,37 @@ func (_ZetaConnectorNewBase *ZetaConnectorNewBaseCallerSession) Gateway() (commo return _ZetaConnectorNewBase.Contract.Gateway(&_ZetaConnectorNewBase.CallOpts) } +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNewBase.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNewBase.Contract.TssAddress(&_ZetaConnectorNewBase.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseCallerSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNewBase.Contract.TssAddress(&_ZetaConnectorNewBase.CallOpts) +} + // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) diff --git a/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go b/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go index 4ca39e05..7adaa59f 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c060405234801561001057600080fd5b5060405162000e2a38038062000e2a83398181016040528101906100349190610168565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a55750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f6565b600081519050610162816101df565b92915050565b6000806040838503121561017f5761017e6101da565b5b600061018d85828601610153565b925050602061019e85828601610153565b9150509250929050565b60006101b3826101ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e8816101a8565b81146101f357600080fd5b50565b60805160601c60a05160601c610bc2620002686000396000818161011d01528181610208015281816102e8015281816103f6015281816104220152818161050d01526105e5015260008181610159015281816101cc015281816103d20152818161045e01526104d10152610bc26000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c91906107b5565b610113565b005b61009d60048036038101906100989190610762565b6102de565b005b6100a76103d0565b6040516100b491906109bf565b60405180910390f35b6100c56103f4565b6040516100d291906108f6565b60405180910390f35b6100f560048036038101906100f091906107b5565b610418565b005b610111600480360381019061010c919061083d565b6105e3565b005b61011b610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161019893929190610988565b600060405180830381600087803b1580156101b257600080fd5b505af11580156101c6573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161024b959493929190610911565b600060405180830381600087803b15801561026557600080fd5b505af1158015610279573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8585856040516102c793929190610a15565b60405180910390a26102d76106c3565b5050505050565b6102e6610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161034393929190610988565b600060405180830381600087803b15801561035d57600080fd5b505af1158015610371573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103bb91906109fa565b60405180910390a26103cb6106c3565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610420610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161049d93929190610988565b600060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610550959493929190610911565b600060405180830381600087803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516105cc93929190610a15565b60405180910390a26105dc6106c3565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161063e92919061095f565b600060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b5050505050565b600260005414156106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b0906109da565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506106dc81610b47565b92915050565b6000813590506106f181610b5e565b92915050565b60008083601f84011261070d5761070c610af9565b5b8235905067ffffffffffffffff81111561072a57610729610af4565b5b60208301915083600182028301111561074657610745610afe565b5b9250929050565b60008135905061075c81610b75565b92915050565b60008060006060848603121561077b5761077a610b08565b5b6000610789868287016106cd565b935050602061079a8682870161074d565b92505060406107ab868287016106e2565b9150509250925092565b6000806000806000608086880312156107d1576107d0610b08565b5b60006107df888289016106cd565b95505060206107f08882890161074d565b945050604086013567ffffffffffffffff81111561081157610810610b03565b5b61081d888289016106f7565b93509350506060610830888289016106e2565b9150509295509295909350565b60006020828403121561085357610852610b08565b5b60006108618482850161074d565b91505092915050565b61087381610a69565b82525050565b61088281610a7b565b82525050565b60006108948385610a47565b93506108a1838584610ae5565b6108aa83610b0d565b840190509392505050565b6108be81610aaf565b82525050565b60006108d1601f83610a58565b91506108dc82610b1e565b602082019050919050565b6108f081610aa5565b82525050565b600060208201905061090b600083018461086a565b92915050565b6000608082019050610926600083018861086a565b610933602083018761086a565b61094060408301866108e7565b8181036060830152610953818486610888565b90509695505050505050565b6000604082019050610974600083018561086a565b61098160208301846108e7565b9392505050565b600060608201905061099d600083018661086a565b6109aa60208301856108e7565b6109b76040830184610879565b949350505050565b60006020820190506109d460008301846108b5565b92915050565b600060208201905081810360008301526109f3816108c4565b9050919050565b6000602082019050610a0f60008301846108e7565b92915050565b6000604082019050610a2a60008301866108e7565b8181036020830152610a3d818486610888565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610a7482610a85565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610aba82610ac1565b9050919050565b6000610acc82610ad3565b9050919050565b6000610ade82610a85565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610b5081610a69565b8114610b5b57600080fd5b50565b610b6781610a7b565b8114610b7257600080fd5b50565b610b7e81610aa5565b8114610b8957600080fd5b5056fea26469706673582212207419360613ac73b5058589625b8f7b6c4071be5eb2e75aa5b04480ab384dc33b64736f6c63430008070033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c06040523480156200001157600080fd5b50604051620010c3380380620010c38339818101604052810190620000379190620001ec565b8282826001600081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620000aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620000e25750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200011a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200029b565b600081519050620001e68162000281565b92915050565b6000806000606084860312156200020857620002076200027c565b5b60006200021886828701620001d5565b93505060206200022b86828701620001d5565b92505060406200023e86828701620001d5565b9150509250925092565b600062000255826200025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200028c8162000248565b81146200029857600080fd5b50565b60805160601c60a05160601c610db66200030d600039600081816101dd015281816102c80152818161042f0152818161053d015281816106160152818161070101526107d90152600081816102190152818161028c015281816105190152818161065201526106c50152610db66000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806321e093b11161005b57806321e093b1146100d85780635b112591146100f65780635e3e9fef14610114578063743e0c9b146101305761007d565b806302d5c89914610082578063106e62901461009e578063116191b6146100ba575b600080fd5b61009c600480360381019061009791906109a9565b61014c565b005b6100b860048036038101906100b39190610956565b61039e565b005b6100c2610517565b6040516100cf9190610bb3565b60405180910390f35b6100e061053b565b6040516100ed9190610aea565b60405180910390f35b6100fe61055f565b60405161010b9190610aea565b60405180910390f35b61012e600480360381019061012991906109a9565b610585565b005b61014a60048036038101906101459190610a31565b6107d7565b005b610154610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101db576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161025893929190610b7c565b600060405180830381600087803b15801561027257600080fd5b505af1158015610286573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161030b959493929190610b05565b600060405180830381600087803b15801561032557600080fd5b505af1158015610339573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161038793929190610c09565b60405180910390a26103976108b7565b5050505050565b6103a6610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461042d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161048a93929190610b7c565b600060405180830381600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516105029190610bee565b60405180910390a26105126108b7565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61058d610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161069193929190610b7c565b600060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610744959493929190610b05565b600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516107c093929190610c09565b60405180910390a26107d06108b7565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401610832929190610b53565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505050565b600260005414156108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490610bce565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506108d081610d3b565b92915050565b6000813590506108e581610d52565b92915050565b60008083601f84011261090157610900610ced565b5b8235905067ffffffffffffffff81111561091e5761091d610ce8565b5b60208301915083600182028301111561093a57610939610cf2565b5b9250929050565b60008135905061095081610d69565b92915050565b60008060006060848603121561096f5761096e610cfc565b5b600061097d868287016108c1565b935050602061098e86828701610941565b925050604061099f868287016108d6565b9150509250925092565b6000806000806000608086880312156109c5576109c4610cfc565b5b60006109d3888289016108c1565b95505060206109e488828901610941565b945050604086013567ffffffffffffffff811115610a0557610a04610cf7565b5b610a11888289016108eb565b93509350506060610a24888289016108d6565b9150509295509295909350565b600060208284031215610a4757610a46610cfc565b5b6000610a5584828501610941565b91505092915050565b610a6781610c5d565b82525050565b610a7681610c6f565b82525050565b6000610a888385610c3b565b9350610a95838584610cd9565b610a9e83610d01565b840190509392505050565b610ab281610ca3565b82525050565b6000610ac5601f83610c4c565b9150610ad082610d12565b602082019050919050565b610ae481610c99565b82525050565b6000602082019050610aff6000830184610a5e565b92915050565b6000608082019050610b1a6000830188610a5e565b610b276020830187610a5e565b610b346040830186610adb565b8181036060830152610b47818486610a7c565b90509695505050505050565b6000604082019050610b686000830185610a5e565b610b756020830184610adb565b9392505050565b6000606082019050610b916000830186610a5e565b610b9e6020830185610adb565b610bab6040830184610a6d565b949350505050565b6000602082019050610bc86000830184610aa9565b92915050565b60006020820190508181036000830152610be781610ab8565b9050919050565b6000602082019050610c036000830184610adb565b92915050565b6000604082019050610c1e6000830186610adb565b8181036020830152610c31818486610a7c565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610c6882610c79565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610cae82610cb5565b9050919050565b6000610cc082610cc7565b9050919050565b6000610cd282610c79565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610d4481610c5d565b8114610d4f57600080fd5b50565b610d5b81610c6f565b8114610d6657600080fd5b50565b610d7281610c99565b8114610d7d57600080fd5b5056fea26469706673582212209d543e668c793d4944964e21ce09680a6432aef47847a599106ee141e7a8a01264736f6c63430008070033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ZetaConnectorNonNativeABI = ZetaConnectorNonNativeMetaData.ABI var ZetaConnectorNonNativeBin = ZetaConnectorNonNativeMetaData.Bin // DeployZetaConnectorNonNative deploys a new Ethereum contract, binding an instance of ZetaConnectorNonNative to it. -func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { +func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.ContractBackend, _gateway common.Address, _zetaToken common.Address, _tssAddress common.Address) (common.Address, *types.Transaction, *ZetaConnectorNonNative, error) { parsed, err := ZetaConnectorNonNativeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployZetaConnectorNonNative(auth *bind.TransactOpts, backend bind.Contract return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend, _gateway, _zetaToken) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZetaConnectorNonNativeBin), backend, _gateway, _zetaToken, _tssAddress) if err != nil { return common.Address{}, nil, nil, err } @@ -233,6 +233,37 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) Gateway() (c return _ZetaConnectorNonNative.Contract.Gateway(&_ZetaConnectorNonNative.CallOpts) } +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCaller) TssAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZetaConnectorNonNative.contract.Call(opts, &out, "tssAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNonNative.Contract.TssAddress(&_ZetaConnectorNonNative.CallOpts) +} + +// TssAddress is a free data retrieval call binding the contract method 0x5b112591. +// +// Solidity: function tssAddress() view returns(address) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeCallerSession) TssAddress() (common.Address, error) { + return _ZetaConnectorNonNative.Contract.TssAddress(&_ZetaConnectorNonNative.CallOpts) +} + // ZetaToken is a free data retrieval call binding the contract method 0x21e093b1. // // Solidity: function zetaToken() view returns(address) diff --git a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go index 9b9c795c..744380b8 100644 --- a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go +++ b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go @@ -46,7 +46,7 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e282ad47b588d26949a07fb7fc6ba46fa9721e07254d668e544a8f2413001c5064736f6c63430008070033", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c403e7110f39344a7464aedddcc11ad944288d8cd79a4d58fa568decbde916ef64736f6c63430008070033", } // GatewayZEVMABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/zevm/zrc20new.sol/zrc20new.go b/pkg/contracts/zevm/zrc20new.sol/zrc20new.go index c1710758..16e077b9 100644 --- a/pkg/contracts/zevm/zrc20new.sol/zrc20new.go +++ b/pkg/contracts/zevm/zrc20new.sol/zrc20new.go @@ -32,7 +32,7 @@ var ( // ZRC20NewMetaData contains all meta data concerning the ZRC20New contract. var ZRC20NewMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainid_\",\"type\":\"uint256\"},{\"internalType\":\"enumCoinType\",\"name\":\"coinType_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"systemContractAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gatewayContractAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasCoin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasPrice\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"from\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedProtocolFlatFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"systemContract\",\"type\":\"address\"}],\"name\":\"UpdatedSystemContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COIN_TYPE\",\"outputs\":[{\"internalType\":\"enumCoinType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GATEWAY_CONTRACT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROTOCOL_FLAT_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONTRACT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"updateGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"updateProtocolFlatFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"updateSystemContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawGasFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033", + Bin: "0x60c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea264697066735822122088cc6797a637e9f7f0d8220bcf745a632c2a8fcb9c479e8f3633f88f9d369ecc64736f6c63430008070033", } // ZRC20NewABI is the input ABI used to generate the binding from. diff --git a/test/fuzz/GatewayEVMEchidnaTest.sol b/test/fuzz/GatewayEVMEchidnaTest.sol index 6d031f0e..b7d9eb61 100644 --- a/test/fuzz/GatewayEVMEchidnaTest.sol +++ b/test/fuzz/GatewayEVMEchidnaTest.sol @@ -17,7 +17,7 @@ contract GatewayEVMEchidnaTest is GatewayEVM { tssAddress = echidnaCaller; zetaConnector = address(0x123); testERC20 = new TestERC20("test", "TEST"); - custody = address(new ERC20CustodyNew(address(this))); + custody = address(new ERC20CustodyNew(address(this), tssAddress)); } function testExecuteWithERC20(address to, uint256 amount, bytes calldata data) public { diff --git a/test/prototypes/GatewayEVMUniswap.spec.ts b/test/prototypes/GatewayEVMUniswap.spec.ts index 820c1654..0c2fd2de 100644 --- a/test/prototypes/GatewayEVMUniswap.spec.ts +++ b/test/prototypes/GatewayEVMUniswap.spec.ts @@ -65,10 +65,10 @@ describe("Uniswap Integration with GatewayEVM", function () { initializer: "initialize", kind: "uups", })) as GatewayEVM; - custody = (await ERC20CustodyNew.deploy(gateway.address)) as ERC20CustodyNew; - gateway.setCustody(custody.address); - const zetaConnector = await ZetaConnector.deploy(gateway.address, zeta.address); - gateway.setConnector(zetaConnector.address); + custody = (await ERC20CustodyNew.deploy(gateway.address, tssAddress.address)) as ERC20CustodyNew; + gateway.connect(tssAddress).setCustody(custody.address); + const zetaConnector = await ZetaConnector.deploy(gateway.address, zeta.address, tssAddress.address); + gateway.connect(tssAddress).setConnector(zetaConnector.address); // Transfer some tokens to the custody contract await tokenA.transfer(custody.address, ethers.utils.parseEther("100")); @@ -87,7 +87,7 @@ describe("Uniswap Integration with GatewayEVM", function () { ]); // Withdraw and call - await custody.withdrawAndCall(tokenA.address, router.address, amountIn, data); + await custody.connect(tssAddress).withdrawAndCall(tokenA.address, router.address, amountIn, data); // Verify the destination address received the tokens const destBalance = await tokenB.balanceOf(addr2.address); diff --git a/testFoundry/GatewayEVM.t.sol b/testFoundry/GatewayEVM.t.sol index 7da72e39..efcaf9b4 100644 --- a/testFoundry/GatewayEVM.t.sol +++ b/testFoundry/GatewayEVM.t.sol @@ -12,11 +12,13 @@ import "contracts/prototypes/evm/TestERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; + import "contracts/prototypes/evm/IGatewayEVM.sol"; +import "contracts/prototypes/evm/IERC20CustodyNew.sol"; import "contracts/prototypes/evm/IReceiverEVM.sol"; -import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; -contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { +contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IERC20CustodyNewEvents { using SafeERC20 for IERC20; address proxy; @@ -30,10 +32,6 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver address destination; address tssAddress; - event Withdraw(address indexed token, address indexed to, uint256 amount); - event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data); - event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data); - function setUp() public { owner = address(this); destination = address(0x1234); @@ -47,12 +45,16 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zeta)) )); gateway = GatewayEVM(proxy); - custody = new ERC20CustodyNew(address(gateway)); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta)); + custody = new ERC20CustodyNew(address(gateway), tssAddress); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress); receiver = new ReceiverEVM(); + vm.deal(tssAddress, 1 ether); + + vm.startPrank(tssAddress); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); token.mint(owner, 1000000); token.transfer(address(custody), 500000); @@ -72,7 +74,20 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedNonPayable(address(gateway), str, num, flag); vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, data); + vm.prank(tssAddress); + gateway.execute(address(receiver), data); + } + + function testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS() public { + string[] memory str = new string[](1); + str[0] = "Hello, Foundry!"; + uint256[] memory num = new uint256[](1); + num[0] = 42; + bool flag = true; + bytes memory data = abi.encodeWithSignature("receiveNonPayable(string[],uint256[],bool)", str, num, flag); + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); gateway.execute(address(receiver), data); } @@ -90,7 +105,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedPayable(address(gateway), value, str, num, flag); vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 1 ether, data); - + vm.prank(tssAddress); gateway.execute{value: value}(address(receiver), data); assertEq(value, address(receiver).balance); @@ -104,10 +119,28 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedNoParams(address(gateway)); vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, data); - + vm.prank(tssAddress); gateway.execute(address(receiver), data); } + function testExecuteWithERC20FailsIfNotCustoryOrConnector() public { + uint256 amount = 100000; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + gateway.executeWithERC20(address(token), destination, amount, data); + } + + function testRevertWithERC20FailsIfNotCustoryOrConnector() public { + uint256 amount = 100000; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + gateway.revertWithERC20(address(token), destination, amount, data); + } + function testForwardCallToReceiveERC20ThroughCustody() public { uint256 amount = 100000; bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); @@ -121,6 +154,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedERC20(address(gateway), amount, address(token), destination); vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); custody.withdrawAndCall(address(token), address(receiver), amount, data); // Verify that the tokens were transferred to the destination address @@ -140,9 +174,20 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceGateway, 0); } + function testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() public { uint256 amount = 0; bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + + vm.prank(tssAddress); vm.expectRevert(InsufficientERC20Amount.selector); custody.withdrawAndCall(address(token), address(receiver), amount, data); } @@ -160,6 +205,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedERC20(address(gateway), amount / 2, address(token), destination); vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); custody.withdrawAndCall(address(token), address(receiver), amount, data); // Verify that the tokens were transferred to the destination address @@ -179,14 +225,24 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceGateway, 0); } + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() public { uint256 amount = 0; bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + + vm.prank(tssAddress); vm.expectRevert(InsufficientERC20Amount.selector); custody.withdrawAndCall(address(token), address(receiver), amount, data); } - function testForwardCallToReceiveNoParamsThroughCustody() public { uint256 amount = 100000; bytes memory data = abi.encodeWithSignature("receiveNoParams()"); @@ -200,6 +256,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedNoParams(address(gateway)); vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.prank(tssAddress); custody.withdrawAndCall(address(token), address(receiver), amount, data); // Verify that the tokens were not transferred to the destination address @@ -229,6 +286,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectCall(address(token), 0, transferData); vm.expectEmit(true, true, true, true, address(custody)); emit Withdraw(address(token), destination, amount); + vm.prank(tssAddress); custody.withdraw(address(token), destination, amount); // Verify that the tokens were transferred to the destination address @@ -244,6 +302,14 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceGateway, 0); } + function testWithdrawThroughCustodyFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + custody.withdraw(address(token), destination, amount); + } + function testWithdrawAndRevertThroughCustody() public { uint256 amount = 100000; bytes memory data = abi.encodePacked("hello"); @@ -260,6 +326,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit RevertedWithERC20(address(token), address(receiver), amount, data); vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawAndRevert(address(token), address(receiver), amount, data); + vm.prank(tssAddress); custody.withdrawAndRevert(address(token), address(receiver), amount, data); // Verify that the tokens were transferred to the receiver address @@ -279,11 +346,20 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceGateway, 0); } + function testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + } function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() public { uint256 amount = 0; bytes memory data = abi.encodePacked("hello"); + vm.prank(tssAddress); vm.expectRevert(InsufficientERC20Amount.selector); custody.withdrawAndRevert(address(token), address(receiver), amount, data); } @@ -299,12 +375,22 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver emit ReceivedRevert(address(gateway), data); vm.expectEmit(true, true, true, true, address(gateway)); emit Reverted(address(receiver), 1 ether, data); + vm.prank(tssAddress); gateway.executeRevert{value: value}(address(receiver), data); // Verify that the tokens were transferred to the receiver address uint256 balanceAfter = address(receiver).balance; assertEq(balanceAfter, 1 ether); } + + function testExecuteRevertFailsIfSenderIsNotTSS() public { + uint256 value = 1 ether; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + gateway.executeRevert{value: value}(address(receiver), data); + } } contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { @@ -333,11 +419,15 @@ contract GatewayEVMInboundTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IR abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zeta)) )); gateway = GatewayEVM(proxy); - custody = new ERC20CustodyNew(address(gateway)); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta)); + custody = new ERC20CustodyNew(address(gateway), tssAddress); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress); + + vm.deal(tssAddress, 1 ether); + vm.startPrank(tssAddress); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); token.mint(owner, ownerAmount); } diff --git a/testFoundry/GatewayEVMUpgrade.t.sol b/testFoundry/GatewayEVMUpgrade.t.sol index 24d87587..fe2d5391 100644 --- a/testFoundry/GatewayEVMUpgrade.t.sol +++ b/testFoundry/GatewayEVMUpgrade.t.sol @@ -46,12 +46,16 @@ contract GatewayEVMUUPSUpgradeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents )); gateway = GatewayEVM(proxy); - custody = new ERC20CustodyNew(address(gateway)); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta)); + custody = new ERC20CustodyNew(address(gateway), tssAddress); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zeta), tssAddress); receiver = new ReceiverEVM(); + vm.deal(tssAddress, 1 ether); + + vm.startPrank(tssAddress); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); token.mint(owner, 1000000); token.transfer(address(custody), 500000); diff --git a/testFoundry/GatewayEVMZEVM.t.sol b/testFoundry/GatewayEVMZEVM.t.sol index 0fe21f09..8859013e 100644 --- a/testFoundry/GatewayEVMZEVM.t.sol +++ b/testFoundry/GatewayEVMZEVM.t.sol @@ -62,11 +62,15 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zeta)) )); gatewayEVM = GatewayEVM(proxyEVM); - custody = new ERC20CustodyNew(address(gatewayEVM)); - zetaConnector = new ZetaConnectorNonNative(address(gatewayEVM), address(zeta)); + custody = new ERC20CustodyNew(address(gatewayEVM), tssAddress); + zetaConnector = new ZetaConnectorNonNative(address(gatewayEVM), address(zeta), tssAddress); + vm.deal(tssAddress, 1 ether); + + vm.startPrank(tssAddress); gatewayEVM.setCustody(address(custody)); gatewayEVM.setConnector(address(zetaConnector)); + vm.stopPrank(); token.mint(ownerEVM, 1000000); token.transfer(address(custody), 500000); @@ -92,6 +96,8 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate vm.prank(ownerZEVM); zrc20.approve(address(gatewayZEVM), 1000000); + + vm.deal(tssAddress, 1 ether); } function testCallReceiverEVMFromZEVM() public { @@ -111,6 +117,7 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate vm.deal(address(gatewayEVM), value); vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); + vm.prank(tssAddress); gatewayEVM.execute{value: value}(address(receiverEVM), message); } @@ -133,6 +140,7 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate emit ReceivedPayable(address(gatewayEVM), value, str, num, flag); vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); + vm.prank(tssAddress); gatewayEVM.execute{value: value}(address(receiverEVM), message); } @@ -172,6 +180,7 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate emit ReceivedPayable(address(gatewayEVM), value, str, num, flag); vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); + vm.prank(tssAddress); gatewayEVM.execute{value: value}(address(receiverEVM), message); } @@ -195,6 +204,7 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate emit ReceivedPayable(address(gatewayEVM), value, str, num, flag); vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); + vm.prank(tssAddress); gatewayEVM.execute{value: value}(address(receiverEVM), message); // Check the balance after withdrawal diff --git a/testFoundry/ZetaConnectorNative.t.sol b/testFoundry/ZetaConnectorNative.t.sol index a9140804..5e905809 100644 --- a/testFoundry/ZetaConnectorNative.t.sol +++ b/testFoundry/ZetaConnectorNative.t.sol @@ -12,11 +12,13 @@ import "contracts/prototypes/evm/TestERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; + import "contracts/prototypes/evm/IGatewayEVM.sol"; import "contracts/prototypes/evm/IReceiverEVM.sol"; -import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; +import "contracts/prototypes/evm/IZetaConnector.sol"; -contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { +contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IZetaConnectorEvents { using SafeERC20 for IERC20; address proxy; @@ -29,10 +31,6 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, address destination; address tssAddress; - event Withdraw(address indexed to, uint256 amount); - event WithdrawAndCall(address indexed to, uint256 amount, bytes data); - event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); - function setUp() public { owner = address(this); destination = address(0x1234); @@ -45,32 +43,46 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zetaToken)) )); gateway = GatewayEVM(proxy); - custody = new ERC20CustodyNew(address(gateway)); - zetaConnector = new ZetaConnectorNative(address(gateway), address(zetaToken)); + custody = new ERC20CustodyNew(address(gateway), tssAddress); + zetaConnector = new ZetaConnectorNative(address(gateway), address(zetaToken), tssAddress); receiver = new ReceiverEVM(); + vm.deal(tssAddress, 1 ether); + + vm.startPrank(tssAddress); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); zetaToken.mint(address(zetaConnector), 5000000); } function testWithdraw() public { uint256 amount = 100000; - uint256 balanceBefore = zetaToken.balanceOf(destination); bytes32 internalSendHash = ""; + uint256 balanceBefore = zetaToken.balanceOf(destination); assertEq(balanceBefore, 0); bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", destination, amount); vm.expectCall(address(zetaToken), 0, data); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit Withdraw(destination, amount); + vm.prank(tssAddress); zetaConnector.withdraw(destination, amount, internalSendHash); uint256 balanceAfter = zetaToken.balanceOf(destination); assertEq(balanceAfter, amount); } + function testWithdrawFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdraw(destination, amount, internalSendHash); + } + function testWithdrawAndCallReceiveERC20() public { uint256 amount = 100000; bytes32 internalSendHash = ""; @@ -85,6 +97,7 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, emit ReceivedERC20(address(gateway), amount, address(zetaToken), destination); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address @@ -104,6 +117,16 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, assertEq(balanceGateway, 0); } + function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(zetaToken), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + } + function testWithdrawAndCallReceiveNoParams() public { uint256 amount = 100000; bytes32 internalSendHash = ""; @@ -118,6 +141,7 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, emit ReceivedNoParams(address(gateway)); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the no tokens were transferred to the destination address @@ -151,6 +175,7 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address @@ -187,6 +212,7 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, emit RevertedWithERC20(address(zetaToken), address(receiver), amount, data); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndRevert(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the receiver address @@ -205,4 +231,14 @@ contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); assertEq(balanceGateway, 0); } + + function testWithdrawAndRevertFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); + } } \ No newline at end of file diff --git a/testFoundry/ZetaConnectorNonNative.t.sol b/testFoundry/ZetaConnectorNonNative.t.sol index e425fa55..915ca8b6 100644 --- a/testFoundry/ZetaConnectorNonNative.t.sol +++ b/testFoundry/ZetaConnectorNonNative.t.sol @@ -12,12 +12,14 @@ import "contracts/prototypes/evm/TestERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; + +import "contracts/evm/Zeta.non-eth.sol"; import "contracts/prototypes/evm/IGatewayEVM.sol"; import "contracts/prototypes/evm/IReceiverEVM.sol"; -import "contracts/evm/Zeta.non-eth.sol"; -import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; +import "contracts/prototypes/evm/IZetaConnector.sol"; -contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { +contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents, IZetaConnectorEvents { using SafeERC20 for IERC20; address proxy; @@ -30,10 +32,6 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent address destination; address tssAddress; - event Withdraw(address indexed to, uint256 amount); - event WithdrawAndCall(address indexed to, uint256 amount, bytes data); - event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); - function setUp() public { owner = address(this); destination = address(0x1234); @@ -46,33 +44,47 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zetaToken)) )); gateway = GatewayEVM(proxy); - custody = new ERC20CustodyNew(address(gateway)); - zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zetaToken)); + custody = new ERC20CustodyNew(address(gateway), tssAddress); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zetaToken), tssAddress); vm.prank(tssAddress); zetaToken.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); receiver = new ReceiverEVM(); + vm.deal(tssAddress, 1 ether); + + vm.startPrank(tssAddress); gateway.setCustody(address(custody)); gateway.setConnector(address(zetaConnector)); + vm.stopPrank(); } function testWithdraw() public { uint256 amount = 100000; uint256 balanceBefore = zetaToken.balanceOf(destination); - bytes32 internalSendHash = ""; assertEq(balanceBefore, 0); + bytes32 internalSendHash = ""; bytes memory data = abi.encodeWithSignature("mint(address,uint256,bytes32)", destination, amount, internalSendHash); vm.expectCall(address(zetaToken), 0, data); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit Withdraw(destination, amount); + vm.prank(tssAddress); zetaConnector.withdraw(destination, amount, internalSendHash); uint256 balanceAfter = zetaToken.balanceOf(destination); assertEq(balanceAfter, amount); } + function testWithdrawFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdraw(destination, amount, internalSendHash); + } + function testWithdrawAndCallReceiveERC20() public { uint256 amount = 100000; bytes32 internalSendHash = ""; @@ -88,6 +100,7 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent emit ReceivedERC20(address(gateway), amount, address(zetaToken), destination); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address @@ -107,6 +120,16 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent assertEq(balanceGateway, 0); } + function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(zetaToken), destination); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + } + function testWithdrawAndCallReceiveNoParams() public { uint256 amount = 100000; bytes32 internalSendHash = ""; @@ -122,6 +145,7 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent emit ReceivedNoParams(address(gateway)); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the no tokens were transferred to the destination address @@ -156,6 +180,7 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndCall(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address @@ -192,6 +217,7 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent emit RevertedWithERC20(address(zetaToken), address(receiver), amount, data); vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawAndRevert(address(receiver), amount, data); + vm.prank(tssAddress); zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the receiver address @@ -210,4 +236,14 @@ contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvent uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); assertEq(balanceGateway, 0); } + + function testWithdrawAndRevertFailsIfSenderIsNotTSS() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodePacked("hello"); + + vm.prank(owner); + vm.expectRevert(InvalidSender.selector); + zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); + } } \ No newline at end of file diff --git a/typechain-types/contracts/prototypes/evm/ERC20CustodyNew.ts b/typechain-types/contracts/prototypes/evm/ERC20CustodyNew.ts index 4a8c8569..99bed03f 100644 --- a/typechain-types/contracts/prototypes/evm/ERC20CustodyNew.ts +++ b/typechain-types/contracts/prototypes/evm/ERC20CustodyNew.ts @@ -30,6 +30,7 @@ import type { export interface ERC20CustodyNewInterface extends utils.Interface { functions: { "gateway()": FunctionFragment; + "tssAddress()": FunctionFragment; "withdraw(address,address,uint256)": FunctionFragment; "withdrawAndCall(address,address,uint256,bytes)": FunctionFragment; "withdrawAndRevert(address,address,uint256,bytes)": FunctionFragment; @@ -38,12 +39,17 @@ export interface ERC20CustodyNewInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: | "gateway" + | "tssAddress" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" ): FunctionFragment; encodeFunctionData(functionFragment: "gateway", values?: undefined): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; encodeFunctionData( functionFragment: "withdraw", values: [ @@ -72,6 +78,7 @@ export interface ERC20CustodyNewInterface extends utils.Interface { ): string; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -161,6 +168,8 @@ export interface ERC20CustodyNew extends BaseContract { functions: { gateway(overrides?: CallOverrides): Promise<[string]>; + tssAddress(overrides?: CallOverrides): Promise<[string]>; + withdraw( token: PromiseOrValue, to: PromiseOrValue, @@ -187,6 +196,8 @@ export interface ERC20CustodyNew extends BaseContract { gateway(overrides?: CallOverrides): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( token: PromiseOrValue, to: PromiseOrValue, @@ -213,6 +224,8 @@ export interface ERC20CustodyNew extends BaseContract { callStatic: { gateway(overrides?: CallOverrides): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( token: PromiseOrValue, to: PromiseOrValue, @@ -279,6 +292,8 @@ export interface ERC20CustodyNew extends BaseContract { estimateGas: { gateway(overrides?: CallOverrides): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( token: PromiseOrValue, to: PromiseOrValue, @@ -306,6 +321,8 @@ export interface ERC20CustodyNew extends BaseContract { populateTransaction: { gateway(overrides?: CallOverrides): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( token: PromiseOrValue, to: PromiseOrValue, diff --git a/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors.ts b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors.ts new file mode 100644 index 00000000..6791a1db --- /dev/null +++ b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors.ts @@ -0,0 +1,56 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, Signer, utils } from "ethers"; + +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC20CustodyNewErrorsInterface extends utils.Interface { + functions: {}; + + events: {}; +} + +export interface IERC20CustodyNewErrors extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20CustodyNewErrorsInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: {}; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents.ts b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents.ts new file mode 100644 index 00000000..68bcc9d8 --- /dev/null +++ b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents.ts @@ -0,0 +1,140 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, BigNumber, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IERC20CustodyNewEventsInterface extends utils.Interface { + functions: {}; + + events: { + "Withdraw(address,address,uint256)": EventFragment; + "WithdrawAndCall(address,address,uint256,bytes)": EventFragment; + "WithdrawAndRevert(address,address,uint256,bytes)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndCall"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndRevert"): EventFragment; +} + +export interface WithdrawEventObject { + token: string; + to: string; + amount: BigNumber; +} +export type WithdrawEvent = TypedEvent< + [string, string, BigNumber], + WithdrawEventObject +>; + +export type WithdrawEventFilter = TypedEventFilter; + +export interface WithdrawAndCallEventObject { + token: string; + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndCallEvent = TypedEvent< + [string, string, BigNumber, string], + WithdrawAndCallEventObject +>; + +export type WithdrawAndCallEventFilter = TypedEventFilter; + +export interface WithdrawAndRevertEventObject { + token: string; + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndRevertEvent = TypedEvent< + [string, string, BigNumber, string], + WithdrawAndRevertEventObject +>; + +export type WithdrawAndRevertEventFilter = + TypedEventFilter; + +export interface IERC20CustodyNewEvents extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IERC20CustodyNewEventsInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "Withdraw(address,address,uint256)"( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null + ): WithdrawEventFilter; + Withdraw( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null + ): WithdrawEventFilter; + + "WithdrawAndCall(address,address,uint256,bytes)"( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndCallEventFilter; + WithdrawAndCall( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndCallEventFilter; + + "WithdrawAndRevert(address,address,uint256,bytes)"( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + WithdrawAndRevert( + token?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts new file mode 100644 index 00000000..8106a206 --- /dev/null +++ b/typechain-types/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IERC20CustodyNewErrors } from "./IERC20CustodyNewErrors"; +export type { IERC20CustodyNewEvents } from "./IERC20CustodyNewEvents"; diff --git a/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents.ts b/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents.ts new file mode 100644 index 00000000..555e26e0 --- /dev/null +++ b/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents.ts @@ -0,0 +1,131 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, BigNumber, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../common"; + +export interface IZetaConnectorEventsInterface extends utils.Interface { + functions: {}; + + events: { + "Withdraw(address,uint256)": EventFragment; + "WithdrawAndCall(address,uint256,bytes)": EventFragment; + "WithdrawAndRevert(address,uint256,bytes)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndCall"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndRevert"): EventFragment; +} + +export interface WithdrawEventObject { + to: string; + amount: BigNumber; +} +export type WithdrawEvent = TypedEvent< + [string, BigNumber], + WithdrawEventObject +>; + +export type WithdrawEventFilter = TypedEventFilter; + +export interface WithdrawAndCallEventObject { + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndCallEvent = TypedEvent< + [string, BigNumber, string], + WithdrawAndCallEventObject +>; + +export type WithdrawAndCallEventFilter = TypedEventFilter; + +export interface WithdrawAndRevertEventObject { + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndRevertEvent = TypedEvent< + [string, BigNumber, string], + WithdrawAndRevertEventObject +>; + +export type WithdrawAndRevertEventFilter = + TypedEventFilter; + +export interface IZetaConnectorEvents extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IZetaConnectorEventsInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "Withdraw(address,uint256)"( + to?: PromiseOrValue | null, + amount?: null + ): WithdrawEventFilter; + Withdraw( + to?: PromiseOrValue | null, + amount?: null + ): WithdrawEventFilter; + + "WithdrawAndCall(address,uint256,bytes)"( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndCallEventFilter; + WithdrawAndCall( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndCallEventFilter; + + "WithdrawAndRevert(address,uint256,bytes)"( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + WithdrawAndRevert( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/index.ts b/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/index.ts new file mode 100644 index 00000000..eb97bbe0 --- /dev/null +++ b/typechain-types/contracts/prototypes/evm/IZetaConnector.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IZetaConnectorEvents } from "./IZetaConnectorEvents"; diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts index bd454102..80eca2cf 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts @@ -31,6 +31,7 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { functions: { "gateway()": FunctionFragment; "receiveTokens(uint256)": FunctionFragment; + "tssAddress()": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; @@ -41,6 +42,7 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { nameOrSignatureOrTopic: | "gateway" | "receiveTokens" + | "tssAddress" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -52,6 +54,10 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { functionFragment: "receiveTokens", values: [PromiseOrValue] ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; encodeFunctionData( functionFragment: "withdraw", values: [ @@ -85,6 +91,7 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { functionFragment: "receiveTokens", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -177,6 +184,8 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise<[string]>; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -210,6 +219,8 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -243,6 +254,8 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: CallOverrides ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -310,6 +323,8 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -344,6 +359,8 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts index f2d9ae45..cfd60395 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts @@ -31,6 +31,7 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { functions: { "gateway()": FunctionFragment; "receiveTokens(uint256)": FunctionFragment; + "tssAddress()": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; @@ -41,6 +42,7 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { nameOrSignatureOrTopic: | "gateway" | "receiveTokens" + | "tssAddress" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -52,6 +54,10 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { functionFragment: "receiveTokens", values: [PromiseOrValue] ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; encodeFunctionData( functionFragment: "withdraw", values: [ @@ -85,6 +91,7 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { functionFragment: "receiveTokens", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -177,6 +184,8 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise<[string]>; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -210,6 +219,8 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -243,6 +254,8 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: CallOverrides ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -310,6 +323,8 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -344,6 +359,8 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts index 60cceb56..fa4f18bc 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts @@ -31,6 +31,7 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { functions: { "gateway()": FunctionFragment; "receiveTokens(uint256)": FunctionFragment; + "tssAddress()": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; @@ -41,6 +42,7 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { nameOrSignatureOrTopic: | "gateway" | "receiveTokens" + | "tssAddress" | "withdraw" | "withdrawAndCall" | "withdrawAndRevert" @@ -52,6 +54,10 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { functionFragment: "receiveTokens", values: [PromiseOrValue] ): string; + encodeFunctionData( + functionFragment: "tssAddress", + values?: undefined + ): string; encodeFunctionData( functionFragment: "withdraw", values: [ @@ -85,6 +91,7 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { functionFragment: "receiveTokens", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( functionFragment: "withdrawAndCall", @@ -177,6 +184,8 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise<[string]>; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -210,6 +219,8 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -243,6 +254,8 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: CallOverrides ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -310,6 +323,8 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, @@ -344,6 +359,8 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + tssAddress(overrides?: CallOverrides): Promise; + withdraw( to: PromiseOrValue, amount: PromiseOrValue, diff --git a/typechain-types/contracts/prototypes/evm/index.ts b/typechain-types/contracts/prototypes/evm/index.ts index a75a6c24..bac93995 100644 --- a/typechain-types/contracts/prototypes/evm/index.ts +++ b/typechain-types/contracts/prototypes/evm/index.ts @@ -1,10 +1,14 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +import type * as ierc20CustodyNewSol from "./IERC20CustodyNew.sol"; +export type { ierc20CustodyNewSol }; import type * as iGatewayEvmSol from "./IGatewayEVM.sol"; export type { iGatewayEvmSol }; import type * as iReceiverEvmSol from "./IReceiverEVM.sol"; export type { iReceiverEvmSol }; +import type * as iZetaConnectorSol from "./IZetaConnector.sol"; +export type { iZetaConnectorSol }; export type { ERC20CustodyNew } from "./ERC20CustodyNew"; export type { GatewayEVM } from "./GatewayEVM"; export type { GatewayEVMUpgradeTest } from "./GatewayEVMUpgradeTest"; diff --git a/typechain-types/factories/contracts/prototypes/evm/ERC20CustodyNew__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ERC20CustodyNew__factory.ts index ad58be45..0c59a62b 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ERC20CustodyNew__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ERC20CustodyNew__factory.ts @@ -17,10 +17,20 @@ const _abi = [ name: "_gateway", type: "address", }, + { + internalType: "address", + name: "_tssAddress", + type: "address", + }, ], stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -126,6 +136,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "tssAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -208,7 +231,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200107f3803806200107f833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ee4806200019b6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063116191b61461005157806321fc65f21461006f578063c8a023621461008b578063d9caed12146100a7575b600080fd5b6100596100c3565b6040516100669190610b42565b60405180910390f35b610089600480360381019061008491906108af565b6100e9565b005b6100a560048036038101906100a091906108af565b61024b565b005b6100c160048036038101906100bc919061085c565b6103ad565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100f1610452565b61013e600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b81526004016101a1959493929190610acb565b600060405180830381600087803b1580156101bb57600080fd5b505af11580156101cf573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023493929190610c1a565b60405180910390a3610244610528565b5050505050565b610253610452565b6102a0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8969bd486868686866040518663ffffffff1660e01b8152600401610303959493929190610acb565b600060405180830381600087803b15801561031d57600080fd5b505af1158015610331573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c885858560405161039693929190610c1a565b60405180910390a36103a6610528565b5050505050565b6103b5610452565b6103e082828573ffffffffffffffffffffffffffffffffffffffff166104a29092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8360405161043d9190610bff565b60405180910390a361044d610528565b505050565b60026000541415610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90610bdf565b60405180910390fd5b6002600081905550565b6105238363a9059cbb60e01b84846040516024016104c1929190610b19565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b505050565b6001600081905550565b6000610594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166105f99092919063ffffffff16565b90506000815111156105f457808060200190518101906105b49190610937565b6105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610bbf565b60405180910390fd5b5b505050565b60606106088484600085610611565b90509392505050565b606082471015610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90610b7f565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161067f9190610ab4565b60006040518083038185875af1925050503d80600081146106bc576040519150601f19603f3d011682016040523d82523d6000602084013e6106c1565b606091505b50915091506106d2878383876106de565b92505050949350505050565b6060831561074157600083511415610739576106f985610754565b610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90610b9f565b60405180910390fd5b5b82905061074c565b61074b8383610777565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561078a5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be9190610b5d565b60405180910390fd5b6000813590506107d681610e69565b92915050565b6000815190506107eb81610e80565b92915050565b60008083601f84011261080757610806610d54565b5b8235905067ffffffffffffffff81111561082457610823610d4f565b5b6020830191508360018202830111156108405761083f610d59565b5b9250929050565b60008135905061085681610e97565b92915050565b60008060006060848603121561087557610874610d63565b5b6000610883868287016107c7565b9350506020610894868287016107c7565b92505060406108a586828701610847565b9150509250925092565b6000806000806000608086880312156108cb576108ca610d63565b5b60006108d9888289016107c7565b95505060206108ea888289016107c7565b94505060406108fb88828901610847565b935050606086013567ffffffffffffffff81111561091c5761091b610d5e565b5b610928888289016107f1565b92509250509295509295909350565b60006020828403121561094d5761094c610d63565b5b600061095b848285016107dc565b91505092915050565b61096d81610c8f565b82525050565b600061097f8385610c62565b935061098c838584610d0d565b61099583610d68565b840190509392505050565b60006109ab82610c4c565b6109b58185610c73565b93506109c5818560208601610d1c565b80840191505092915050565b6109da81610cd7565b82525050565b60006109eb82610c57565b6109f58185610c7e565b9350610a05818560208601610d1c565b610a0e81610d68565b840191505092915050565b6000610a26602683610c7e565b9150610a3182610d79565b604082019050919050565b6000610a49601d83610c7e565b9150610a5482610dc8565b602082019050919050565b6000610a6c602a83610c7e565b9150610a7782610df1565b604082019050919050565b6000610a8f601f83610c7e565b9150610a9a82610e40565b602082019050919050565b610aae81610ccd565b82525050565b6000610ac082846109a0565b915081905092915050565b6000608082019050610ae06000830188610964565b610aed6020830187610964565b610afa6040830186610aa5565b8181036060830152610b0d818486610973565b90509695505050505050565b6000604082019050610b2e6000830185610964565b610b3b6020830184610aa5565b9392505050565b6000602082019050610b5760008301846109d1565b92915050565b60006020820190508181036000830152610b7781846109e0565b905092915050565b60006020820190508181036000830152610b9881610a19565b9050919050565b60006020820190508181036000830152610bb881610a3c565b9050919050565b60006020820190508181036000830152610bd881610a5f565b9050919050565b60006020820190508181036000830152610bf881610a82565b9050919050565b6000602082019050610c146000830184610aa5565b92915050565b6000604082019050610c2f6000830186610aa5565b8181036020830152610c42818486610973565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c9a82610cad565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ce282610ce9565b9050919050565b6000610cf482610cfb565b9050919050565b6000610d0682610cad565b9050919050565b82818337600083830152505050565b60005b83811015610d3a578082015181840152602081019050610d1f565b83811115610d49576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e7281610c8f565b8114610e7d57600080fd5b50565b610e8981610ca1565b8114610e9457600080fd5b50565b610ea081610ccd565b8114610eab57600080fd5b5056fea264697066735822122004af522ce13639b271307b4d29ba4ac4a6b589721315ec5393584474746ecd2864736f6c63430008070033"; + "0x60806040523480156200001157600080fd5b506040516200130d3803806200130d833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b6110e3806200022a6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063116191b61461005c57806321fc65f21461007a5780635b11259114610096578063c8a02362146100b4578063d9caed12146100d0575b600080fd5b6100646100ec565b6040516100719190610d41565b60405180910390f35b610094600480360381019061008f9190610a93565b610112565b005b61009e6102fb565b6040516100ab9190610caf565b60405180910390f35b6100ce60048036038101906100c99190610a93565b610321565b005b6100ea60048036038101906100e59190610a40565b61050a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61011a610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101a1576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ee600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b8152600401610251959493929190610cca565b600060405180830381600087803b15801561026b57600080fd5b505af115801561027f573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e8585856040516102e493929190610e19565b60405180910390a36102f461070c565b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610329610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b0576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b8969bd486868686866040518663ffffffff1660e01b8152600401610460959493929190610cca565b600060405180830381600087803b15801561047a57600080fd5b505af115801561048e573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb9d4efa96044e5f5e03e696fa9ae2ff66911cc27e8a637c3627c75bc5b2241c88585856040516104f393929190610e19565b60405180910390a361050361070c565b5050505050565b610512610636565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610599576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c482828573ffffffffffffffffffffffffffffffffffffffff166106869092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516106219190610dfe565b60405180910390a361063161070c565b505050565b6002600054141561067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067390610dde565b60405180910390fd5b6002600081905550565b6107078363a9059cbb60e01b84846040516024016106a5929190610d18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610716565b505050565b6001600081905550565b6000610778826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107dd9092919063ffffffff16565b90506000815111156107d857808060200190518101906107989190610b1b565b6107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90610dbe565b60405180910390fd5b5b505050565b60606107ec84846000856107f5565b90509392505050565b60608247101561083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190610d7e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516108639190610c98565b60006040518083038185875af1925050503d80600081146108a0576040519150601f19603f3d011682016040523d82523d6000602084013e6108a5565b606091505b50915091506108b6878383876108c2565b92505050949350505050565b606083156109255760008351141561091d576108dd85610938565b61091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390610d9e565b60405180910390fd5b5b829050610930565b61092f838361095b565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561096e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a29190610d5c565b60405180910390fd5b6000813590506109ba81611068565b92915050565b6000815190506109cf8161107f565b92915050565b60008083601f8401126109eb576109ea610f53565b5b8235905067ffffffffffffffff811115610a0857610a07610f4e565b5b602083019150836001820283011115610a2457610a23610f58565b5b9250929050565b600081359050610a3a81611096565b92915050565b600080600060608486031215610a5957610a58610f62565b5b6000610a67868287016109ab565b9350506020610a78868287016109ab565b9250506040610a8986828701610a2b565b9150509250925092565b600080600080600060808688031215610aaf57610aae610f62565b5b6000610abd888289016109ab565b9550506020610ace888289016109ab565b9450506040610adf88828901610a2b565b935050606086013567ffffffffffffffff811115610b0057610aff610f5d565b5b610b0c888289016109d5565b92509250509295509295909350565b600060208284031215610b3157610b30610f62565b5b6000610b3f848285016109c0565b91505092915050565b610b5181610e8e565b82525050565b6000610b638385610e61565b9350610b70838584610f0c565b610b7983610f67565b840190509392505050565b6000610b8f82610e4b565b610b998185610e72565b9350610ba9818560208601610f1b565b80840191505092915050565b610bbe81610ed6565b82525050565b6000610bcf82610e56565b610bd98185610e7d565b9350610be9818560208601610f1b565b610bf281610f67565b840191505092915050565b6000610c0a602683610e7d565b9150610c1582610f78565b604082019050919050565b6000610c2d601d83610e7d565b9150610c3882610fc7565b602082019050919050565b6000610c50602a83610e7d565b9150610c5b82610ff0565b604082019050919050565b6000610c73601f83610e7d565b9150610c7e8261103f565b602082019050919050565b610c9281610ecc565b82525050565b6000610ca48284610b84565b915081905092915050565b6000602082019050610cc46000830184610b48565b92915050565b6000608082019050610cdf6000830188610b48565b610cec6020830187610b48565b610cf96040830186610c89565b8181036060830152610d0c818486610b57565b90509695505050505050565b6000604082019050610d2d6000830185610b48565b610d3a6020830184610c89565b9392505050565b6000602082019050610d566000830184610bb5565b92915050565b60006020820190508181036000830152610d768184610bc4565b905092915050565b60006020820190508181036000830152610d9781610bfd565b9050919050565b60006020820190508181036000830152610db781610c20565b9050919050565b60006020820190508181036000830152610dd781610c43565b9050919050565b60006020820190508181036000830152610df781610c66565b9050919050565b6000602082019050610e136000830184610c89565b92915050565b6000604082019050610e2e6000830186610c89565b8181036020830152610e41818486610b57565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610e9982610eac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ee182610ee8565b9050919050565b6000610ef382610efa565b9050919050565b6000610f0582610eac565b9050919050565b82818337600083830152505050565b60005b83811015610f39578082015181840152602081019050610f1e565b83811115610f48576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61107181610e8e565b811461107c57600080fd5b50565b61108881610ea0565b811461109357600080fd5b50565b61109f81610ecc565b81146110aa57600080fd5b5056fea264697066735822122044d7b7350c040f6f061e6eaa0b8afe75af494d90bcf301dc70592c8d6e1c014564736f6c63430008070033"; type ERC20CustodyNewConstructorParams = | [signer?: Signer] @@ -229,15 +252,21 @@ export class ERC20CustodyNew__factory extends ContractFactory { override deploy( _gateway: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise { - return super.deploy(_gateway, overrides || {}) as Promise; + return super.deploy( + _gateway, + _tssAddress, + overrides || {} + ) as Promise; } override getDeployTransaction( _gateway: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): TransactionRequest { - return super.getDeployTransaction(_gateway, overrides || {}); + return super.getDeployTransaction(_gateway, _tssAddress, overrides || {}); } override attach(address: string): ERC20CustodyNew { return super.attach(address) as ERC20CustodyNew; diff --git a/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts b/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts index 3c367941..655c9e4b 100644 --- a/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts @@ -45,6 +45,11 @@ const _abi = [ name: "InsufficientETHAmount", type: "error", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -700,7 +705,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a620a8f5e1407bdf259d6a98d79803d9d2c249529f99712b2a74e1bc0a940a664736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207506291c2cc1340a6799328d29a82686f260d59d78d6f67136dac5bd6578979464736f6c63430008070033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts b/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts index 9b9151ff..b1a5c1ac 100644 --- a/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts @@ -45,6 +45,11 @@ const _abi = [ name: "InsufficientETHAmount", type: "error", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -675,7 +680,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108782611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220062def546691dc60b8b2347c044e9cea9bd00dadb4eab14ae756bd185359a69964736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c6140266200024360003960008181610b3c01528181610bcb01528181610f3501528181610fc4015261140701526140266000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612f0a565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612fff565b610647565b005b6101a660048036038101906101a19190612fff565b6106b3565b6040516101b391906136b5565b60405180910390f35b3480156101c857600080fd5b506101d16107a8565b6040516101de91906135d2565b60405180910390f35b61020160048036038101906101fc9190612fff565b6107ce565b005b61021d60048036038101906102189190612fff565b610948565b005b34801561022b57600080fd5b5061024660048036038101906102419190612f0a565b610b3a565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612f37565b610cc3565b005b61028b6004803603810190610286919061305f565b610f33565b005b34801561029957600080fd5b506102b460048036038101906102af9190612f77565b611070565b005b3480156102c257600080fd5b506102cb611403565b6040516102d89190613676565b60405180910390f35b3480156102ed57600080fd5b506102f66114bc565b60405161030391906135d2565b60405180910390f35b34801561031857600080fd5b506103216114e2565b60405161032e91906135d2565b60405180910390f35b34801561034357600080fd5b5061034c611508565b005b34801561035a57600080fd5b506103756004803603810190610370919061310e565b61151c565b005b34801561038357600080fd5b5061038c6115d4565b60405161039991906135d2565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612f0a565b6115fe565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612f77565b6117b8565b005b34801561040057600080fd5b506104096119ee565b60405161041691906135d2565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f0a565b611a14565b005b610462600480360381019061045d9190612f0a565b611a98565b005b34801561047057600080fd5b5061048b600480360381019061048691906130bb565b611c0c565b005b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610514576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461059c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610603576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde384846040516106a6929190613691565b60405180910390a3505050565b606060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610749858585611cbe565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516107959392919061396b565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415610809576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610851906135bd565b60006040518083038185875af1925050503d806000811461088e576040519150601f19603f3d011682016040523d82523d6000602084013e610893565b606091505b505090506000151581151514156108d6576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161093a94939291906138ef565b60405180910390a350505050565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109cf576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16346040516109f6906135bd565b60006040518083038185875af1925050503d8060008114610a33576040519150601f19603f3d011682016040523d82523d6000602084013e610a38565b606091505b509150915081610a74576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b8152600401610aaf929190613691565b600060405180830381600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c348686604051610b2b9392919061396b565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc090613734565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c08611d75565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590613754565b60405180910390fd5b610c6781611dcc565b610cc081600067ffffffffffffffff811115610c8657610c85613b2c565b5b6040519080825280601f01601f191660200182016040528015610cb85781602001600182028036833780820191505090505b506000611dd7565b50565b60008060019054906101000a900460ff16159050808015610cf45750600160008054906101000a900460ff1660ff16105b80610d215750610d0330611f54565b158015610d205750600160008054906101000a900460ff1660ff16145b5b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610d9d576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e045750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610e3b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e43611f77565b610e4b611fd0565b610e53612021565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610f2e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610f2591906136d7565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990613734565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611001611d75565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90613754565b60405180910390fd5b61106082611dcc565b61106c82826001611dd7565b5050565b61107861207a565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611124575060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561115b576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415611196576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a085856120ca565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b815260040161121192919061364d565b602060405180830381600087803b15801561122b57600080fd5b505af115801561123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112639190613196565b611299576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112a6858484611cbe565b90506112b286866120ca565b6112e8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161132391906135d2565b60206040518083038186803b15801561133b57600080fd5b505afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906131f0565b90506000811115611389576113888782612162565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516113ea9392919061396b565b60405180910390a350506113fc61234c565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613794565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611510612356565b61151a60006123d4565b565b6000841415611557576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61156233848661249a565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4868686866040516115c594939291906138ef565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611685576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170d576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611774576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117c061207a565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561186c575060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156118a3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156118de576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190984848773ffffffffffffffffffffffffffffffffffffffff166126b49092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b8152600401611944929190613691565b600060405180830381600087803b15801561195e57600080fd5b505af1158015611972573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516119d79392919061396b565b60405180910390a36119e761234c565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c612356565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390613714565b60405180910390fd5b611a95816123d4565b50565b6000341415611ad3576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611b1b906135bd565b60006040518083038185875af1925050503d8060008114611b58576040519150601f19603f3d011682016040523d82523d6000602084013e611b5d565b606091505b50509050600015158115151415611ba0576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000604051611c0092919061392f565b60405180910390a35050565b6000821415611c47576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c5233828461249a565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48484604051611cb192919061392f565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16348686604051611ceb92919061358d565b60006040518083038185875af1925050503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b509150915081611d69576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b6000611da37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61273a565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611dd4612356565b50565b611e037f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612744565b60000160009054906101000a900460ff1615611e2757611e228361274e565b611f4f565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6d57600080fd5b505afa925050508015611e9e57506040513d601f19601f82011682018060405250810190611e9b91906131c3565b60015b611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906137f4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906137b4565b60405180910390fd5b50611f4e838383612807565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd90613874565b60405180910390fd5b611fce612833565b565b600060019054906101000a900460ff1661201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613874565b60405180910390fd5b565b600060019054906101000a900460ff16612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790613874565b60405180910390fd5b612078612894565b565b600260c95414156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906138b4565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401612108929190613624565b602060405180830381600087803b15801561212257600080fd5b505af1158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190613196565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fa578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161221592919061364d565b602060405180830381600087803b15801561222f57600080fd5b505af1158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613196565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b81526004016122c391906138d4565b600060405180830381600087803b1580156122dd57600080fd5b505af11580156122f1573d6000803e3d6000fd5b50505050612348565b61234760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166126b49092919063ffffffff16565b5b5050565b600160c981905550565b61235e6128ed565b73ffffffffffffffffffffffffffffffffffffffff1661237c6115d4565b73ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c990613834565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265f5761251d8330838573ffffffffffffffffffffffffffffffffffffffff166128f5909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161257a92919061364d565b602060405180830381600087803b15801561259457600080fd5b505af11580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190613196565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161262891906138d4565b600060405180830381600087803b15801561264257600080fd5b505af1158015612656573d6000803e3d6000fd5b505050506126af565b6126ae8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff166128f5909392919063ffffffff16565b5b505050565b6127358363a9059cbb60e01b84846040516024016126d392919061364d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061297e565b505050565b6000819050919050565b6000819050919050565b61275781611f54565b612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90613814565b60405180910390fd5b806127c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61273a565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61281083612a45565b60008251118061281d5750805b1561282e5761282c8383612a94565b505b505050565b600060019054906101000a900460ff16612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287990613874565b60405180910390fd5b61289261288d6128ed565b6123d4565b565b600060019054906101000a900460ff166128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90613874565b60405180910390fd5b600160c981905550565b600033905090565b612978846323b872dd60e01b858585604051602401612916939291906135ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061297e565b50505050565b60006129e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ac19092919063ffffffff16565b9050600081511115612a405780806020019051810190612a009190613196565b612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3690613894565b60405180910390fd5b5b505050565b612a4e8161274e565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060612ab98383604051806060016040528060278152602001613fca60279139612ad9565b905092915050565b6060612ad08484600085612b5f565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051612b0391906135a6565b600060405180830381855af49150503d8060008114612b3e576040519150601f19603f3d011682016040523d82523d6000602084013e612b43565b606091505b5091509150612b5486838387612c2c565b925050509392505050565b606082471015612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90613774565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612bcd91906135a6565b60006040518083038185875af1925050503d8060008114612c0a576040519150601f19603f3d011682016040523d82523d6000602084013e612c0f565b606091505b5091509150612c2087838387612ca2565b92505050949350505050565b60608315612c8f57600083511415612c8757612c4785611f54565b612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d90613854565b60405180910390fd5b5b829050612c9a565b612c998383612d18565b5b949350505050565b60608315612d0557600083511415612cfd57612cbd85612d68565b612cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf390613854565b60405180910390fd5b5b829050612d10565b612d0f8383612d8b565b5b949350505050565b600082511115612d2b5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f91906136f2565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115612d9e5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd291906136f2565b60405180910390fd5b6000612dee612de9846139c2565b61399d565b905082815260208101848484011115612e0a57612e09613b6a565b5b612e15848285613ab9565b509392505050565b600081359050612e2c81613f6d565b92915050565b600081519050612e4181613f84565b92915050565b600081519050612e5681613f9b565b92915050565b60008083601f840112612e7257612e71613b60565b5b8235905067ffffffffffffffff811115612e8f57612e8e613b5b565b5b602083019150836001820283011115612eab57612eaa613b65565b5b9250929050565b600082601f830112612ec757612ec6613b60565b5b8135612ed7848260208601612ddb565b91505092915050565b600081359050612eef81613fb2565b92915050565b600081519050612f0481613fb2565b92915050565b600060208284031215612f2057612f1f613b74565b5b6000612f2e84828501612e1d565b91505092915050565b60008060408385031215612f4e57612f4d613b74565b5b6000612f5c85828601612e1d565b9250506020612f6d85828601612e1d565b9150509250929050565b600080600080600060808688031215612f9357612f92613b74565b5b6000612fa188828901612e1d565b9550506020612fb288828901612e1d565b9450506040612fc388828901612ee0565b935050606086013567ffffffffffffffff811115612fe457612fe3613b6f565b5b612ff088828901612e5c565b92509250509295509295909350565b60008060006040848603121561301857613017613b74565b5b600061302686828701612e1d565b935050602084013567ffffffffffffffff81111561304757613046613b6f565b5b61305386828701612e5c565b92509250509250925092565b6000806040838503121561307657613075613b74565b5b600061308485828601612e1d565b925050602083013567ffffffffffffffff8111156130a5576130a4613b6f565b5b6130b185828601612eb2565b9150509250929050565b6000806000606084860312156130d4576130d3613b74565b5b60006130e286828701612e1d565b93505060206130f386828701612ee0565b925050604061310486828701612e1d565b9150509250925092565b60008060008060006080868803121561312a57613129613b74565b5b600061313888828901612e1d565b955050602061314988828901612ee0565b945050604061315a88828901612e1d565b935050606086013567ffffffffffffffff81111561317b5761317a613b6f565b5b61318788828901612e5c565b92509250509295509295909350565b6000602082840312156131ac576131ab613b74565b5b60006131ba84828501612e32565b91505092915050565b6000602082840312156131d9576131d8613b74565b5b60006131e784828501612e47565b91505092915050565b60006020828403121561320657613205613b74565b5b600061321484828501612ef5565b91505092915050565b61322681613a36565b82525050565b61323581613a54565b82525050565b60006132478385613a09565b9350613254838584613ab9565b61325d83613b79565b840190509392505050565b60006132748385613a1a565b9350613281838584613ab9565b82840190509392505050565b6000613298826139f3565b6132a28185613a09565b93506132b2818560208601613ac8565b6132bb81613b79565b840191505092915050565b60006132d1826139f3565b6132db8185613a1a565b93506132eb818560208601613ac8565b80840191505092915050565b61330081613a95565b82525050565b61330f81613aa7565b82525050565b6000613320826139fe565b61332a8185613a25565b935061333a818560208601613ac8565b61334381613b79565b840191505092915050565b600061335b602683613a25565b915061336682613b8a565b604082019050919050565b600061337e602c83613a25565b915061338982613bd9565b604082019050919050565b60006133a1602c83613a25565b91506133ac82613c28565b604082019050919050565b60006133c4602683613a25565b91506133cf82613c77565b604082019050919050565b60006133e7603883613a25565b91506133f282613cc6565b604082019050919050565b600061340a602983613a25565b915061341582613d15565b604082019050919050565b600061342d602e83613a25565b915061343882613d64565b604082019050919050565b6000613450602e83613a25565b915061345b82613db3565b604082019050919050565b6000613473602d83613a25565b915061347e82613e02565b604082019050919050565b6000613496602083613a25565b91506134a182613e51565b602082019050919050565b60006134b9600083613a09565b91506134c482613e7a565b600082019050919050565b60006134dc600083613a1a565b91506134e782613e7a565b600082019050919050565b60006134ff601d83613a25565b915061350a82613e7d565b602082019050919050565b6000613522602b83613a25565b915061352d82613ea6565b604082019050919050565b6000613545602a83613a25565b915061355082613ef5565b604082019050919050565b6000613568601f83613a25565b915061357382613f44565b602082019050919050565b61358781613a7e565b82525050565b600061359a828486613268565b91508190509392505050565b60006135b282846132c6565b915081905092915050565b60006135c8826134cf565b9150819050919050565b60006020820190506135e7600083018461321d565b92915050565b6000606082019050613602600083018661321d565b61360f602083018561321d565b61361c604083018461357e565b949350505050565b6000604082019050613639600083018561321d565b61364660208301846132f7565b9392505050565b6000604082019050613662600083018561321d565b61366f602083018461357e565b9392505050565b600060208201905061368b600083018461322c565b92915050565b600060208201905081810360008301526136ac81848661323b565b90509392505050565b600060208201905081810360008301526136cf818461328d565b905092915050565b60006020820190506136ec6000830184613306565b92915050565b6000602082019050818103600083015261370c8184613315565b905092915050565b6000602082019050818103600083015261372d8161334e565b9050919050565b6000602082019050818103600083015261374d81613371565b9050919050565b6000602082019050818103600083015261376d81613394565b9050919050565b6000602082019050818103600083015261378d816133b7565b9050919050565b600060208201905081810360008301526137ad816133da565b9050919050565b600060208201905081810360008301526137cd816133fd565b9050919050565b600060208201905081810360008301526137ed81613420565b9050919050565b6000602082019050818103600083015261380d81613443565b9050919050565b6000602082019050818103600083015261382d81613466565b9050919050565b6000602082019050818103600083015261384d81613489565b9050919050565b6000602082019050818103600083015261386d816134f2565b9050919050565b6000602082019050818103600083015261388d81613515565b9050919050565b600060208201905081810360008301526138ad81613538565b9050919050565b600060208201905081810360008301526138cd8161355b565b9050919050565b60006020820190506138e9600083018461357e565b92915050565b6000606082019050613904600083018761357e565b613911602083018661321d565b818103604083015261392481848661323b565b905095945050505050565b6000606082019050613944600083018561357e565b613951602083018461321d565b8181036040830152613962816134ac565b90509392505050565b6000604082019050613980600083018661357e565b818103602083015261399381848661323b565b9050949350505050565b60006139a76139b8565b90506139b38282613afb565b919050565b6000604051905090565b600067ffffffffffffffff8211156139dd576139dc613b2c565b5b6139e682613b79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613a4182613a5e565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613aa082613a7e565b9050919050565b6000613ab282613a88565b9050919050565b82818337600083830152505050565b60005b83811015613ae6578082015181840152602081019050613acb565b83811115613af5576000848401525b50505050565b613b0482613b79565b810181811067ffffffffffffffff82111715613b2357613b22613b2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613f7681613a36565b8114613f8157600080fd5b50565b613f8d81613a48565b8114613f9857600080fd5b50565b613fa481613a54565b8114613faf57600080fd5b50565b613fbb81613a7e565b8114613fc657600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4d187c762f40390aee121e3267997df07017a0032a9b500d43abd12e540b6bd64736f6c63430008070033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors__factory.ts b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors__factory.ts new file mode 100644 index 00000000..d751d847 --- /dev/null +++ b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors__factory.ts @@ -0,0 +1,40 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20CustodyNewErrors, + IERC20CustodyNewErrorsInterface, +} from "../../../../../contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors"; + +const _abi = [ + { + inputs: [], + name: "InvalidSender", + type: "error", + }, + { + inputs: [], + name: "ZeroAddress", + type: "error", + }, +] as const; + +export class IERC20CustodyNewErrors__factory { + static readonly abi = _abi; + static createInterface(): IERC20CustodyNewErrorsInterface { + return new utils.Interface(_abi) as IERC20CustodyNewErrorsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC20CustodyNewErrors { + return new Contract( + address, + _abi, + signerOrProvider + ) as IERC20CustodyNewErrors; + } +} diff --git a/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents__factory.ts b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents__factory.ts new file mode 100644 index 00000000..aff1dbc0 --- /dev/null +++ b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents__factory.ts @@ -0,0 +1,117 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IERC20CustodyNewEvents, + IERC20CustodyNewEventsInterface, +} from "../../../../../contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "token", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdraw", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "token", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndCall", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "token", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndRevert", + type: "event", + }, +] as const; + +export class IERC20CustodyNewEvents__factory { + static readonly abi = _abi; + static createInterface(): IERC20CustodyNewEventsInterface { + return new utils.Interface(_abi) as IERC20CustodyNewEventsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IERC20CustodyNewEvents { + return new Contract( + address, + _abi, + signerOrProvider + ) as IERC20CustodyNewEvents; + } +} diff --git a/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts new file mode 100644 index 00000000..9f3d2112 --- /dev/null +++ b/typechain-types/factories/contracts/prototypes/evm/IERC20CustodyNew.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IERC20CustodyNewErrors__factory } from "./IERC20CustodyNewErrors__factory"; +export { IERC20CustodyNewEvents__factory } from "./IERC20CustodyNewEvents__factory"; diff --git a/typechain-types/factories/contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts b/typechain-types/factories/contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts index f7e393b3..43023c05 100644 --- a/typechain-types/factories/contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts @@ -40,6 +40,11 @@ const _abi = [ name: "InsufficientETHAmount", type: "error", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", diff --git a/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents__factory.ts b/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents__factory.ts new file mode 100644 index 00000000..c7408d4c --- /dev/null +++ b/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents__factory.ts @@ -0,0 +1,99 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IZetaConnectorEvents, + IZetaConnectorEventsInterface, +} from "../../../../../contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "Withdraw", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndCall", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndRevert", + type: "event", + }, +] as const; + +export class IZetaConnectorEvents__factory { + static readonly abi = _abi; + static createInterface(): IZetaConnectorEventsInterface { + return new utils.Interface(_abi) as IZetaConnectorEventsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IZetaConnectorEvents { + return new Contract( + address, + _abi, + signerOrProvider + ) as IZetaConnectorEvents; + } +} diff --git a/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/index.ts b/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/index.ts new file mode 100644 index 00000000..a60ddc89 --- /dev/null +++ b/typechain-types/factories/contracts/prototypes/evm/IZetaConnector.sol/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IZetaConnectorEvents__factory } from "./IZetaConnectorEvents__factory"; diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts index 059b97ae..e0e2a177 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts @@ -22,10 +22,20 @@ const _abi = [ name: "_zetaToken", type: "address", }, + { + internalType: "address", + name: "_tssAddress", + type: "address", + }, ], stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -126,6 +136,19 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "tssAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -221,7 +244,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b50604051620013b3380380620013b3833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c6111376200027c60003960008181610142015281816101c4015281816102a90152818161036e015281816103bf01528181610441015261051f015260008181610120015281816101880152818161034a0152818161039d015261040501526111376000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c9190610a62565b610113565b005b61009d60048036038101906100989190610a0f565b61029a565b005b6100a7610348565b6040516100b49190610d74565b60405180910390f35b6100c561036c565b6040516100d29190610cab565b60405180910390f35b6100f560048036038101906100f09190610a62565b610390565b005b610111600480360381019061010c9190610b17565b610517565b005b61011b610567565b6101867f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610207959493929190610cfd565b600060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161028393929190610e4c565b60405180910390a261029361063d565b5050505050565b6102a2610567565b6102ed83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103339190610e31565b60405180910390a261034361063d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610398610567565b6104037f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610484959493929190610cfd565b600060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161050093929190610e4c565b60405180910390a261051061063d565b5050505050565b6105643330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610647909392919063ffffffff16565b50565b600260005414156105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490610e11565b60405180910390fd5b6002600081905550565b6106388363a9059cbb60e01b84846040516024016105d6929190610d4b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b505050565b6001600081905550565b6106ca846323b872dd60e01b85858560405160240161066893929190610cc6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b50505050565b6000610732826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107979092919063ffffffff16565b905060008151111561079257808060200190518101906107529190610aea565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078890610df1565b60405180910390fd5b5b505050565b60606107a684846000856107af565b90509392505050565b6060824710156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90610db1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161081d9190610c94565b60006040518083038185875af1925050503d806000811461085a576040519150601f19603f3d011682016040523d82523d6000602084013e61085f565b606091505b50915091506108708783838761087c565b92505050949350505050565b606083156108df576000835114156108d757610897856108f2565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90610dd1565b60405180910390fd5b5b8290506108ea565b6108e98383610915565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156109285781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9190610d8f565b60405180910390fd5b600081359050610974816110a5565b92915050565b600081519050610989816110bc565b92915050565b60008135905061099e816110d3565b92915050565b60008083601f8401126109ba576109b9610f90565b5b8235905067ffffffffffffffff8111156109d7576109d6610f8b565b5b6020830191508360018202830111156109f3576109f2610f95565b5b9250929050565b600081359050610a09816110ea565b92915050565b600080600060608486031215610a2857610a27610f9f565b5b6000610a3686828701610965565b9350506020610a47868287016109fa565b9250506040610a588682870161098f565b9150509250925092565b600080600080600060808688031215610a7e57610a7d610f9f565b5b6000610a8c88828901610965565b9550506020610a9d888289016109fa565b945050604086013567ffffffffffffffff811115610abe57610abd610f9a565b5b610aca888289016109a4565b93509350506060610add8882890161098f565b9150509295509295909350565b600060208284031215610b0057610aff610f9f565b5b6000610b0e8482850161097a565b91505092915050565b600060208284031215610b2d57610b2c610f9f565b5b6000610b3b848285016109fa565b91505092915050565b610b4d81610ec1565b82525050565b6000610b5f8385610e94565b9350610b6c838584610f49565b610b7583610fa4565b840190509392505050565b6000610b8b82610e7e565b610b958185610ea5565b9350610ba5818560208601610f58565b80840191505092915050565b610bba81610f13565b82525050565b6000610bcb82610e89565b610bd58185610eb0565b9350610be5818560208601610f58565b610bee81610fa4565b840191505092915050565b6000610c06602683610eb0565b9150610c1182610fb5565b604082019050919050565b6000610c29601d83610eb0565b9150610c3482611004565b602082019050919050565b6000610c4c602a83610eb0565b9150610c578261102d565b604082019050919050565b6000610c6f601f83610eb0565b9150610c7a8261107c565b602082019050919050565b610c8e81610f09565b82525050565b6000610ca08284610b80565b915081905092915050565b6000602082019050610cc06000830184610b44565b92915050565b6000606082019050610cdb6000830186610b44565b610ce86020830185610b44565b610cf56040830184610c85565b949350505050565b6000608082019050610d126000830188610b44565b610d1f6020830187610b44565b610d2c6040830186610c85565b8181036060830152610d3f818486610b53565b90509695505050505050565b6000604082019050610d606000830185610b44565b610d6d6020830184610c85565b9392505050565b6000602082019050610d896000830184610bb1565b92915050565b60006020820190508181036000830152610da98184610bc0565b905092915050565b60006020820190508181036000830152610dca81610bf9565b9050919050565b60006020820190508181036000830152610dea81610c1c565b9050919050565b60006020820190508181036000830152610e0a81610c3f565b9050919050565b60006020820190508181036000830152610e2a81610c62565b9050919050565b6000602082019050610e466000830184610c85565b92915050565b6000604082019050610e616000830186610c85565b8181036020830152610e74818486610b53565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610ecc82610ee9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610f1e82610f25565b9050919050565b6000610f3082610f37565b9050919050565b6000610f4282610ee9565b9050919050565b82818337600083830152505050565b60005b83811015610f76578082015181840152602081019050610f5b565b83811115610f85576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6110ae81610ec1565b81146110b957600080fd5b50565b6110c581610ed3565b81146110d057600080fd5b50565b6110dc81610edf565b81146110e757600080fd5b50565b6110f381610f09565b81146110fe57600080fd5b5056fea26469706673582212200e9dddf368c3ba5db7f48f5e58ca49b68962f70e56e54ab42ef1145f5ce62e6164736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b5060405162001638380380620016388339818101604052810190620000379190620001ec565b8282826001600081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620000aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620000e25750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200011a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200029b565b600081519050620001e68162000281565b92915050565b6000806000606084860312156200020857620002076200027c565b5b60006200021886828701620001d5565b93505060206200022b86828701620001d5565b92505060406200023e86828701620001d5565b9150509250925092565b600062000255826200025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200028c8162000248565b81146200029857600080fd5b50565b60805160601c60a05160601c61132b6200030d6000396000818161020201528181610284015281816103f0015281816104b5015281816105b30152818161063501526107130152600081816101e001528181610248015281816104910152818161059101526105f9015261132b6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806321e093b11161005b57806321e093b1146100d85780635b112591146100f65780635e3e9fef14610114578063743e0c9b146101305761007d565b806302d5c89914610082578063106e62901461009e578063116191b6146100ba575b600080fd5b61009c60048036038101906100979190610c56565b61014c565b005b6100b860048036038101906100b39190610c03565b61035a565b005b6100c261048f565b6040516100cf9190610f68565b60405180910390f35b6100e06104b3565b6040516100ed9190610e9f565b60405180910390f35b6100fe6104d7565b60405161010b9190610e9f565b60405180910390f35b61012e60048036038101906101299190610c56565b6104fd565b005b61014a60048036038101906101459190610d0b565b61070b565b005b61015461075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101db576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102467f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b81526004016102c7959493929190610ef1565b600060405180830381600087803b1580156102e157600080fd5b505af11580156102f5573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161034393929190611040565b60405180910390a2610353610831565b5050505050565b61036261075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103e9576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61043483837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648360405161047a9190611025565b60405180910390a261048a610831565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61050561075b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461058c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f77f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166107ab9092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610678959493929190610ef1565b600060405180830381600087803b15801561069257600080fd5b505af11580156106a6573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516106f493929190611040565b60405180910390a2610704610831565b5050505050565b6107583330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661083b909392919063ffffffff16565b50565b600260005414156107a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079890611005565b60405180910390fd5b6002600081905550565b61082c8363a9059cbb60e01b84846040516024016107ca929190610f3f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506108c4565b505050565b6001600081905550565b6108be846323b872dd60e01b85858560405160240161085c93929190610eba565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506108c4565b50505050565b6000610926826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661098b9092919063ffffffff16565b905060008151111561098657808060200190518101906109469190610cde565b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90610fe5565b60405180910390fd5b5b505050565b606061099a84846000856109a3565b90509392505050565b6060824710156109e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109df90610fa5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a119190610e88565b60006040518083038185875af1925050503d8060008114610a4e576040519150601f19603f3d011682016040523d82523d6000602084013e610a53565b606091505b5091509150610a6487838387610a70565b92505050949350505050565b60608315610ad357600083511415610acb57610a8b85610ae6565b610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190610fc5565b60405180910390fd5b5b829050610ade565b610add8383610b09565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115610b1c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b509190610f83565b60405180910390fd5b600081359050610b6881611299565b92915050565b600081519050610b7d816112b0565b92915050565b600081359050610b92816112c7565b92915050565b60008083601f840112610bae57610bad611184565b5b8235905067ffffffffffffffff811115610bcb57610bca61117f565b5b602083019150836001820283011115610be757610be6611189565b5b9250929050565b600081359050610bfd816112de565b92915050565b600080600060608486031215610c1c57610c1b611193565b5b6000610c2a86828701610b59565b9350506020610c3b86828701610bee565b9250506040610c4c86828701610b83565b9150509250925092565b600080600080600060808688031215610c7257610c71611193565b5b6000610c8088828901610b59565b9550506020610c9188828901610bee565b945050604086013567ffffffffffffffff811115610cb257610cb161118e565b5b610cbe88828901610b98565b93509350506060610cd188828901610b83565b9150509295509295909350565b600060208284031215610cf457610cf3611193565b5b6000610d0284828501610b6e565b91505092915050565b600060208284031215610d2157610d20611193565b5b6000610d2f84828501610bee565b91505092915050565b610d41816110b5565b82525050565b6000610d538385611088565b9350610d6083858461113d565b610d6983611198565b840190509392505050565b6000610d7f82611072565b610d898185611099565b9350610d9981856020860161114c565b80840191505092915050565b610dae81611107565b82525050565b6000610dbf8261107d565b610dc981856110a4565b9350610dd981856020860161114c565b610de281611198565b840191505092915050565b6000610dfa6026836110a4565b9150610e05826111a9565b604082019050919050565b6000610e1d601d836110a4565b9150610e28826111f8565b602082019050919050565b6000610e40602a836110a4565b9150610e4b82611221565b604082019050919050565b6000610e63601f836110a4565b9150610e6e82611270565b602082019050919050565b610e82816110fd565b82525050565b6000610e948284610d74565b915081905092915050565b6000602082019050610eb46000830184610d38565b92915050565b6000606082019050610ecf6000830186610d38565b610edc6020830185610d38565b610ee96040830184610e79565b949350505050565b6000608082019050610f066000830188610d38565b610f136020830187610d38565b610f206040830186610e79565b8181036060830152610f33818486610d47565b90509695505050505050565b6000604082019050610f546000830185610d38565b610f616020830184610e79565b9392505050565b6000602082019050610f7d6000830184610da5565b92915050565b60006020820190508181036000830152610f9d8184610db4565b905092915050565b60006020820190508181036000830152610fbe81610ded565b9050919050565b60006020820190508181036000830152610fde81610e10565b9050919050565b60006020820190508181036000830152610ffe81610e33565b9050919050565b6000602082019050818103600083015261101e81610e56565b9050919050565b600060208201905061103a6000830184610e79565b92915050565b60006040820190506110556000830186610e79565b8181036020830152611068818486610d47565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006110c0826110dd565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061111282611119565b9050919050565b60006111248261112b565b9050919050565b6000611136826110dd565b9050919050565b82818337600083830152505050565b60005b8381101561116a57808201518184015260208101905061114f565b83811115611179576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6112a2816110b5565b81146112ad57600080fd5b50565b6112b9816110c7565b81146112c457600080fd5b50565b6112d0816110d3565b81146112db57600080fd5b50565b6112e7816110fd565b81146112f257600080fd5b5056fea2646970667358221220724dfbb3e6e4b9c22a02d27916991d2dd9a38c585c03f6d0aef019c03f957ee464736f6c63430008070033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] @@ -243,20 +266,28 @@ export class ZetaConnectorNative__factory extends ContractFactory { override deploy( _gateway: PromiseOrValue, _zetaToken: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise { return super.deploy( _gateway, _zetaToken, + _tssAddress, overrides || {} ) as Promise; } override getDeployTransaction( _gateway: PromiseOrValue, _zetaToken: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): TransactionRequest { - return super.getDeployTransaction(_gateway, _zetaToken, overrides || {}); + return super.getDeployTransaction( + _gateway, + _zetaToken, + _tssAddress, + overrides || {} + ); } override attach(address: string): ZetaConnectorNative { return super.attach(address) as ZetaConnectorNative; diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts index d0de9e91..1a3db640 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts @@ -10,6 +10,11 @@ import type { } from "../../../../contracts/prototypes/evm/ZetaConnectorNewBase"; const _abi = [ + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -110,6 +115,19 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "tssAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts index 053e64b9..e418b28d 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts @@ -22,10 +22,20 @@ const _abi = [ name: "_zetaToken", type: "address", }, + { + internalType: "address", + name: "_tssAddress", + type: "address", + }, ], stateMutability: "nonpayable", type: "constructor", }, + { + inputs: [], + name: "InvalidSender", + type: "error", + }, { inputs: [], name: "ZeroAddress", @@ -126,6 +136,19 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "tssAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -221,7 +244,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405162000e2a38038062000e2a83398181016040528101906100349190610168565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a55750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f6565b600081519050610162816101df565b92915050565b6000806040838503121561017f5761017e6101da565b5b600061018d85828601610153565b925050602061019e85828601610153565b9150509250929050565b60006101b3826101ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e8816101a8565b81146101f357600080fd5b50565b60805160601c60a05160601c610bc2620002686000396000818161011d01528181610208015281816102e8015281816103f6015281816104220152818161050d01526105e5015260008181610159015281816101cc015281816103d20152818161045e01526104d10152610bc26000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c91906107b5565b610113565b005b61009d60048036038101906100989190610762565b6102de565b005b6100a76103d0565b6040516100b491906109bf565b60405180910390f35b6100c56103f4565b6040516100d291906108f6565b60405180910390f35b6100f560048036038101906100f091906107b5565b610418565b005b610111600480360381019061010c919061083d565b6105e3565b005b61011b610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161019893929190610988565b600060405180830381600087803b1580156101b257600080fd5b505af11580156101c6573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161024b959493929190610911565b600060405180830381600087803b15801561026557600080fd5b505af1158015610279573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8585856040516102c793929190610a15565b60405180910390a26102d76106c3565b5050505050565b6102e6610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161034393929190610988565b600060405180830381600087803b15801561035d57600080fd5b505af1158015610371573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103bb91906109fa565b60405180910390a26103cb6106c3565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610420610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161049d93929190610988565b600060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610550959493929190610911565b600060405180830381600087803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516105cc93929190610a15565b60405180910390a26105dc6106c3565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161063e92919061095f565b600060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b5050505050565b600260005414156106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b0906109da565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506106dc81610b47565b92915050565b6000813590506106f181610b5e565b92915050565b60008083601f84011261070d5761070c610af9565b5b8235905067ffffffffffffffff81111561072a57610729610af4565b5b60208301915083600182028301111561074657610745610afe565b5b9250929050565b60008135905061075c81610b75565b92915050565b60008060006060848603121561077b5761077a610b08565b5b6000610789868287016106cd565b935050602061079a8682870161074d565b92505060406107ab868287016106e2565b9150509250925092565b6000806000806000608086880312156107d1576107d0610b08565b5b60006107df888289016106cd565b95505060206107f08882890161074d565b945050604086013567ffffffffffffffff81111561081157610810610b03565b5b61081d888289016106f7565b93509350506060610830888289016106e2565b9150509295509295909350565b60006020828403121561085357610852610b08565b5b60006108618482850161074d565b91505092915050565b61087381610a69565b82525050565b61088281610a7b565b82525050565b60006108948385610a47565b93506108a1838584610ae5565b6108aa83610b0d565b840190509392505050565b6108be81610aaf565b82525050565b60006108d1601f83610a58565b91506108dc82610b1e565b602082019050919050565b6108f081610aa5565b82525050565b600060208201905061090b600083018461086a565b92915050565b6000608082019050610926600083018861086a565b610933602083018761086a565b61094060408301866108e7565b8181036060830152610953818486610888565b90509695505050505050565b6000604082019050610974600083018561086a565b61098160208301846108e7565b9392505050565b600060608201905061099d600083018661086a565b6109aa60208301856108e7565b6109b76040830184610879565b949350505050565b60006020820190506109d460008301846108b5565b92915050565b600060208201905081810360008301526109f3816108c4565b9050919050565b6000602082019050610a0f60008301846108e7565b92915050565b6000604082019050610a2a60008301866108e7565b8181036020830152610a3d818486610888565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610a7482610a85565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610aba82610ac1565b9050919050565b6000610acc82610ad3565b9050919050565b6000610ade82610a85565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610b5081610a69565b8114610b5b57600080fd5b50565b610b6781610a7b565b8114610b7257600080fd5b50565b610b7e81610aa5565b8114610b8957600080fd5b5056fea26469706673582212207419360613ac73b5058589625b8f7b6c4071be5eb2e75aa5b04480ab384dc33b64736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b50604051620010c3380380620010c38339818101604052810190620000379190620001ec565b8282826001600081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620000aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620000e25750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200011a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200029b565b600081519050620001e68162000281565b92915050565b6000806000606084860312156200020857620002076200027c565b5b60006200021886828701620001d5565b93505060206200022b86828701620001d5565b92505060406200023e86828701620001d5565b9150509250925092565b600062000255826200025c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200028c8162000248565b81146200029857600080fd5b50565b60805160601c60a05160601c610db66200030d600039600081816101dd015281816102c80152818161042f0152818161053d015281816106160152818161070101526107d90152600081816102190152818161028c015281816105190152818161065201526106c50152610db66000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806321e093b11161005b57806321e093b1146100d85780635b112591146100f65780635e3e9fef14610114578063743e0c9b146101305761007d565b806302d5c89914610082578063106e62901461009e578063116191b6146100ba575b600080fd5b61009c600480360381019061009791906109a9565b61014c565b005b6100b860048036038101906100b39190610956565b61039e565b005b6100c2610517565b6040516100cf9190610bb3565b60405180910390f35b6100e061053b565b6040516100ed9190610aea565b60405180910390f35b6100fe61055f565b60405161010b9190610aea565b60405180910390f35b61012e600480360381019061012991906109a9565b610585565b005b61014a60048036038101906101459190610a31565b6107d7565b005b610154610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101db576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161025893929190610b7c565b600060405180830381600087803b15801561027257600080fd5b505af1158015610286573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161030b959493929190610b05565b600060405180830381600087803b15801561032557600080fd5b505af1158015610339573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161038793929190610c09565b60405180910390a26103976108b7565b5050505050565b6103a6610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461042d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161048a93929190610b7c565b600060405180830381600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516105029190610bee565b60405180910390a26105126108b7565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61058d610867565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161069193929190610b7c565b600060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610744959493929190610b05565b600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516107c093929190610c09565b60405180910390a26107d06108b7565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401610832929190610b53565b600060405180830381600087803b15801561084c57600080fd5b505af1158015610860573d6000803e3d6000fd5b5050505050565b600260005414156108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490610bce565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506108d081610d3b565b92915050565b6000813590506108e581610d52565b92915050565b60008083601f84011261090157610900610ced565b5b8235905067ffffffffffffffff81111561091e5761091d610ce8565b5b60208301915083600182028301111561093a57610939610cf2565b5b9250929050565b60008135905061095081610d69565b92915050565b60008060006060848603121561096f5761096e610cfc565b5b600061097d868287016108c1565b935050602061098e86828701610941565b925050604061099f868287016108d6565b9150509250925092565b6000806000806000608086880312156109c5576109c4610cfc565b5b60006109d3888289016108c1565b95505060206109e488828901610941565b945050604086013567ffffffffffffffff811115610a0557610a04610cf7565b5b610a11888289016108eb565b93509350506060610a24888289016108d6565b9150509295509295909350565b600060208284031215610a4757610a46610cfc565b5b6000610a5584828501610941565b91505092915050565b610a6781610c5d565b82525050565b610a7681610c6f565b82525050565b6000610a888385610c3b565b9350610a95838584610cd9565b610a9e83610d01565b840190509392505050565b610ab281610ca3565b82525050565b6000610ac5601f83610c4c565b9150610ad082610d12565b602082019050919050565b610ae481610c99565b82525050565b6000602082019050610aff6000830184610a5e565b92915050565b6000608082019050610b1a6000830188610a5e565b610b276020830187610a5e565b610b346040830186610adb565b8181036060830152610b47818486610a7c565b90509695505050505050565b6000604082019050610b686000830185610a5e565b610b756020830184610adb565b9392505050565b6000606082019050610b916000830186610a5e565b610b9e6020830185610adb565b610bab6040830184610a6d565b949350505050565b6000602082019050610bc86000830184610aa9565b92915050565b60006020820190508181036000830152610be781610ab8565b9050919050565b6000602082019050610c036000830184610adb565b92915050565b6000604082019050610c1e6000830186610adb565b8181036020830152610c31818486610a7c565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610c6882610c79565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610cae82610cb5565b9050919050565b6000610cc082610cc7565b9050919050565b6000610cd282610c79565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610d4481610c5d565b8114610d4f57600080fd5b50565b610d5b81610c6f565b8114610d6657600080fd5b50565b610d7281610c99565b8114610d7d57600080fd5b5056fea26469706673582212209d543e668c793d4944964e21ce09680a6432aef47847a599106ee141e7a8a01264736f6c63430008070033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] @@ -243,20 +266,28 @@ export class ZetaConnectorNonNative__factory extends ContractFactory { override deploy( _gateway: PromiseOrValue, _zetaToken: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise { return super.deploy( _gateway, _zetaToken, + _tssAddress, overrides || {} ) as Promise; } override getDeployTransaction( _gateway: PromiseOrValue, _zetaToken: PromiseOrValue, + _tssAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): TransactionRequest { - return super.getDeployTransaction(_gateway, _zetaToken, overrides || {}); + return super.getDeployTransaction( + _gateway, + _zetaToken, + _tssAddress, + overrides || {} + ); } override attach(address: string): ZetaConnectorNonNative { return super.attach(address) as ZetaConnectorNonNative; diff --git a/typechain-types/factories/contracts/prototypes/evm/index.ts b/typechain-types/factories/contracts/prototypes/evm/index.ts index b6965aa9..8daa7b8c 100644 --- a/typechain-types/factories/contracts/prototypes/evm/index.ts +++ b/typechain-types/factories/contracts/prototypes/evm/index.ts @@ -1,8 +1,10 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export * as ierc20CustodyNewSol from "./IERC20CustodyNew.sol"; export * as iGatewayEvmSol from "./IGatewayEVM.sol"; export * as iReceiverEvmSol from "./IReceiverEVM.sol"; +export * as iZetaConnectorSol from "./IZetaConnector.sol"; export { ERC20CustodyNew__factory } from "./ERC20CustodyNew__factory"; export { GatewayEVM__factory } from "./GatewayEVM__factory"; export { GatewayEVMUpgradeTest__factory } from "./GatewayEVMUpgradeTest__factory"; diff --git a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts index 2ff27a16..705ce619 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts @@ -707,7 +707,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e282ad47b588d26949a07fb7fc6ba46fa9721e07254d668e544a8f2413001c5064736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c403e7110f39344a7464aedddcc11ad944288d8cd79a4d58fa568decbde916ef64736f6c63430008070033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/zevm/ZRC20New.sol/ZRC20New__factory.ts b/typechain-types/factories/contracts/zevm/ZRC20New.sol/ZRC20New__factory.ts index 68398c65..dd4e8c54 100644 --- a/typechain-types/factories/contracts/zevm/ZRC20New.sol/ZRC20New__factory.ts +++ b/typechain-types/factories/contracts/zevm/ZRC20New.sol/ZRC20New__factory.ts @@ -644,7 +644,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea264697066735822122088cc6797a637e9f7f0d8220bcf745a632c2a8fcb9c479e8f3633f88f9d369ecc64736f6c63430008070033"; type ZRC20NewConstructorParams = | [signer?: Signer] diff --git a/typechain-types/hardhat.d.ts b/typechain-types/hardhat.d.ts index 3afa8867..582ce7ab 100644 --- a/typechain-types/hardhat.d.ts +++ b/typechain-types/hardhat.d.ts @@ -348,6 +348,14 @@ declare module "hardhat/types/runtime" { name: "GatewayEVMUpgradeTest", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "IERC20CustodyNewErrors", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "IERC20CustodyNewEvents", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "IGatewayEVM", signerOrOptions?: ethers.Signer | FactoryOptions @@ -368,6 +376,10 @@ declare module "hardhat/types/runtime" { name: "IReceiverEVMEvents", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "IZetaConnectorEvents", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "IZetaNonEthNew", signerOrOptions?: ethers.Signer | FactoryOptions @@ -917,6 +929,16 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "IERC20CustodyNewErrors", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "IERC20CustodyNewEvents", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "IGatewayEVM", address: string, @@ -942,6 +964,11 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "IZetaConnectorEvents", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "IZetaNonEthNew", address: string, diff --git a/typechain-types/index.ts b/typechain-types/index.ts index 652eb7e3..52b3f590 100644 --- a/typechain-types/index.ts +++ b/typechain-types/index.ts @@ -164,6 +164,10 @@ export type { GatewayEVM } from "./contracts/prototypes/evm/GatewayEVM"; export { GatewayEVM__factory } from "./factories/contracts/prototypes/evm/GatewayEVM__factory"; export type { GatewayEVMUpgradeTest } from "./contracts/prototypes/evm/GatewayEVMUpgradeTest"; export { GatewayEVMUpgradeTest__factory } from "./factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory"; +export type { IERC20CustodyNewErrors } from "./contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors"; +export { IERC20CustodyNewErrors__factory } from "./factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewErrors__factory"; +export type { IERC20CustodyNewEvents } from "./contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents"; +export { IERC20CustodyNewEvents__factory } from "./factories/contracts/prototypes/evm/IERC20CustodyNew.sol/IERC20CustodyNewEvents__factory"; export type { IGatewayEVM } from "./contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVM"; export { IGatewayEVM__factory } from "./factories/contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVM__factory"; export type { IGatewayEVMErrors } from "./contracts/prototypes/evm/IGatewayEVM.sol/IGatewayEVMErrors"; @@ -174,6 +178,8 @@ export type { Revertable } from "./contracts/prototypes/evm/IGatewayEVM.sol/Reve export { Revertable__factory } from "./factories/contracts/prototypes/evm/IGatewayEVM.sol/Revertable__factory"; export type { IReceiverEVMEvents } from "./contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents"; export { IReceiverEVMEvents__factory } from "./factories/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents__factory"; +export type { IZetaConnectorEvents } from "./contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents"; +export { IZetaConnectorEvents__factory } from "./factories/contracts/prototypes/evm/IZetaConnector.sol/IZetaConnectorEvents__factory"; export type { IZetaNonEthNew } from "./contracts/prototypes/evm/IZetaNonEthNew"; export { IZetaNonEthNew__factory } from "./factories/contracts/prototypes/evm/IZetaNonEthNew__factory"; export type { ReceiverEVM } from "./contracts/prototypes/evm/ReceiverEVM"; diff --git a/yarn.lock b/yarn.lock index f667c550..c4ed4e16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2152,10 +2152,10 @@ "@uniswap/v3-core" "1.0.0" base64-sol "1.0.1" -"@zetachain/networks@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-8.0.0.tgz#3e838bb6b14e4a8d381f95b4cbc2f1172e851e4e" - integrity sha512-I0HhH5qOGW0Jkjq5o5Mi6qGls6ycHnhWjc+r+Ud8u8YW+HU4lEUn4gvulxj+ccHKj3nV/0gEsmNrWRY9ct49nQ== +"@zetachain/networks@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-9.0.0.tgz#59eddb02578d784a1d76299ead600dffce87f48c" + integrity sha512-vCSkzyiubgYHK0NAJFFCv9gQziGrB+BT9q6DEu29owWxHcGLHPbI4VJ5PbkWH+z8pExVSDe2wKxGN5l2ZAcbGA== dependencies: dotenv "^16.1.4"