From 4312d7422d9b5a4f37bf4a342e3ca93f921c81b8 Mon Sep 17 00:00:00 2001 From: "app-token-issuer-infra-releng[bot]" <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 18:51:21 +0000 Subject: [PATCH] Update gethwrappers --- .../ccip/generated/ccipClient/ccipClient.go | 2 +- .../ping_pong_demo/ping_pong_demo.go | 383 +----------------- .../self_funded_ping_pong.go | 383 +----------------- ...rapper-dependency-versions-do-not-edit.txt | 6 +- 4 files changed, 44 insertions(+), 730 deletions(-) diff --git a/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go index 345351e6a6..5167ea5517 100644 --- a/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go +++ b/core/gethwrappers/ccip/generated/ccipClient/ccipClient.go @@ -57,7 +57,7 @@ type ClientEVMTokenAmount struct { var CCIPClientMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldFeeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200433d3803806200433d8339810160408190526200003491620005b9565b818033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000131565b5050506001600160a01b038116620000eb576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b03199182168117909255600880549386169390911683179055620001299250600019620001dc565b5050620006b6565b336001600160a01b038216036200018b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200025a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620005f8565b155b620002ce5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000084565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003269185916200032b16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200037a906001600160a01b038516908490620003fc565b8051909150156200032657808060200190518101906200039b919062000612565b620003265760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b60606200040d848460008562000415565b949350505050565b606082471015620004785760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b0316858760405162000496919062000663565b60006040518083038185875af1925050503d8060008114620004d5576040519150601f19603f3d011682016040523d82523d6000602084013e620004da565b606091505b509092509050620004ee87838387620004f9565b979650505050505050565b606083156200056d57825160000362000565576001600160a01b0385163b620005655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b50816200040d565b6200040d8383815115620005845781518083602001fd5b8060405162461bcd60e51b815260040162000084919062000681565b6001600160a01b0381168114620005b657600080fd5b50565b60008060408385031215620005cd57600080fd5b8251620005da81620005a0565b6020840151909250620005ed81620005a0565b809150509250929050565b6000602082840312156200060b57600080fd5b5051919050565b6000602082840312156200062557600080fd5b815180151581146200063657600080fd5b9392505050565b60005b838110156200065a57818101518382015260200162000640565b50506000910152565b60008251620006778184602087016200063d565b9190910192915050565b6020815260008251806020840152620006a28160408501602087016200063d565b601f01601f19169190910160400192915050565b613c7780620006c66000396000f3fe6080604052600436106101635760003560e01c80638da5cb5b116100c0578063cf6730f811610074578063e89b448511610059578063e89b4485146103fb578063f2fde38b1461040e578063ff2deec31461042e57600080fd5b8063cf6730f8146103bb578063e4ca8754146103db57600080fd5b8063b0f479a1116100a5578063b0f479a114610350578063c851cc321461037b578063c89245d51461039b57600080fd5b80638da5cb5b146102e45780639fe74e261461033057600080fd5b80636939cd971161011757806379ba5097116100fc57806379ba50971461028f5780638462a2b9146102a457806385572ffb146102c457600080fd5b80636939cd97146102425780636d62d6331461026f57600080fd5b80635075a9d4116101485780635075a9d4146101d2578063536c6bfa146102005780635e35359e1461022257600080fd5b80630e958d6b1461016f57806335f170ef146101a457600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061018f61018a366004612d16565b61045b565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101c46101bf366004612d9b565b6104a6565b60405161019b929190612e26565b3480156101de57600080fd5b506101f26101ed366004612e54565b6105d2565b60405190815260200161019b565b34801561020c57600080fd5b5061022061021b366004612e8f565b6105e5565b005b34801561022e57600080fd5b5061022061023d366004612ebb565b610649565b34801561024e57600080fd5b5061026261025d366004612e54565b6106de565b60405161019b9190612f59565b34801561027b57600080fd5b5061022061028a366004612fed565b6108e9565b34801561029b57600080fd5b50610220610c03565b3480156102b057600080fd5b506102206102bf366004613069565b610d00565b3480156102d057600080fd5b506102206102df3660046130d5565b611041565b3480156102f057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b34801561033c57600080fd5b5061022061034b366004613110565b61124a565b34801561035c57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff1661030b565b34801561038757600080fd5b50610220610396366004613152565b6115db565b3480156103a757600080fd5b506102206103b6366004613152565b6116a7565b3480156103c757600080fd5b506102206103d63660046130d5565b611811565b3480156103e757600080fd5b506102206103f6366004612e54565b6119ca565b6101f26104093660046132a4565b611c34565b34801561041a57600080fd5b50610220610429366004613152565b612141565b34801561043a57600080fd5b5060085461030b9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260036020526040808220905160029091019061048a90859085906133b1565b9081526040519081900360200190205460ff1690509392505050565b6003602052600090815260409020805481906104c1906133c1565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed906133c1565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b50505050509080600101805461054f906133c1565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906133c1565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905082565b60006105df600583612155565b92915050565b6105ed612168565b6105f782826121eb565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610651612168565b61067273ffffffffffffffffffffffffffffffffffffffff84168383612345565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516106d191815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161074d906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610779906133c1565b80156107c65780601f1061079b576101008083540402835291602001916107c6565b820191906000526020600020905b8154815290600101906020018083116107a957829003601f168201915b505050505081526020016003820180546107df906133c1565b80601f016020809104026020016040519081016040528092919081815260200182805461080b906133c1565b80156108585780601f1061082d57610100808354040283529160200191610858565b820191906000526020600020905b81548152906001019060200180831161083b57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156108db5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610886565b505050915250909392505050565b6108f1612168565b60016108fe600584612155565b1461093d576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b61094d8260025b60059190612419565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610995906133c1565b80601f01602080910402602001604051908101604052809291908181526020018280546109c1906133c1565b8015610a0e5780601f106109e357610100808354040283529160200191610a0e565b820191906000526020600020905b8154815290600101906020018083116109f157829003601f168201915b50505050508152602001600382018054610a27906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a53906133c1565b8015610aa05780601f10610a7557610100808354040283529160200191610aa0565b820191906000526020600020905b815481529060010190602001808311610a8357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610b235760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610ace565b5050505081525050905060005b816080015151811015610bb257610baa8383608001518381518110610b5757610b57613414565b60200260200101516020015184608001518481518110610b7957610b79613414565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166123459092919063ffffffff16565b600101610b30565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610934565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d08612168565b60005b81811015610e9b5760036000848484818110610d2957610d29613414565b9050602002810190610d3b9190613443565b610d49906020810190612d9b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610d8057610d80613414565b9050602002810190610d929190613443565b610da0906020810190613481565b604051610dae9291906133b1565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610df557610df5613414565b9050602002810190610e079190613443565b610e15906020810190613481565b604051610e239291906133b1565b6040518091039020838383818110610e3d57610e3d613414565b9050602002810190610e4f9190613443565b610e5d906020810190612d9b565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101610d0b565b5060005b8381101561103a57600160036000878785818110610ebf57610ebf613414565b9050602002810190610ed19190613443565b610edf906020810190612d9b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610f1657610f16613414565b9050602002810190610f289190613443565b610f36906020810190613481565b604051610f449291906133b1565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055848482818110610f9457610f94613414565b9050602002810190610fa69190613443565b610fb4906020810190613481565b604051610fc29291906133b1565b6040518091039020858583818110610fdc57610fdc613414565b9050602002810190610fee9190613443565b610ffc906020810190612d9b565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101610e9f565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611094576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610934565b6110a46040820160208301612d9b565b67ffffffffffffffff81166000908152600360205260409020805481906110ca906133c1565b9050600003611111576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061114d9086906004016135e8565b600060405180830381600087803b15801561116757600080fd5b505af1925050508015611178575060015b611218573d8080156111a6576040519150601f19603f3d011682016040523d82523d6000602084013e6111ab565b606091505b506111b884356001610944565b508335600090815260046020526040902084906111d582826139c2565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061120a908490613abc565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b611252612168565b60005b818110156112455782828281811061126f5761126f613414565b90506020028101906112819190613acf565b611292906040810190602001613b11565b61135e57600360008484848181106112ac576112ac613414565b90506020028101906112be9190613acf565b6112cc906020810190612d9b565b67ffffffffffffffff168152602081019190915260400160009081206112f191612cb2565b82828281811061130357611303613414565b90506020028101906113159190613acf565b611323906020810190612d9b565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a26115d3565b82828281811061137057611370613414565b90506020028101906113829190613acf565b611390906040810190613481565b90506000036113cb576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106113e3576113e3613414565b90506020028101906113f59190613acf565b611403906020810190612d9b565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020905083838381811061143957611439613414565b905060200281019061144b9190613acf565b611459906040810190613481565b8291611466919083613746565b5083838381811061147957611479613414565b905060200281019061148b9190613acf565b611499906060810190613481565b1590506114e4578383838181106114b2576114b2613414565b90506020028101906114c49190613acf565b6114d2906060810190613481565b60018301916114e2919083613746565b505b8383838181106114f6576114f6613414565b90506020028101906115089190613acf565b611516906040810190613481565b6040516115249291906133b1565b604051809103902084848481811061153e5761153e613414565b90506020028101906115509190613acf565b61155e906020810190612d9b565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721286868681811061159b5761159b613414565b90506020028101906115ad9190613acf565b6115bb906060810190613481565b6040516115c9929190613b2e565b60405180910390a3505b600101611255565b6115e3612168565b73ffffffffffffffffffffffffffffffffffffffff8116611630576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6116af612168565b60085473ffffffffffffffffffffffffffffffffffffffff1615611710576117106116ef60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff1690600061242e565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093551690156117bd576117bd61177d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6125b0565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b33301461184a576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185a6040820160208301612d9b565b6118676040830183613481565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506118be925090506133c1565b159050806119145750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516118ff9190613b42565b9081526040519081900360200190205460ff16155b1561194d57806040517f5075bb380000000000000000000000000000000000000000000000000000000081526004016109349190613abc565b61195d6040840160208501612d9b565b67ffffffffffffffff8116600090815260036020526040902080548190611983906133c1565b905060000361103a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b60016119d7600583612155565b14611a11576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610934565b611a1c816000610944565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611a64906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a90906133c1565b8015611add5780601f10611ab257610100808354040283529160200191611add565b820191906000526020600020905b815481529060010190602001808311611ac057829003601f168201915b50505050508152602001600382018054611af6906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b22906133c1565b8015611b6f5780601f10611b4457610100808354040283529160200191611b6f565b820191906000526020600020905b815481529060010190602001808311611b5257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611bf25760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611b9d565b50505050815250509050611c05816126b4565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591908190611c5d906133c1565b9050600003611ca4576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190611cd4906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d00906133c1565b8015611d4d5780601f10611d2257610100808354040283529160200191611d4d565b820191906000526020600020905b815481529060010190602001808311611d3057829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b166000908152600390925290206001018054608090920191611dae906133c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dda906133c1565b8015611e275780601f10611dfc57610100808354040283529160200191611e27565b820191906000526020600020905b815481529060010190602001808311611e0a57829003601f168201915b5050505050815250905060005b8651811015611f8457611ea43330898481518110611e5457611e54613414565b6020026020010151602001518a8581518110611e7257611e72613414565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612726909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff90911690889083908110611ed457611ed4613414565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614611f7c576002548751611f7c9173ffffffffffffffffffffffffffffffffffffffff1690899084908110611f2d57611f2d613414565b602002602001015160200151898481518110611f4b57611f4b613414565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1661242e9092919063ffffffff16565b600101611e34565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded90611fde908b908690600401613b54565b602060405180830381865afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613c21565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612065576008546120659073ffffffffffffffffffffffffffffffffffffffff16333084612726565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612097576000612099565b825b8a856040518463ffffffff1660e01b81526004016120b8929190613b54565b60206040518083038185885af11580156120d6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120fb9190613c21565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8560405161212e91815260200190565b60405180910390a1505050509392505050565b612149612168565b61215281612784565b50565b60006121618383612879565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146121e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610934565b565b80471015612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610934565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146122af576040519150601f19603f3d011682016040523d82523d6000602084013e6122b4565b606091505b5050905080611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610934565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112459084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612903565b6000612426848484612a0f565b949350505050565b8015806124ce57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156124a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cc9190613c21565b155b61255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610934565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112459084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612397565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264b9190613c21565b6126559190613c3a565b60405173ffffffffffffffffffffffffffffffffffffffff85166024820152604481018290529091506126ae9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612397565b50505050565b6126bc612168565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906126f8908490600401612f59565b600060405180830381600087803b15801561271257600080fd5b505af115801561103a573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526126ae9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612397565b3373ffffffffffffffffffffffffffffffffffffffff821603612803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610934565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526002830160205260408120548015158061289d575061289d8484612a2c565b612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610934565b6000612965826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612a389092919063ffffffff16565b80519091501561124557808060200190518101906129839190613c4d565b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610934565b600082815260028401602052604081208290556124268484612a47565b60006121618383612a53565b60606124268484600085612a6b565b60006121618383612b84565b60008181526001830160205260408120541515612161565b606082471015612afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610934565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b269190613b42565b60006040518083038185875af1925050503d8060008114612b63576040519150601f19603f3d011682016040523d82523d6000602084013e612b68565b606091505b5091509150612b7987838387612bd3565b979650505050505050565b6000818152600183016020526040812054612bcb575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105df565b5060006105df565b60608315612c69578251600003612c625773ffffffffffffffffffffffffffffffffffffffff85163b612c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610934565b5081612426565b6124268383815115612c7e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349190613abc565b508054612cbe906133c1565b6000825580601f10612cce575050565b601f01602090049060005260206000209081019061215291905b80821115612cfc5760008155600101612ce8565b5090565b67ffffffffffffffff8116811461215257600080fd5b600080600060408486031215612d2b57600080fd5b8335612d3681612d00565b9250602084013567ffffffffffffffff80821115612d5357600080fd5b818601915086601f830112612d6757600080fd5b813581811115612d7657600080fd5b876020828501011115612d8857600080fd5b6020830194508093505050509250925092565b600060208284031215612dad57600080fd5b813561216181612d00565b60005b83811015612dd3578181015183820152602001612dbb565b50506000910152565b60008151808452612df4816020860160208601612db8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000612e396040830185612ddc565b8281036020840152612e4b8185612ddc565b95945050505050565b600060208284031215612e6657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461215257600080fd5b60008060408385031215612ea257600080fd5b8235612ead81612e6d565b946020939093013593505050565b600080600060608486031215612ed057600080fd5b8335612edb81612e6d565b92506020840135612eeb81612e6d565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612f4e578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612f11565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152612f9360c0840182612ddc565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152612fcf8383612ddc565b925060808601519150808584030160a086015250612e4b8282612efc565b6000806040838503121561300057600080fd5b82359150602083013561301281612e6d565b809150509250929050565b60008083601f84011261302f57600080fd5b50813567ffffffffffffffff81111561304757600080fd5b6020830191508360208260051b850101111561306257600080fd5b9250929050565b6000806000806040858703121561307f57600080fd5b843567ffffffffffffffff8082111561309757600080fd5b6130a38883890161301d565b909650945060208701359150808211156130bc57600080fd5b506130c98782880161301d565b95989497509550505050565b6000602082840312156130e757600080fd5b813567ffffffffffffffff8111156130fe57600080fd5b820160a0818503121561216157600080fd5b6000806020838503121561312357600080fd5b823567ffffffffffffffff81111561313a57600080fd5b6131468582860161301d565b90969095509350505050565b60006020828403121561316457600080fd5b813561216181612e6d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131c1576131c161316f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561320e5761320e61316f565b604052919050565b600082601f83011261322757600080fd5b813567ffffffffffffffff8111156132415761324161316f565b61327260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016131c7565b81815284602083860101111561328757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156132b957600080fd5b83356132c481612d00565b925060208481013567ffffffffffffffff808211156132e257600080fd5b818701915087601f8301126132f657600080fd5b8135818111156133085761330861316f565b613316848260051b016131c7565b81815260069190911b8301840190848101908a83111561333557600080fd5b938501935b82851015613381576040858c0312156133535760008081fd5b61335b61319e565b853561336681612e6d565b8152858701358782015282526040909401939085019061333a565b96505050604087013592508083111561339957600080fd5b50506133a786828701613216565b9150509250925092565b8183823760009101908152919050565b600181811c908216806133d557607f821691505b60208210810361340e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261347757600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134b657600080fd5b83018035915067ffffffffffffffff8211156134d157600080fd5b60200191503681900382131561306257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261351b57600080fd5b830160208101925035905067ffffffffffffffff81111561353b57600080fd5b80360382131561306257600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612f4e5781356135b681612e6d565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016135a3565b60208152813560208201526000602083013561360381612d00565b67ffffffffffffffff808216604085015261362160408601866134e6565b925060a0606086015261363860c08601848361354a565b92505061364860608601866134e6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087860301608088015261367e85838561354a565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126136b757600080fd5b602092880192830192359150838211156136d057600080fd5b8160061b36038313156136e257600080fd5b8685030160a0870152612b79848284613593565b601f821115611245576000816000526020600020601f850160051c8101602086101561371f5750805b601f850160051c820191505b8181101561373e5782815560010161372b565b505050505050565b67ffffffffffffffff83111561375e5761375e61316f565b6137728361376c83546133c1565b836136f6565b6000601f8411600181146137c4576000851561378e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561103a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561381357868501358255602094850194600190920191016137f3565b508682101561384e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561389a81612e6d565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156139005761390061316f565b80548382558084101561398d5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461394157613941613860565b808616861461395257613952613860565b5060008360005260206000208360011b81018760011b820191505b8082101561398857828255828483015560028201915061396d565b505050505b5060008181526020812083915b8581101561373e576139ac838361388f565b604092909201916002919091019060010161399a565b813581556001810160208301356139d881612d00565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355613a186040860186613481565b93509150613a2a838360028701613746565b613a376060860186613481565b93509150613a49838360038701613746565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312613a8057600080fd5b918401918235915080821115613a9557600080fd5b506020820191508060061b3603821315613aae57600080fd5b6126ae8183600486016138e7565b6020815260006121616020830184612ddc565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261347757600080fd5b801515811461215257600080fd5b600060208284031215613b2357600080fd5b813561216181613b03565b60208152600061242660208301848661354a565b60008251613477818460208701612db8565b67ffffffffffffffff83168152604060208201526000825160a06040840152613b8060e0840182612ddc565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613bbc8383612ddc565b92506040860151915080858403016080860152613bd98383612efc565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613c178282612ddc565b9695505050505050565b600060208284031215613c3357600080fd5b5051919050565b808201808211156105df576105df613860565b600060208284031215613c5f57600080fd5b815161216181613b0356fea164736f6c6343000818000a", + Bin: "0x60806040523480156200001157600080fd5b50604051620043da380380620043da8339810160408190526200003491620005b9565b818033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000131565b5050506001600160a01b038116620000eb576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b03199182168117909255600880549386169390911683179055620001299250600019620001dc565b5050620006b6565b336001600160a01b038216036200018b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200025a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620005f8565b155b620002ce5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000084565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003269185916200032b16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200037a906001600160a01b038516908490620003fc565b8051909150156200032657808060200190518101906200039b919062000612565b620003265760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b60606200040d848460008562000415565b949350505050565b606082471015620004785760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b0316858760405162000496919062000663565b60006040518083038185875af1925050503d8060008114620004d5576040519150601f19603f3d011682016040523d82523d6000602084013e620004da565b606091505b509092509050620004ee87838387620004f9565b979650505050505050565b606083156200056d57825160000362000565576001600160a01b0385163b620005655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b50816200040d565b6200040d8383815115620005845781518083602001fd5b8060405162461bcd60e51b815260040162000084919062000681565b6001600160a01b0381168114620005b657600080fd5b50565b60008060408385031215620005cd57600080fd5b8251620005da81620005a0565b6020840151909250620005ed81620005a0565b809150509250929050565b6000602082840312156200060b57600080fd5b5051919050565b6000602082840312156200062557600080fd5b815180151581146200063657600080fd5b9392505050565b60005b838110156200065a57818101518382015260200162000640565b50506000910152565b60008251620006778184602087016200063d565b9190910192915050565b6020815260008251806020840152620006a28160408501602087016200063d565b601f01601f19169190910160400192915050565b613d1480620006c66000396000f3fe6080604052600436106101635760003560e01c80638da5cb5b116100c0578063cf6730f811610074578063e89b448511610059578063e89b4485146103fb578063f2fde38b1461040e578063ff2deec31461042e57600080fd5b8063cf6730f8146103bb578063e4ca8754146103db57600080fd5b8063b0f479a1116100a5578063b0f479a114610350578063c851cc321461037b578063c89245d51461039b57600080fd5b80638da5cb5b146102e45780639fe74e261461033057600080fd5b80636939cd971161011757806379ba5097116100fc57806379ba50971461028f5780638462a2b9146102a457806385572ffb146102c457600080fd5b80636939cd97146102425780636d62d6331461026f57600080fd5b80635075a9d4116101485780635075a9d4146101d2578063536c6bfa146102005780635e35359e1461022257600080fd5b80630e958d6b1461016f57806335f170ef146101a457600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061018f61018a366004612db3565b61045b565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506101c46101bf366004612e38565b6104a6565b60405161019b929190612ec3565b3480156101de57600080fd5b506101f26101ed366004612ef1565b6105d2565b60405190815260200161019b565b34801561020c57600080fd5b5061022061021b366004612f2c565b6105e5565b005b34801561022e57600080fd5b5061022061023d366004612f58565b610649565b34801561024e57600080fd5b5061026261025d366004612ef1565b6106de565b60405161019b9190612ff6565b34801561027b57600080fd5b5061022061028a36600461308a565b6108e9565b34801561029b57600080fd5b50610220610c03565b3480156102b057600080fd5b506102206102bf366004613106565b610d00565b3480156102d057600080fd5b506102206102df366004613172565b611041565b3480156102f057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b34801561033c57600080fd5b5061022061034b3660046131ad565b61124a565b34801561035c57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff1661030b565b34801561038757600080fd5b506102206103963660046131ef565b6115db565b3480156103a757600080fd5b506102206103b63660046131ef565b6116a7565b3480156103c757600080fd5b506102206103d6366004613172565b611811565b3480156103e757600080fd5b506102206103f6366004612ef1565b6119ca565b6101f2610409366004613341565b611c34565b34801561041a57600080fd5b506102206104293660046131ef565b6121de565b34801561043a57600080fd5b5060085461030b9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260036020526040808220905160029091019061048a908590859061344e565b9081526040519081900360200190205460ff1690509392505050565b6003602052600090815260409020805481906104c19061345e565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed9061345e565b801561053a5780601f1061050f5761010080835404028352916020019161053a565b820191906000526020600020905b81548152906001019060200180831161051d57829003601f168201915b50505050509080600101805461054f9061345e565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061345e565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905082565b60006105df6005836121f2565b92915050565b6105ed612205565b6105f78282612288565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610651612205565b61067273ffffffffffffffffffffffffffffffffffffffff841683836123e2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516106d191815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161074d9061345e565b80601f01602080910402602001604051908101604052809291908181526020018280546107799061345e565b80156107c65780601f1061079b576101008083540402835291602001916107c6565b820191906000526020600020905b8154815290600101906020018083116107a957829003601f168201915b505050505081526020016003820180546107df9061345e565b80601f016020809104026020016040519081016040528092919081815260200182805461080b9061345e565b80156108585780601f1061082d57610100808354040283529160200191610858565b820191906000526020600020905b81548152906001019060200180831161083b57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156108db5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610886565b505050915250909392505050565b6108f1612205565b60016108fe6005846121f2565b1461093d576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b61094d8260025b600591906124b6565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916109959061345e565b80601f01602080910402602001604051908101604052809291908181526020018280546109c19061345e565b8015610a0e5780601f106109e357610100808354040283529160200191610a0e565b820191906000526020600020905b8154815290600101906020018083116109f157829003601f168201915b50505050508152602001600382018054610a279061345e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a539061345e565b8015610aa05780601f10610a7557610100808354040283529160200191610aa0565b820191906000526020600020905b815481529060010190602001808311610a8357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610b235760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610ace565b5050505081525050905060005b816080015151811015610bb257610baa8383608001518381518110610b5757610b576134b1565b60200260200101516020015184608001518481518110610b7957610b796134b1565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166123e29092919063ffffffff16565b600101610b30565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610934565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d08612205565b60005b81811015610e9b5760036000848484818110610d2957610d296134b1565b9050602002810190610d3b91906134e0565b610d49906020810190612e38565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610d8057610d806134b1565b9050602002810190610d9291906134e0565b610da090602081019061351e565b604051610dae92919061344e565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610df557610df56134b1565b9050602002810190610e0791906134e0565b610e1590602081019061351e565b604051610e2392919061344e565b6040518091039020838383818110610e3d57610e3d6134b1565b9050602002810190610e4f91906134e0565b610e5d906020810190612e38565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101610d0b565b5060005b8381101561103a57600160036000878785818110610ebf57610ebf6134b1565b9050602002810190610ed191906134e0565b610edf906020810190612e38565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610f1657610f166134b1565b9050602002810190610f2891906134e0565b610f3690602081019061351e565b604051610f4492919061344e565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055848482818110610f9457610f946134b1565b9050602002810190610fa691906134e0565b610fb490602081019061351e565b604051610fc292919061344e565b6040518091039020858583818110610fdc57610fdc6134b1565b9050602002810190610fee91906134e0565b610ffc906020810190612e38565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101610e9f565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611094576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610934565b6110a46040820160208301612e38565b67ffffffffffffffff81166000908152600360205260409020805481906110ca9061345e565b9050600003611111576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f89061114d908690600401613685565b600060405180830381600087803b15801561116757600080fd5b505af1925050508015611178575060015b611218573d8080156111a6576040519150601f19603f3d011682016040523d82523d6000602084013e6111ab565b606091505b506111b884356001610944565b508335600090815260046020526040902084906111d58282613a5f565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061120a908490613b59565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b611252612205565b60005b818110156112455782828281811061126f5761126f6134b1565b90506020028101906112819190613b6c565b611292906040810190602001613bae565b61135e57600360008484848181106112ac576112ac6134b1565b90506020028101906112be9190613b6c565b6112cc906020810190612e38565b67ffffffffffffffff168152602081019190915260400160009081206112f191612d4f565b828282818110611303576113036134b1565b90506020028101906113159190613b6c565b611323906020810190612e38565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a26115d3565b828282818110611370576113706134b1565b90506020028101906113829190613b6c565b61139090604081019061351e565b90506000036113cb576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106113e3576113e36134b1565b90506020028101906113f59190613b6c565b611403906020810190612e38565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611439576114396134b1565b905060200281019061144b9190613b6c565b61145990604081019061351e565b82916114669190836137e3565b50838383818110611479576114796134b1565b905060200281019061148b9190613b6c565b61149990606081019061351e565b1590506114e4578383838181106114b2576114b26134b1565b90506020028101906114c49190613b6c565b6114d290606081019061351e565b60018301916114e29190836137e3565b505b8383838181106114f6576114f66134b1565b90506020028101906115089190613b6c565b61151690604081019061351e565b60405161152492919061344e565b604051809103902084848481811061153e5761153e6134b1565b90506020028101906115509190613b6c565b61155e906020810190612e38565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721286868681811061159b5761159b6134b1565b90506020028101906115ad9190613b6c565b6115bb90606081019061351e565b6040516115c9929190613bcb565b60405180910390a3505b600101611255565b6115e3612205565b73ffffffffffffffffffffffffffffffffffffffff8116611630576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6116af612205565b60085473ffffffffffffffffffffffffffffffffffffffff1615611710576117106116ef60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff169060006124cb565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093551690156117bd576117bd61177d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61264d565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b33301461184a576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185a6040820160208301612e38565b611867604083018361351e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506118be9250905061345e565b159050806119145750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516118ff9190613bdf565b9081526040519081900360200190205460ff16155b1561194d57806040517f5075bb380000000000000000000000000000000000000000000000000000000081526004016109349190613b59565b61195d6040840160208501612e38565b67ffffffffffffffff81166000908152600360205260409020805481906119839061345e565b905060000361103a576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b60016119d76005836121f2565b14611a11576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610934565b611a1c816000610944565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611a649061345e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a909061345e565b8015611add5780601f10611ab257610100808354040283529160200191611add565b820191906000526020600020905b815481529060010190602001808311611ac057829003601f168201915b50505050508152602001600382018054611af69061345e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b229061345e565b8015611b6f5780601f10611b4457610100808354040283529160200191611b6f565b820191906000526020600020905b815481529060010190602001808311611b5257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611bf25760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611b9d565b50505050815250509050611c0581612751565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591908190611c5d9061345e565b9050600003611ca4576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610934565b6040805160a08101825267ffffffffffffffff8816600090815260036020529182208054829190611cd49061345e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d009061345e565b8015611d4d5780601f10611d2257610100808354040283529160200191611d4d565b820191906000526020600020905b815481529060010190602001808311611d3057829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b166000908152600390925290206001018054608090920191611dae9061345e565b80601f0160208091040260200160405190810160405280929190818152602001828054611dda9061345e565b8015611e275780601f10611dfc57610100808354040283529160200191611e27565b820191906000526020600020905b815481529060010190602001808311611e0a57829003601f168201915b5050505050815250905060005b8651811015611f8457611ea43330898481518110611e5457611e546134b1565b6020026020010151602001518a8581518110611e7257611e726134b1565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166127c3909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff90911690889083908110611ed457611ed46134b1565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614611f7c576002548751611f7c9173ffffffffffffffffffffffffffffffffffffffff1690899084908110611f2d57611f2d6134b1565b602002602001015160200151898481518110611f4b57611f4b6134b1565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166124cb9092919063ffffffff16565b600101611e34565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded90611fde908b908690600401613bf1565b602060405180830381865afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613cbe565b60085490915073ffffffffffffffffffffffffffffffffffffffff16158015906120d857506008546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613cbe565b105b15612102576008546121029073ffffffffffffffffffffffffffffffffffffffff163330846127c3565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612134576000612136565b825b8a856040518463ffffffff1660e01b8152600401612155929190613bf1565b60206040518083038185885af1158015612173573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121989190613cbe565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a856040516121cb91815260200190565b60405180910390a1505050509392505050565b6121e6612205565b6121ef81612821565b50565b60006121fe8383612916565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610934565b565b804710156122f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610934565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461234c576040519150601f19603f3d011682016040523d82523d6000602084013e612351565b606091505b5050905080611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610934565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112459084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526129a0565b60006124c3848484612aac565b949350505050565b80158061256b57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125699190613cbe565b155b6125f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610934565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112459084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612434565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e89190613cbe565b6126f29190613cd7565b60405173ffffffffffffffffffffffffffffffffffffffff851660248201526044810182905290915061274b9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612434565b50505050565b612759612205565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612795908490600401612ff6565b600060405180830381600087803b1580156127af57600080fd5b505af115801561103a573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261274b9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612434565b3373ffffffffffffffffffffffffffffffffffffffff8216036128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610934565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526002830160205260408120548015158061293a575061293a8484612ac9565b6121fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610934565b6000612a02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ad59092919063ffffffff16565b8051909150156112455780806020019051810190612a209190613cea565b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610934565b600082815260028401602052604081208290556124c38484612ae4565b60006121fe8383612af0565b60606124c38484600085612b08565b60006121fe8383612c21565b600081815260018301602052604081205415156121fe565b606082471015612b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610934565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612bc39190613bdf565b60006040518083038185875af1925050503d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b5091509150612c1687838387612c70565b979650505050505050565b6000818152600183016020526040812054612c68575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105df565b5060006105df565b60608315612d06578251600003612cff5773ffffffffffffffffffffffffffffffffffffffff85163b612cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610934565b50816124c3565b6124c38383815115612d1b5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349190613b59565b508054612d5b9061345e565b6000825580601f10612d6b575050565b601f0160209004906000526020600020908101906121ef91905b80821115612d995760008155600101612d85565b5090565b67ffffffffffffffff811681146121ef57600080fd5b600080600060408486031215612dc857600080fd5b8335612dd381612d9d565b9250602084013567ffffffffffffffff80821115612df057600080fd5b818601915086601f830112612e0457600080fd5b813581811115612e1357600080fd5b876020828501011115612e2557600080fd5b6020830194508093505050509250925092565b600060208284031215612e4a57600080fd5b81356121fe81612d9d565b60005b83811015612e70578181015183820152602001612e58565b50506000910152565b60008151808452612e91816020860160208601612e55565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000612ed66040830185612e79565b8281036020840152612ee88185612e79565b95945050505050565b600060208284031215612f0357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146121ef57600080fd5b60008060408385031215612f3f57600080fd5b8235612f4a81612f0a565b946020939093013593505050565b600080600060608486031215612f6d57600080fd5b8335612f7881612f0a565b92506020840135612f8881612f0a565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612feb578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612fae565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261303060c0840182612e79565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08085840301608086015261306c8383612e79565b925060808601519150808584030160a086015250612ee88282612f99565b6000806040838503121561309d57600080fd5b8235915060208301356130af81612f0a565b809150509250929050565b60008083601f8401126130cc57600080fd5b50813567ffffffffffffffff8111156130e457600080fd5b6020830191508360208260051b85010111156130ff57600080fd5b9250929050565b6000806000806040858703121561311c57600080fd5b843567ffffffffffffffff8082111561313457600080fd5b613140888389016130ba565b9096509450602087013591508082111561315957600080fd5b50613166878288016130ba565b95989497509550505050565b60006020828403121561318457600080fd5b813567ffffffffffffffff81111561319b57600080fd5b820160a081850312156121fe57600080fd5b600080602083850312156131c057600080fd5b823567ffffffffffffffff8111156131d757600080fd5b6131e3858286016130ba565b90969095509350505050565b60006020828403121561320157600080fd5b81356121fe81612f0a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561325e5761325e61320c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156132ab576132ab61320c565b604052919050565b600082601f8301126132c457600080fd5b813567ffffffffffffffff8111156132de576132de61320c565b61330f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613264565b81815284602083860101111561332457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561335657600080fd5b833561336181612d9d565b925060208481013567ffffffffffffffff8082111561337f57600080fd5b818701915087601f83011261339357600080fd5b8135818111156133a5576133a561320c565b6133b3848260051b01613264565b81815260069190911b8301840190848101908a8311156133d257600080fd5b938501935b8285101561341e576040858c0312156133f05760008081fd5b6133f861323b565b853561340381612f0a565b815285870135878201528252604090940193908501906133d7565b96505050604087013592508083111561343657600080fd5b5050613444868287016132b3565b9150509250925092565b8183823760009101908152919050565b600181811c9082168061347257607f821691505b6020821081036134ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261351457600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261355357600080fd5b83018035915067ffffffffffffffff82111561356e57600080fd5b6020019150368190038213156130ff57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135b857600080fd5b830160208101925035905067ffffffffffffffff8111156135d857600080fd5b8036038213156130ff57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612feb57813561365381612f0a565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613640565b6020815281356020820152600060208301356136a081612d9d565b67ffffffffffffffff80821660408501526136be6040860186613583565b925060a060608601526136d560c0860184836135e7565b9250506136e56060860186613583565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087860301608088015261371b8583856135e7565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261375457600080fd5b6020928801928301923591508382111561376d57600080fd5b8160061b360383131561377f57600080fd5b8685030160a0870152612c16848284613630565b601f821115611245576000816000526020600020601f850160051c810160208610156137bc5750805b601f850160051c820191505b818110156137db578281556001016137c8565b505050505050565b67ffffffffffffffff8311156137fb576137fb61320c565b61380f83613809835461345e565b83613793565b6000601f841160018114613861576000851561382b5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561103a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156138b05786850135825560209485019460019092019101613890565b50868210156138eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561393781612f0a565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561399d5761399d61320c565b805483825580841015613a2a5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146139de576139de6138fd565b80861686146139ef576139ef6138fd565b5060008360005260206000208360011b81018760011b820191505b80821015613a25578282558284830155600282019150613a0a565b505050505b5060008181526020812083915b858110156137db57613a49838361392c565b6040929092019160029190910190600101613a37565b81358155600181016020830135613a7581612d9d565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000845416178355613ab5604086018661351e565b93509150613ac78383600287016137e3565b613ad4606086018661351e565b93509150613ae68383600387016137e3565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018312613b1d57600080fd5b918401918235915080821115613b3257600080fd5b506020820191508060061b3603821315613b4b57600080fd5b61274b818360048601613984565b6020815260006121fe6020830184612e79565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261351457600080fd5b80151581146121ef57600080fd5b600060208284031215613bc057600080fd5b81356121fe81613ba0565b6020815260006124c36020830184866135e7565b60008251613514818460208701612e55565b67ffffffffffffffff83168152604060208201526000825160a06040840152613c1d60e0840182612e79565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613c598383612e79565b92506040860151915080858403016080860152613c768383612f99565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613cb48282612e79565b9695505050505050565b600060208284031215613cd057600080fd5b5051919050565b808201808211156105df576105df6138fd565b600060208284031215613cfc57600080fd5b81516121fe81613ba056fea164736f6c6343000818000a", } var CCIPClientABI = CCIPClientMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go index 44e8554799..c0d5b71cc9 100644 --- a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go +++ b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var PingPongDemoMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162004bbf38038062004bbf83398101604081905262000034916200056d565b8181818181803380600081620000915760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c457620000c48162000149565b5050506001600160a01b038116620000ef576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013d576200013d6001600160a01b03821683600019620001f4565b50505050505062000692565b336001600160a01b03821603620001a35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000088565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c9190620005ac565b620002789190620005c6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002d491869190620002da16565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000329906001600160a01b038516908490620003b0565b805190915015620003ab57808060200190518101906200034a9190620005ee565b620003ab5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000088565b505050565b6060620003c18484600085620003c9565b949350505050565b6060824710156200042c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000088565b600080866001600160a01b031685876040516200044a91906200063f565b60006040518083038185875af1925050503d806000811462000489576040519150601f19603f3d011682016040523d82523d6000602084013e6200048e565b606091505b509092509050620004a287838387620004ad565b979650505050505050565b606083156200052157825160000362000519576001600160a01b0385163b620005195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000088565b5081620003c1565b620003c18383815115620005385781518083602001fd5b8060405162461bcd60e51b81526004016200008891906200065d565b6001600160a01b03811681146200056a57600080fd5b50565b600080604083850312156200058157600080fd5b82516200058e8162000554565b6020840151909250620005a18162000554565b809150509250929050565b600060208284031215620005bf57600080fd5b5051919050565b80820180821115620005e857634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200060157600080fd5b815180151581146200061257600080fd5b9392505050565b60005b83811015620006365781810151838201526020016200061c565b50506000910152565b600082516200065381846020870162000619565b9190910192915050565b60208152600082518060208401526200067e81604085016020870162000619565b601f01601f19169190910160400192915050565b61451d80620006a26000396000f3fe6080604052600436106101dc5760003560e01c80638462a2b911610102578063bee518a411610095578063e4ca875411610064578063e4ca87541461065a578063e89b44851461067a578063f2fde38b1461068d578063ff2deec3146106ad57600080fd5b8063bee518a4146105d1578063c851cc32146105fa578063c89245d51461061a578063cf6730f81461063a57600080fd5b80639fe74e26116100d15780639fe74e261461052e578063b0f479a11461054e578063b187bd2614610579578063b5a11011146105b157600080fd5b80638462a2b9146104a357806385572ffb146104c35780638da5cb5b146104e35780639d2aede51461050e57600080fd5b806335f170ef1161017a5780636939cd97116101495780636939cd97146103f85780636d62d633146104255780636fef519e1461044557806379ba50971461048e57600080fd5b806335f170ef1461035c5780635075a9d41461038a578063536c6bfa146103b85780635e35359e146103d857600080fd5b8063181f5a77116101b6578063181f5a77146102805780631892b906146102cf5780632874d8bf146102ef5780632b6e5d631461030457600080fd5b806305bfe982146101e85780630e958d6b1461022e57806316c38b3c1461025e57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610218610203366004613425565b60096020526000908152604090205460ff1681565b604051610225919061343e565b60405180910390f35b34801561023a57600080fd5b5061024e610249366004613495565b6106da565b6040519015158152602001610225565b34801561026a57600080fd5b5061027e610279366004613528565b610725565b005b34801561028c57600080fd5b5060408051808201909152601281527f50696e67506f6e6744656d6f20312e332e30000000000000000000000000000060208201525b60405161022591906135b3565b3480156102db57600080fd5b5061027e6102ea3660046135c6565b61077f565b3480156102fb57600080fd5b5061027e6107c2565b34801561031057600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b34801561036857600080fd5b5061037c6103773660046135c6565b6107fe565b6040516102259291906135e3565b34801561039657600080fd5b506103aa6103a5366004613425565b61092a565b604051908152602001610225565b3480156103c457600080fd5b5061027e6103d3366004613633565b61093d565b3480156103e457600080fd5b5061027e6103f336600461365f565b6109a1565b34801561040457600080fd5b50610418610413366004613425565b610a36565b60405161022591906136fd565b34801561043157600080fd5b5061027e610440366004613791565b610c41565b34801561045157600080fd5b506102c26040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b34801561049a57600080fd5b5061027e610f5b565b3480156104af57600080fd5b5061027e6104be36600461380d565b611058565b3480156104cf57600080fd5b5061027e6104de366004613879565b611399565b3480156104ef57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610337565b34801561051a57600080fd5b5061027e6105293660046138b4565b6115a2565b34801561053a57600080fd5b5061027e6105493660046138d1565b61165d565b34801561055a57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610337565b34801561058557600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661024e565b3480156105bd57600080fd5b5061027e6105cc366004613913565b6119ee565b3480156105dd57600080fd5b50600a5460405167ffffffffffffffff9091168152602001610225565b34801561060657600080fd5b5061027e6106153660046138b4565b611b5e565b34801561062657600080fd5b5061027e6106353660046138b4565b611c2a565b34801561064657600080fd5b5061027e610655366004613879565b611d9e565b34801561066657600080fd5b5061027e610675366004613425565b611fbb565b6103aa610688366004613a76565b612225565b34801561069957600080fd5b5061027e6106a83660046138b4565b61275b565b3480156106b957600080fd5b506008546103379073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107099085908590613b83565b9081526040519081900360200190205460ff1690509392505050565b61072d61276f565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b61078761276f565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6107ca61276f565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556107fc60016127f0565b565b60036020526000908152604090208054819061081990613b93565b80601f016020809104026020016040519081016040528092919081815260200182805461084590613b93565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050908060010180546108a790613b93565b80601f01602080910402602001604051908101604052809291908181526020018280546108d390613b93565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905082565b60006109376005836128fd565b92915050565b61094561276f565b61094f8282612910565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b6109a961276f565b6109ca73ffffffffffffffffffffffffffffffffffffffff84168383612a6a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610a2991815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610aa590613b93565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad190613b93565b8015610b1e5780601f10610af357610100808354040283529160200191610b1e565b820191906000526020600020905b815481529060010190602001808311610b0157829003601f168201915b50505050508152602001600382018054610b3790613b93565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6390613b93565b8015610bb05780601f10610b8557610100808354040283529160200191610bb0565b820191906000526020600020905b815481529060010190602001808311610b9357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610c335760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610bde565b505050915250909392505050565b610c4961276f565b6001610c566005846128fd565b14610c95576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610ca58260025b60059190612b3e565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610ced90613b93565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1990613b93565b8015610d665780601f10610d3b57610100808354040283529160200191610d66565b820191906000526020600020905b815481529060010190602001808311610d4957829003601f168201915b50505050508152602001600382018054610d7f90613b93565b80601f0160208091040260200160405190810160405280929190818152602001828054610dab90613b93565b8015610df85780601f10610dcd57610100808354040283529160200191610df8565b820191906000526020600020905b815481529060010190602001808311610ddb57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e7b5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e26565b5050505081525050905060005b816080015151811015610f0a57610f028383608001518381518110610eaf57610eaf613be6565b60200260200101516020015184608001518481518110610ed157610ed1613be6565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612a6a9092919063ffffffff16565b600101610e88565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c8c565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61106061276f565b60005b818110156111f3576003600084848481811061108157611081613be6565b90506020028101906110939190613c15565b6110a19060208101906135c6565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106110d8576110d8613be6565b90506020028101906110ea9190613c15565b6110f8906020810190613c53565b604051611106929190613b83565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061114d5761114d613be6565b905060200281019061115f9190613c15565b61116d906020810190613c53565b60405161117b929190613b83565b604051809103902083838381811061119557611195613be6565b90506020028101906111a79190613c15565b6111b59060208101906135c6565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101611063565b5060005b838110156113925760016003600087878581811061121757611217613be6565b90506020028101906112299190613c15565b6112379060208101906135c6565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061126e5761126e613be6565b90506020028101906112809190613c15565b61128e906020810190613c53565b60405161129c929190613b83565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790558484828181106112ec576112ec613be6565b90506020028101906112fe9190613c15565b61130c906020810190613c53565b60405161131a929190613b83565b604051809103902085858381811061133457611334613be6565b90506020028101906113469190613c15565b6113549060208101906135c6565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a36001016111f7565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113ec576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610c8c565b6113fc60408201602083016135c6565b67ffffffffffffffff811660009081526003602052604090208054819061142290613b93565b9050600003611469576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c8c565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906114a5908690600401613dba565b600060405180830381600087803b1580156114bf57600080fd5b505af19250505080156114d0575060015b611570573d8080156114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b5061151084356001610c9c565b5083356000908152600460205260409020849061152d828261418c565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906115629084906135b3565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b6115aa61276f565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff166000908152600360205220906116599082614286565b5050565b61166561276f565b60005b8181101561159d5782828281811061168257611682613be6565b905060200281019061169491906143a0565b6116a5906040810190602001613528565b61177157600360008484848181106116bf576116bf613be6565b90506020028101906116d191906143a0565b6116df9060208101906135c6565b67ffffffffffffffff16815260208101919091526040016000908120611704916133d7565b82828281811061171657611716613be6565b905060200281019061172891906143a0565b6117369060208101906135c6565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a26119e6565b82828281811061178357611783613be6565b905060200281019061179591906143a0565b6117a3906040810190613c53565b90506000036117de576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106117f6576117f6613be6565b905060200281019061180891906143a0565b6118169060208101906135c6565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020905083838381811061184c5761184c613be6565b905060200281019061185e91906143a0565b61186c906040810190613c53565b8291611879919083613f10565b5083838381811061188c5761188c613be6565b905060200281019061189e91906143a0565b6118ac906060810190613c53565b1590506118f7578383838181106118c5576118c5613be6565b90506020028101906118d791906143a0565b6118e5906060810190613c53565b60018301916118f5919083613f10565b505b83838381811061190957611909613be6565b905060200281019061191b91906143a0565b611929906040810190613c53565b604051611937929190613b83565b604051809103902084848481811061195157611951613be6565b905060200281019061196391906143a0565b6119719060208101906135c6565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a872128686868181106119ae576119ae613be6565b90506020028101906119c091906143a0565b6119ce906060810190613c53565b6040516119dc9291906143d4565b60405180910390a3505b600101611668565b6119f661276f565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611ab1916143e8565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff841660009081526003602052209061159d9082614286565b611b6661276f565b73ffffffffffffffffffffffffffffffffffffffff8116611bb3576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611c3261276f565b60085473ffffffffffffffffffffffffffffffffffffffff1615611c9357611c93611c7260025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612b53565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611d4057611d40611d0060025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612cd5565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e6760405160405180910390a35050565b333014611dd7576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de760408201602083016135c6565b611df46040830183613c53565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611e4b92509050613b93565b15905080611ea15750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611e8c91906143e8565b9081526040519081900360200190205460ff16155b15611eda57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610c8c91906135b3565b611eea60408401602085016135c6565b67ffffffffffffffff8116600090815260036020526040902080548190611f1090613b93565b9050600003611f57576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c8c565b6000611f666060870187613c53565b810190611f739190613425565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff16611fb357611fb3611fae8260016143fa565b6127f0565b505050505050565b6001611fc86005836128fd565b14612002576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610c8c565b61200d816000610c9c565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161205590613b93565b80601f016020809104026020016040519081016040528092919081815260200182805461208190613b93565b80156120ce5780601f106120a3576101008083540402835291602001916120ce565b820191906000526020600020905b8154815290600101906020018083116120b157829003601f168201915b505050505081526020016003820180546120e790613b93565b80601f016020809104026020016040519081016040528092919081815260200182805461211390613b93565b80156121605780601f1061213557610100808354040283529160200191612160565b820191906000526020600020905b81548152906001019060200180831161214357829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156121e35760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff16825260019081015482840152908352909201910161218e565b505050508152505090506121f681612dd9565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff831660009081526003602052604081208054859190819061224e90613b93565b9050600003612295576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c8c565b6040805160a08101825267ffffffffffffffff88166000908152600360205291822080548291906122c590613b93565b80601f01602080910402602001604051908101604052809291908181526020018280546122f190613b93565b801561233e5780601f106123135761010080835404028352916020019161233e565b820191906000526020600020905b81548152906001019060200180831161232157829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b16600090815260039092529020600101805460809092019161239f90613b93565b80601f01602080910402602001604051908101604052809291908181526020018280546123cb90613b93565b80156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050505050815250905060005b865181101561257557612495333089848151811061244557612445613be6565b6020026020010151602001518a858151811061246357612463613be6565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612e4b909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106124c5576124c5613be6565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161461256d57600254875161256d9173ffffffffffffffffffffffffffffffffffffffff169089908490811061251e5761251e613be6565b60200260200101516020015189848151811061253c5761253c613be6565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612b539092919063ffffffff16565b600101612425565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906125cf908b90869060040161440d565b602060405180830381865afa1580156125ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261091906144da565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612656576008546126569073ffffffffffffffffffffffffffffffffffffffff16333084612e4b565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f991161561268857600061268a565b825b8a856040518463ffffffff1660e01b81526004016126a992919061440d565b60206040518083038185885af11580156126c7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126ec91906144da565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b61276361276f565b61276c81612ea9565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c8c565b80600116600103612833576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612867565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161287c91815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152600a5460008085526020850190935290935061159d9267ffffffffffffffff909116916128f6565b60408051808201909152600080825260208201528152602001906001900390816128cf5790505b5083612225565b60006129098383612f9e565b9392505050565b8047101561297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c8c565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146129d4576040519150601f19603f3d011682016040523d82523d6000602084013e6129d9565b606091505b505090508061159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c8c565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261159d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613028565b6000612b4b848484613134565b949350505050565b801580612bf357506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf191906144da565b155b612c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610c8c565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261159d9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612abc565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7091906144da565b612d7a91906143fa565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612dd39085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612abc565b50505050565b612de161276f565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612e1d9084906004016136fd565b600060405180830381600087803b158015612e3757600080fd5b505af1158015611392573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612dd39085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612abc565b3373ffffffffffffffffffffffffffffffffffffffff821603612f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c8c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580612fc25750612fc28484613151565b612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610c8c565b600061308a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661315d9092919063ffffffff16565b80519091501561159d57808060200190518101906130a891906144f3565b61159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c8c565b60008281526002840160205260408120829055612b4b848461316c565b60006129098383613178565b6060612b4b8484600085613190565b600061290983836132a9565b60008181526001830160205260408120541515612909565b606082471015613222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c8c565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161324b91906143e8565b60006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b509150915061329e878383876132f8565b979650505050505050565b60008181526001830160205260408120546132f057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610937565b506000610937565b6060831561338e5782516000036133875773ffffffffffffffffffffffffffffffffffffffff85163b613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c8c565b5081612b4b565b612b4b83838151156133a35781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c91906135b3565b5080546133e390613b93565b6000825580601f106133f3575050565b601f01602090049060005260206000209081019061276c91905b80821115613421576000815560010161340d565b5090565b60006020828403121561343757600080fd5b5035919050565b6020810160038310613479577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff8116811461276c57600080fd5b6000806000604084860312156134aa57600080fd5b83356134b58161347f565b9250602084013567ffffffffffffffff808211156134d257600080fd5b818601915086601f8301126134e657600080fd5b8135818111156134f557600080fd5b87602082850101111561350757600080fd5b6020830194508093505050509250925092565b801515811461276c57600080fd5b60006020828403121561353a57600080fd5b81356129098161351a565b60005b83811015613560578181015183820152602001613548565b50506000910152565b60008151808452613581816020860160208601613545565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129096020830184613569565b6000602082840312156135d857600080fd5b81356129098161347f565b6040815260006135f66040830185613569565b82810360208401526136088185613569565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461276c57600080fd5b6000806040838503121561364657600080fd5b823561365181613611565b946020939093013593505050565b60008060006060848603121561367457600080fd5b833561367f81613611565b9250602084013561368f81613611565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156136f2578151805173ffffffffffffffffffffffffffffffffffffffff16885283015183880152604090960195908201906001016136b5565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261373760c0840182613569565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526137738383613569565b925060808601519150808584030160a08601525061360882826136a0565b600080604083850312156137a457600080fd5b8235915060208301356137b681613611565b809150509250929050565b60008083601f8401126137d357600080fd5b50813567ffffffffffffffff8111156137eb57600080fd5b6020830191508360208260051b850101111561380657600080fd5b9250929050565b6000806000806040858703121561382357600080fd5b843567ffffffffffffffff8082111561383b57600080fd5b613847888389016137c1565b9096509450602087013591508082111561386057600080fd5b5061386d878288016137c1565b95989497509550505050565b60006020828403121561388b57600080fd5b813567ffffffffffffffff8111156138a257600080fd5b820160a0818503121561290957600080fd5b6000602082840312156138c657600080fd5b813561290981613611565b600080602083850312156138e457600080fd5b823567ffffffffffffffff8111156138fb57600080fd5b613907858286016137c1565b90969095509350505050565b6000806040838503121561392657600080fd5b82356139318161347f565b915060208301356137b681613611565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561399357613993613941565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139e0576139e0613941565b604052919050565b600082601f8301126139f957600080fd5b813567ffffffffffffffff811115613a1357613a13613941565b613a4460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613999565b818152846020838601011115613a5957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613a8b57600080fd5b8335613a968161347f565b925060208481013567ffffffffffffffff80821115613ab457600080fd5b818701915087601f830112613ac857600080fd5b813581811115613ada57613ada613941565b613ae8848260051b01613999565b81815260069190911b8301840190848101908a831115613b0757600080fd5b938501935b82851015613b53576040858c031215613b255760008081fd5b613b2d613970565b8535613b3881613611565b81528587013587820152825260409094019390850190613b0c565b965050506040870135925080831115613b6b57600080fd5b5050613b79868287016139e8565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613ba757607f821691505b602082108103613be0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c4957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c8857600080fd5b83018035915067ffffffffffffffff821115613ca357600080fd5b60200191503681900382131561380657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ced57600080fd5b830160208101925035905067ffffffffffffffff811115613d0d57600080fd5b80360382131561380657600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156136f2578135613d8881613611565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613d75565b602081528135602082015260006020830135613dd58161347f565b67ffffffffffffffff8082166040850152613df36040860186613cb8565b925060a06060860152613e0a60c086018483613d1c565b925050613e1a6060860186613cb8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613e50858385613d1c565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613e8957600080fd5b60209288019283019235915083821115613ea257600080fd5b8160061b3603831315613eb457600080fd5b8685030160a087015261329e848284613d65565b601f82111561159d576000816000526020600020601f850160051c81016020861015613ef15750805b601f850160051c820191505b81811015611fb357828155600101613efd565b67ffffffffffffffff831115613f2857613f28613941565b613f3c83613f368354613b93565b83613ec8565b6000601f841160018114613f8e5760008515613f585750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611392565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613fdd5786850135825560209485019460019092019101613fbd565b5086821015614018577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561406481613611565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156140ca576140ca613941565b8054838255808410156141575760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461410b5761410b61402a565b808616861461411c5761411c61402a565b5060008360005260206000208360011b81018760011b820191505b80821015614152578282558284830155600282019150614137565b505050505b5060008181526020812083915b85811015611fb3576141768383614059565b6040929092019160029190910190600101614164565b813581556001810160208301356141a28161347f565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556141e26040860186613c53565b935091506141f4838360028701613f10565b6142016060860186613c53565b93509150614213838360038701613f10565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261424a57600080fd5b91840191823591508082111561425f57600080fd5b506020820191508060061b360382131561427857600080fd5b612dd38183600486016140b1565b815167ffffffffffffffff8111156142a0576142a0613941565b6142b4816142ae8454613b93565b84613ec8565b602080601f83116001811461430757600084156142d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611fb3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561435457888601518255948401946001909101908401614335565b508582101561439057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c4957600080fd5b602081526000612b4b602083018486613d1c565b60008251613c49818460208701613545565b808201808211156109375761093761402a565b67ffffffffffffffff83168152604060208201526000825160a0604084015261443960e0840182613569565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526144758383613569565b9250604086015191508085840301608086015261449283836136a0565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506144d08282613569565b9695505050505050565b6000602082840312156144ec57600080fd5b5051919050565b60006020828403121561450557600080fd5b81516129098161351a56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldFeeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162004bda38038062004bda8339810160408190526200003491620005bd565b8181818033806000816200008f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c257620000c28162000135565b5050506001600160a01b038116620000ed576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b031991821681179092556008805493861693909116831790556200012b9250600019620001e0565b50505050620006ba565b336001600160a01b038216036200018f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000086565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200025e5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c9190620005fc565b155b620002d25760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000086565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200032a9185916200032f16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200037e906001600160a01b03851690849062000400565b8051909150156200032a57808060200190518101906200039f919062000616565b6200032a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000086565b606062000411848460008562000419565b949350505050565b6060824710156200047c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000086565b600080866001600160a01b031685876040516200049a919062000667565b60006040518083038185875af1925050503d8060008114620004d9576040519150601f19603f3d011682016040523d82523d6000602084013e620004de565b606091505b509092509050620004f287838387620004fd565b979650505050505050565b606083156200057157825160000362000569576001600160a01b0385163b620005695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000086565b508162000411565b620004118383815115620005885781518083602001fd5b8060405162461bcd60e51b815260040162000086919062000685565b6001600160a01b0381168114620005ba57600080fd5b50565b60008060408385031215620005d157600080fd5b8251620005de81620005a4565b6020840151909250620005f181620005a4565b809150509250929050565b6000602082840312156200060f57600080fd5b5051919050565b6000602082840312156200062957600080fd5b815180151581146200063a57600080fd5b9392505050565b60005b838110156200065e57818101518382015260200162000644565b50506000910152565b600082516200067b81846020870162000641565b9190910192915050565b6020815260008251806020840152620006a681604085016020870162000641565b601f01601f19169190910160400192915050565b61451080620006ca6000396000f3fe6080604052600436106101c65760003560e01c806385572ffb116100f7578063bee518a411610095578063e4ca875411610064578063e4ca8754146105c5578063e89b4485146105e5578063f2fde38b146105f8578063ff2deec31461061857600080fd5b8063bee518a41461051a578063c851cc3214610565578063c89245d514610585578063cf6730f8146105a557600080fd5b80639fe74e26116100d15780639fe74e261461047f578063b0f479a11461049f578063b187bd26146104ca578063b5a11011146104fa57600080fd5b806385572ffb146104145780638da5cb5b146104345780639d2aede51461045f57600080fd5b80635075a9d4116101645780636939cd971161013e5780636939cd97146103925780636d62d633146103bf57806379ba5097146103df5780638462a2b9146103f457600080fd5b80635075a9d414610324578063536c6bfa146103525780635e35359e1461037257600080fd5b80631892b906116101a05780631892b906146102755780632874d8bf146102955780632b6e5d63146102aa57806335f170ef146102f657600080fd5b80630e958d6b146101d257806316c38b3c14610207578063181f5a771461022957600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed36600461346f565b610645565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b50610227610222366004613502565b610690565b005b34801561023557600080fd5b50604080518082018252601281527f50696e67506f6e6744656d6f20312e332e300000000000000000000000000000602082015290516101fe919061358d565b34801561028157600080fd5b506102276102903660046135a0565b6106e2565b3480156102a157600080fd5b5061022761073d565b3480156102b657600080fd5b5060095473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b34801561030257600080fd5b506103166103113660046135a0565b610779565b6040516101fe9291906135bd565b34801561033057600080fd5b5061034461033f3660046135eb565b6108a5565b6040519081526020016101fe565b34801561035e57600080fd5b5061022761036d366004613626565b6108b8565b34801561037e57600080fd5b5061022761038d366004613652565b61091c565b34801561039e57600080fd5b506103b26103ad3660046135eb565b6109b1565b6040516101fe91906136f0565b3480156103cb57600080fd5b506102276103da366004613784565b610bbc565b3480156103eb57600080fd5b50610227610ed6565b34801561040057600080fd5b5061022761040f366004613800565b610fd3565b34801561042057600080fd5b5061022761042f36600461386c565b611314565b34801561044057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102d1565b34801561046b57600080fd5b5061022761047a3660046138a7565b61151d565b34801561048b57600080fd5b5061022761049a3660046138c4565b6115e2565b3480156104ab57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102d1565b3480156104d657600080fd5b5060095474010000000000000000000000000000000000000000900460ff166101f2565b34801561050657600080fd5b50610227610515366004613906565b611973565b34801561052657600080fd5b5060085474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff90911681526020016101fe565b34801561057157600080fd5b506102276105803660046138a7565b611b19565b34801561059157600080fd5b506102276105a03660046138a7565b611be5565b3480156105b157600080fd5b506102276105c036600461386c565b611d4f565b3480156105d157600080fd5b506102276105e03660046135eb565b611f64565b6103446105f3366004613a69565b6121ce565b34801561060457600080fd5b506102276106133660046138a7565b612778565b34801561062457600080fd5b506008546102d19073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906106749085908590613b76565b9081526040519081900360200190205460ff1690509392505050565b61069861278c565b6009805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6106ea61278c565b6008805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61074561278c565b600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055610777600161280d565b565b60036020526000908152604090208054819061079490613b86565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090613b86565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b50505050509080600101805461082290613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461084e90613b86565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905082565b60006108b2600583612931565b92915050565b6108c061278c565b6108ca8282612944565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b61092461278c565b61094573ffffffffffffffffffffffffffffffffffffffff84168383612a9e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516109a491815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610a2090613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4c90613b86565b8015610a995780601f10610a6e57610100808354040283529160200191610a99565b820191906000526020600020905b815481529060010190602001808311610a7c57829003601f168201915b50505050508152602001600382018054610ab290613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613b86565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610bae5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610b59565b505050915250909392505050565b610bc461278c565b6001610bd1600584612931565b14610c10576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610c208260025b60059190612b72565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610c6890613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9490613b86565b8015610ce15780601f10610cb657610100808354040283529160200191610ce1565b820191906000526020600020905b815481529060010190602001808311610cc457829003601f168201915b50505050508152602001600382018054610cfa90613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690613b86565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610df65760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610da1565b5050505081525050905060005b816080015151811015610e8557610e7d8383608001518381518110610e2a57610e2a613bd9565b60200260200101516020015184608001518481518110610e4c57610e4c613bd9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612a9e9092919063ffffffff16565b600101610e03565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610f57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c07565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610fdb61278c565b60005b8181101561116e5760036000848484818110610ffc57610ffc613bd9565b905060200281019061100e9190613c08565b61101c9060208101906135a0565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061105357611053613bd9565b90506020028101906110659190613c08565b611073906020810190613c46565b604051611081929190613b76565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106110c8576110c8613bd9565b90506020028101906110da9190613c08565b6110e8906020810190613c46565b6040516110f6929190613b76565b604051809103902083838381811061111057611110613bd9565b90506020028101906111229190613c08565b6111309060208101906135a0565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101610fde565b5060005b8381101561130d5760016003600087878581811061119257611192613bd9565b90506020028101906111a49190613c08565b6111b29060208101906135a0565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106111e9576111e9613bd9565b90506020028101906111fb9190613c08565b611209906020810190613c46565b604051611217929190613b76565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061126757611267613bd9565b90506020028101906112799190613c08565b611287906020810190613c46565b604051611295929190613b76565b60405180910390208585838181106112af576112af613bd9565b90506020028101906112c19190613c08565b6112cf9060208101906135a0565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101611172565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611367576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610c07565b61137760408201602083016135a0565b67ffffffffffffffff811660009081526003602052604090208054819061139d90613b86565b90506000036113e4576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c07565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611420908690600401613dad565b600060405180830381600087803b15801561143a57600080fd5b505af192505050801561144b575060015b6114eb573d808015611479576040519150601f19603f3d011682016040523d82523d6000602084013e61147e565b606091505b5061148b84356001610c17565b508335600090815260046020526040902084906114a8828261417f565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906114dd90849061358d565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b61152561278c565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560408051602081019290925201604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815260085474010000000000000000000000000000000000000000900467ffffffffffffffff166000908152600360205220906115de9082614279565b5050565b6115ea61278c565b60005b818110156115185782828281811061160757611607613bd9565b90506020028101906116199190614393565b61162a906040810190602001613502565b6116f6576003600084848481811061164457611644613bd9565b90506020028101906116569190614393565b6116649060208101906135a0565b67ffffffffffffffff168152602081019190915260400160009081206116899161340b565b82828281811061169b5761169b613bd9565b90506020028101906116ad9190614393565b6116bb9060208101906135a0565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a261196b565b82828281811061170857611708613bd9565b905060200281019061171a9190614393565b611728906040810190613c46565b9050600003611763576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600085858581811061177b5761177b613bd9565b905060200281019061178d9190614393565b61179b9060208101906135a0565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002090508383838181106117d1576117d1613bd9565b90506020028101906117e39190614393565b6117f1906040810190613c46565b82916117fe919083613f03565b5083838381811061181157611811613bd9565b90506020028101906118239190614393565b611831906060810190613c46565b15905061187c5783838381811061184a5761184a613bd9565b905060200281019061185c9190614393565b61186a906060810190613c46565b600183019161187a919083613f03565b505b83838381811061188e5761188e613bd9565b90506020028101906118a09190614393565b6118ae906040810190613c46565b6040516118bc929190613b76565b60405180910390208484848181106118d6576118d6613bd9565b90506020028101906118e89190614393565b6118f69060208101906135a0565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721286868681811061193357611933613bd9565b90506020028101906119459190614393565b611953906060810190613c46565b6040516119619291906143c7565b60405180910390a3505b6001016115ed565b61197b61278c565b600880547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff851690810291909117909155600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560009182526003602090815260409283902083519182019290925260019260029092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a6c916143db565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff84166000908152600360205220906115189082614279565b611b2161278c565b73ffffffffffffffffffffffffffffffffffffffff8116611b6e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611bed61278c565b60085473ffffffffffffffffffffffffffffffffffffffff1615611c4e57611c4e611c2d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612b87565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611cfb57611cfb611cbb60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d09565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b333014611d88576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d9860408201602083016135a0565b611da56040830183613c46565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611dfc92509050613b86565b15905080611e525750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611e3d91906143db565b9081526040519081900360200190205460ff16155b15611e8b57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610c07919061358d565b611e9b60408401602085016135a0565b67ffffffffffffffff8116600090815260036020526040902080548190611ec190613b86565b9050600003611f08576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c07565b6000611f176060870187613c46565b810190611f2491906135eb565b60095490915074010000000000000000000000000000000000000000900460ff16611f5c57611f5c611f578260016143ed565b61280d565b505050505050565b6001611f71600583612931565b14611fab576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610c07565b611fb6816000610c17565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611ffe90613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461202a90613b86565b80156120775780601f1061204c57610100808354040283529160200191612077565b820191906000526020600020905b81548152906001019060200180831161205a57829003601f168201915b5050505050815260200160038201805461209090613b86565b80601f01602080910402602001604051908101604052809291908181526020018280546120bc90613b86565b80156121095780601f106120de57610100808354040283529160200191612109565b820191906000526020600020905b8154815290600101906020018083116120ec57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561218c5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101612137565b5050505081525050905061219f81612e0d565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff83166000908152600360205260408120805485919081906121f790613b86565b905060000361223e576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610c07565b6040805160a08101825267ffffffffffffffff881660009081526003602052918220805482919061226e90613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461229a90613b86565b80156122e75780601f106122bc576101008083540402835291602001916122e7565b820191906000526020600020905b8154815290600101906020018083116122ca57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b16600090815260039092529020600101805460809092019161234890613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461237490613b86565b80156123c15780601f10612396576101008083540402835291602001916123c1565b820191906000526020600020905b8154815290600101906020018083116123a457829003601f168201915b5050505050815250905060005b865181101561251e5761243e33308984815181106123ee576123ee613bd9565b6020026020010151602001518a858151811061240c5761240c613bd9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612e7f909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061246e5761246e613bd9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146125165760025487516125169173ffffffffffffffffffffffffffffffffffffffff16908990849081106124c7576124c7613bd9565b6020026020010151602001518984815181106124e5576124e5613bd9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612b879092919063ffffffff16565b6001016123ce565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded90612578908b908690600401614400565b602060405180830381865afa158015612595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b991906144cd565b60085490915073ffffffffffffffffffffffffffffffffffffffff161580159061267257506008546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561264c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267091906144cd565b105b1561269c5760085461269c9073ffffffffffffffffffffffffffffffffffffffff16333084612e7f565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f99116156126ce5760006126d0565b825b8a856040518463ffffffff1660e01b81526004016126ef929190614400565b60206040518083038185885af115801561270d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061273291906144cd565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8560405161276591815260200190565b60405180910390a1505050509392505050565b61278061278c565b61278981612edd565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c07565b80600116600103612850576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612884565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161289991815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152600854600080855260208501909352909350611518927401000000000000000000000000000000000000000090910467ffffffffffffffff169161292a565b60408051808201909152600080825260208201528152602001906001900390816129035790505b50836121ce565b600061293d8383612fd2565b9392505050565b804710156129ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c07565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b5050905080611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c07565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115189084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261305c565b6000612b7f848484613168565b949350505050565b801580612c2757506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2591906144cd565b155b612cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610c07565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115189084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612af0565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da491906144cd565b612dae91906143ed565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612e079085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612af0565b50505050565b612e1561278c565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612e519084906004016136f0565b600060405180830381600087803b158015612e6b57600080fd5b505af115801561130d573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612e079085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612af0565b3373ffffffffffffffffffffffffffffffffffffffff821603612f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c07565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580612ff65750612ff68484613185565b61293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610c07565b60006130be826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131919092919063ffffffff16565b80519091501561151857808060200190518101906130dc91906144e6565b611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c07565b60008281526002840160205260408120829055612b7f84846131a0565b600061293d83836131ac565b6060612b7f84846000856131c4565b600061293d83836132dd565b6000818152600183016020526040812054151561293d565b606082471015613256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c07565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161327f91906143db565b60006040518083038185875af1925050503d80600081146132bc576040519150601f19603f3d011682016040523d82523d6000602084013e6132c1565b606091505b50915091506132d28783838761332c565b979650505050505050565b6000818152600183016020526040812054613324575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108b2565b5060006108b2565b606083156133c25782516000036133bb5773ffffffffffffffffffffffffffffffffffffffff85163b6133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c07565b5081612b7f565b612b7f83838151156133d75781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c07919061358d565b50805461341790613b86565b6000825580601f10613427575050565b601f01602090049060005260206000209081019061278991905b808211156134555760008155600101613441565b5090565b67ffffffffffffffff8116811461278957600080fd5b60008060006040848603121561348457600080fd5b833561348f81613459565b9250602084013567ffffffffffffffff808211156134ac57600080fd5b818601915086601f8301126134c057600080fd5b8135818111156134cf57600080fd5b8760208285010111156134e157600080fd5b6020830194508093505050509250925092565b801515811461278957600080fd5b60006020828403121561351457600080fd5b813561293d816134f4565b60005b8381101561353a578181015183820152602001613522565b50506000910152565b6000815180845261355b81602086016020860161351f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061293d6020830184613543565b6000602082840312156135b257600080fd5b813561293d81613459565b6040815260006135d06040830185613543565b82810360208401526135e28185613543565b95945050505050565b6000602082840312156135fd57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461278957600080fd5b6000806040838503121561363957600080fd5b823561364481613604565b946020939093013593505050565b60008060006060848603121561366757600080fd5b833561367281613604565b9250602084013561368281613604565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156136e5578151805173ffffffffffffffffffffffffffffffffffffffff16885283015183880152604090960195908201906001016136a8565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261372a60c0840182613543565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526137668383613543565b925060808601519150808584030160a0860152506135e28282613693565b6000806040838503121561379757600080fd5b8235915060208301356137a981613604565b809150509250929050565b60008083601f8401126137c657600080fd5b50813567ffffffffffffffff8111156137de57600080fd5b6020830191508360208260051b85010111156137f957600080fd5b9250929050565b6000806000806040858703121561381657600080fd5b843567ffffffffffffffff8082111561382e57600080fd5b61383a888389016137b4565b9096509450602087013591508082111561385357600080fd5b50613860878288016137b4565b95989497509550505050565b60006020828403121561387e57600080fd5b813567ffffffffffffffff81111561389557600080fd5b820160a0818503121561293d57600080fd5b6000602082840312156138b957600080fd5b813561293d81613604565b600080602083850312156138d757600080fd5b823567ffffffffffffffff8111156138ee57600080fd5b6138fa858286016137b4565b90969095509350505050565b6000806040838503121561391957600080fd5b823561392481613459565b915060208301356137a981613604565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561398657613986613934565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139d3576139d3613934565b604052919050565b600082601f8301126139ec57600080fd5b813567ffffffffffffffff811115613a0657613a06613934565b613a3760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161398c565b818152846020838601011115613a4c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613a7e57600080fd5b8335613a8981613459565b925060208481013567ffffffffffffffff80821115613aa757600080fd5b818701915087601f830112613abb57600080fd5b813581811115613acd57613acd613934565b613adb848260051b0161398c565b81815260069190911b8301840190848101908a831115613afa57600080fd5b938501935b82851015613b46576040858c031215613b185760008081fd5b613b20613963565b8535613b2b81613604565b81528587013587820152825260409094019390850190613aff565b965050506040870135925080831115613b5e57600080fd5b5050613b6c868287016139db565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613b9a57607f821691505b602082108103613bd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613c3c57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c7b57600080fd5b83018035915067ffffffffffffffff821115613c9657600080fd5b6020019150368190038213156137f957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ce057600080fd5b830160208101925035905067ffffffffffffffff811115613d0057600080fd5b8036038213156137f957600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156136e5578135613d7b81613604565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613d68565b602081528135602082015260006020830135613dc881613459565b67ffffffffffffffff8082166040850152613de66040860186613cab565b925060a06060860152613dfd60c086018483613d0f565b925050613e0d6060860186613cab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613e43858385613d0f565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613e7c57600080fd5b60209288019283019235915083821115613e9557600080fd5b8160061b3603831315613ea757600080fd5b8685030160a08701526132d2848284613d58565b601f821115611518576000816000526020600020601f850160051c81016020861015613ee45750805b601f850160051c820191505b81811015611f5c57828155600101613ef0565b67ffffffffffffffff831115613f1b57613f1b613934565b613f2f83613f298354613b86565b83613ebb565b6000601f841160018114613f815760008515613f4b5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561130d565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613fd05786850135825560209485019460019092019101613fb0565b508682101561400b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561405781613604565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156140bd576140bd613934565b80548382558084101561414a5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146140fe576140fe61401d565b808616861461410f5761410f61401d565b5060008360005260206000208360011b81018760011b820191505b8082101561414557828255828483015560028201915061412a565b505050505b5060008181526020812083915b85811015611f5c57614169838361404c565b6040929092019160029190910190600101614157565b8135815560018101602083013561419581613459565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556141d56040860186613c46565b935091506141e7838360028701613f03565b6141f46060860186613c46565b93509150614206838360038701613f03565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261423d57600080fd5b91840191823591508082111561425257600080fd5b506020820191508060061b360382131561426b57600080fd5b612e078183600486016140a4565b815167ffffffffffffffff81111561429357614293613934565b6142a7816142a18454613b86565b84613ebb565b602080601f8311600181146142fa57600084156142c45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611f5c565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561434757888601518255948401946001909101908401614328565b508582101561438357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613c3c57600080fd5b602081526000612b7f602083018486613d0f565b60008251613c3c81846020870161351f565b808201808211156108b2576108b261401d565b67ffffffffffffffff83168152604060208201526000825160a0604084015261442c60e0840182613543565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526144688383613543565b925060408601519150808584030160808601526144858383613693565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506144c38282613543565b9695505050505050565b6000602082840312156144df57600080fd5b5051919050565b6000602082840312156144f857600080fd5b815161293d816134f456fea164736f6c6343000818000a", } var PingPongDemoABI = PingPongDemoMetaData.ABI @@ -196,28 +196,6 @@ func (_PingPongDemo *PingPongDemoTransactorRaw) Transact(opts *bind.TransactOpts return _PingPongDemo.Contract.contract.Transact(opts, method, params...) } -func (_PingPongDemo *PingPongDemoCaller) ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _PingPongDemo.contract.Call(opts, &out, "ACK_MESSAGE_HEADER") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -func (_PingPongDemo *PingPongDemoSession) ACKMESSAGEHEADER() (string, error) { - return _PingPongDemo.Contract.ACKMESSAGEHEADER(&_PingPongDemo.CallOpts) -} - -func (_PingPongDemo *PingPongDemoCallerSession) ACKMESSAGEHEADER() (string, error) { - return _PingPongDemo.Contract.ACKMESSAGEHEADER(&_PingPongDemo.CallOpts) -} - func (_PingPongDemo *PingPongDemoCaller) GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _PingPongDemo.contract.Call(opts, &out, "getCounterpartAddress") @@ -446,28 +424,6 @@ func (_PingPongDemo *PingPongDemoCallerSession) SFeeToken() (common.Address, err return _PingPongDemo.Contract.SFeeToken(&_PingPongDemo.CallOpts) } -func (_PingPongDemo *PingPongDemoCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { - var out []interface{} - err := _PingPongDemo.contract.Call(opts, &out, "s_messageStatus", messageId) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -func (_PingPongDemo *PingPongDemoSession) SMessageStatus(messageId [32]byte) (uint8, error) { - return _PingPongDemo.Contract.SMessageStatus(&_PingPongDemo.CallOpts, messageId) -} - -func (_PingPongDemo *PingPongDemoCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { - return _PingPongDemo.Contract.SMessageStatus(&_PingPongDemo.CallOpts, messageId) -} - func (_PingPongDemo *PingPongDemoCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { var out []interface{} err := _PingPongDemo.contract.Call(opts, &out, "typeAndVersion") @@ -1451,41 +1407,23 @@ func (it *PingPongDemoFeeTokenUpdatedIterator) Close() error { } type PingPongDemoFeeTokenUpdated struct { - OldToken common.Address - NewToken common.Address - Raw types.Log + OldFeeToken common.Address + NewFeeToken common.Address + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterFeeTokenUpdated(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*PingPongDemoFeeTokenUpdatedIterator, error) { - - var oldTokenRule []interface{} - for _, oldTokenItem := range oldToken { - oldTokenRule = append(oldTokenRule, oldTokenItem) - } - var newTokenRule []interface{} - for _, newTokenItem := range newToken { - newTokenRule = append(newTokenRule, newTokenItem) - } +func (_PingPongDemo *PingPongDemoFilterer) FilterFeeTokenUpdated(opts *bind.FilterOpts) (*PingPongDemoFeeTokenUpdatedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "FeeTokenUpdated", oldTokenRule, newTokenRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } return &PingPongDemoFeeTokenUpdatedIterator{contract: _PingPongDemo.contract, event: "FeeTokenUpdated", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { - - var oldTokenRule []interface{} - for _, oldTokenItem := range oldToken { - oldTokenRule = append(oldTokenRule, oldTokenItem) - } - var newTokenRule []interface{} - for _, newTokenItem := range newToken { - newTokenRule = append(newTokenRule, newTokenItem) - } +func (_PingPongDemo *PingPongDemoFilterer) WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "FeeTokenUpdated", oldTokenRule, newTokenRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } @@ -1654,240 +1592,6 @@ func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAbandoned(log types.Log) return event, nil } -type PingPongDemoMessageAckReceivedIterator struct { - Event *PingPongDemoMessageAckReceived - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *PingPongDemoMessageAckReceivedIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(PingPongDemoMessageAckReceived) - 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 - } - } - - select { - case log := <-it.logs: - it.Event = new(PingPongDemoMessageAckReceived) - 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() - } -} - -func (it *PingPongDemoMessageAckReceivedIterator) Error() error { - return it.fail -} - -func (it *PingPongDemoMessageAckReceivedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type PingPongDemoMessageAckReceived struct { - MessageId [32]byte - Raw types.Log -} - -func (_PingPongDemo *PingPongDemoFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*PingPongDemoMessageAckReceivedIterator, error) { - - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageAckReceived") - if err != nil { - return nil, err - } - return &PingPongDemoMessageAckReceivedIterator{contract: _PingPongDemo.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil -} - -func (_PingPongDemo *PingPongDemoFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckReceived) (event.Subscription, error) { - - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageAckReceived") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(PingPongDemoMessageAckReceived) - if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckReceived", 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 -} - -func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAckReceived(log types.Log) (*PingPongDemoMessageAckReceived, error) { - event := new(PingPongDemoMessageAckReceived) - if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type PingPongDemoMessageAckSentIterator struct { - Event *PingPongDemoMessageAckSent - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *PingPongDemoMessageAckSentIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(PingPongDemoMessageAckSent) - 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 - } - } - - select { - case log := <-it.logs: - it.Event = new(PingPongDemoMessageAckSent) - 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() - } -} - -func (it *PingPongDemoMessageAckSentIterator) Error() error { - return it.fail -} - -func (it *PingPongDemoMessageAckSentIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type PingPongDemoMessageAckSent struct { - IncomingMessageId [32]byte - Raw types.Log -} - -func (_PingPongDemo *PingPongDemoFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*PingPongDemoMessageAckSentIterator, error) { - - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageAckSent") - if err != nil { - return nil, err - } - return &PingPongDemoMessageAckSentIterator{contract: _PingPongDemo.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil -} - -func (_PingPongDemo *PingPongDemoFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckSent) (event.Subscription, error) { - - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageAckSent") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(PingPongDemoMessageAckSent) - if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckSent", 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 -} - -func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAckSent(log types.Log) (*PingPongDemoMessageAckSent, error) { - event := new(PingPongDemoMessageAckSent) - if err := _PingPongDemo.contract.UnpackLog(event, "MessageAckSent", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - type PingPongDemoMessageFailedIterator struct { Event *PingPongDemoMessageFailed @@ -2204,41 +1908,22 @@ func (it *PingPongDemoMessageSentIterator) Close() error { } type PingPongDemoMessageSent struct { - IncomingMessageId [32]byte - ACKMessageId [32]byte - Raw types.Log + MessageId [32]byte + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*PingPongDemoMessageSentIterator, error) { - - var incomingMessageIdRule []interface{} - for _, incomingMessageIdItem := range incomingMessageId { - incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) - } - var ACKMessageIdRule []interface{} - for _, ACKMessageIdItem := range ACKMessageId { - ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) - } +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSent(opts *bind.FilterOpts) (*PingPongDemoMessageSentIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSent") if err != nil { return nil, err } return &PingPongDemoMessageSentIterator{contract: _PingPongDemo.contract, event: "MessageSent", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent) (event.Subscription, error) { - var incomingMessageIdRule []interface{} - for _, incomingMessageIdItem := range incomingMessageId { - incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) - } - var ACKMessageIdRule []interface{} - for _, ACKMessageIdItem := range ACKMessageId { - ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) - } - - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSent") if err != nil { return nil, err } @@ -3070,10 +2755,6 @@ func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, return _PingPongDemo.ParseFeeTokenUpdated(log) case _PingPongDemo.abi.Events["MessageAbandoned"].ID: return _PingPongDemo.ParseMessageAbandoned(log) - case _PingPongDemo.abi.Events["MessageAckReceived"].ID: - return _PingPongDemo.ParseMessageAckReceived(log) - case _PingPongDemo.abi.Events["MessageAckSent"].ID: - return _PingPongDemo.ParseMessageAckSent(log) case _PingPongDemo.abi.Events["MessageFailed"].ID: return _PingPongDemo.ParseMessageFailed(log) case _PingPongDemo.abi.Events["MessageRecovered"].ID: @@ -3126,14 +2807,6 @@ func (PingPongDemoMessageAbandoned) Topic() common.Hash { return common.HexToHash("0xd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957") } -func (PingPongDemoMessageAckReceived) Topic() common.Hash { - return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") -} - -func (PingPongDemoMessageAckSent) Topic() common.Hash { - return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") -} - func (PingPongDemoMessageFailed) Topic() common.Hash { return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") } @@ -3143,7 +2816,7 @@ func (PingPongDemoMessageRecovered) Topic() common.Hash { } func (PingPongDemoMessageSent) Topic() common.Hash { - return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") + return common.HexToHash("0x54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a") } func (PingPongDemoMessageSucceeded) Topic() common.Hash { @@ -3175,8 +2848,6 @@ func (_PingPongDemo *PingPongDemo) Address() common.Address { } type PingPongDemoInterface interface { - ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) - GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) GetCounterpartChainSelector(opts *bind.CallOpts) (uint64, error) @@ -3199,8 +2870,6 @@ type PingPongDemoInterface interface { SFeeToken(opts *bind.CallOpts) (common.Address, error) - SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) - TypeAndVersion(opts *bind.CallOpts) (string, error) AbandonFailedMessage(opts *bind.TransactOpts, messageId [32]byte, receiver common.Address) (*types.Transaction, error) @@ -3271,9 +2940,9 @@ type PingPongDemoInterface interface { ParseChainRemoved(log types.Log) (*PingPongDemoChainRemoved, error) - FilterFeeTokenUpdated(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*PingPongDemoFeeTokenUpdatedIterator, error) + FilterFeeTokenUpdated(opts *bind.FilterOpts) (*PingPongDemoFeeTokenUpdatedIterator, error) - WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated) (event.Subscription, error) ParseFeeTokenUpdated(log types.Log) (*PingPongDemoFeeTokenUpdated, error) @@ -3283,18 +2952,6 @@ type PingPongDemoInterface interface { ParseMessageAbandoned(log types.Log) (*PingPongDemoMessageAbandoned, error) - FilterMessageAckReceived(opts *bind.FilterOpts) (*PingPongDemoMessageAckReceivedIterator, error) - - WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckReceived) (event.Subscription, error) - - ParseMessageAckReceived(log types.Log) (*PingPongDemoMessageAckReceived, error) - - FilterMessageAckSent(opts *bind.FilterOpts) (*PingPongDemoMessageAckSentIterator, error) - - WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAckSent) (event.Subscription, error) - - ParseMessageAckSent(log types.Log) (*PingPongDemoMessageAckSent, error) - FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageFailedIterator, error) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageFailed, messageId [][32]byte) (event.Subscription, error) @@ -3307,9 +2964,9 @@ type PingPongDemoInterface interface { ParseMessageRecovered(log types.Log) (*PingPongDemoMessageRecovered, error) - FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*PingPongDemoMessageSentIterator, error) + FilterMessageSent(opts *bind.FilterOpts) (*PingPongDemoMessageSentIterator, error) - WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent) (event.Subscription, error) ParseMessageSent(log types.Log) (*PingPongDemoMessageSent, error) diff --git a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go index 22998c3262..b1689599be 100644 --- a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go +++ b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var SelfFundedPingPongMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"CannotAcknowledgeUnsentMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b50604051620051393803806200513983398101604081905262000034916200059b565b82828181818181803380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c68162000177565b5050506001600160a01b038116620000f1576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013f576200013f6001600160a01b0382168360001962000222565b5050505050508060026200015491906200060a565b600a601d6101000a81548160ff021916908360ff1602179055505050506200070a565b336001600160a01b03821603620001d15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000630565b620002a691906200064a565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915291925062000302918691906200030816565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000357906001600160a01b038516908490620003de565b805190915015620003d9578080602001905181019062000378919062000666565b620003d95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b505050565b6060620003ef8484600085620003f7565b949350505050565b6060824710156200045a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b03168587604051620004789190620006b7565b60006040518083038185875af1925050503d8060008114620004b7576040519150601f19603f3d011682016040523d82523d6000602084013e620004bc565b606091505b509092509050620004d087838387620004db565b979650505050505050565b606083156200054f57825160000362000547576001600160a01b0385163b620005475760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b5081620003ef565b620003ef8383815115620005665781518083602001fd5b8060405162461bcd60e51b81526004016200008a9190620006d5565b6001600160a01b03811681146200059857600080fd5b50565b600080600060608486031215620005b157600080fd5b8351620005be8162000582565b6020850151909350620005d18162000582565b604085015190925060ff81168114620005e957600080fd5b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b60ff8181168382160290811690818114620006295762000629620005f4565b5092915050565b6000602082840312156200064357600080fd5b5051919050565b80820180821115620006605762000660620005f4565b92915050565b6000602082840312156200067957600080fd5b815180151581146200068a57600080fd5b9392505050565b60005b83811015620006ae57818101518382015260200162000694565b50506000910152565b60008251620006cb81846020870162000691565b9190910192915050565b6020815260008251806020840152620006f681604085016020870162000691565b601f01601f19169190910160400192915050565b614a1f806200071a6000396000f3fe60806040526004361061021d5760003560e01c80638da5cb5b1161011d578063c851cc32116100b0578063e6c725f51161007f578063ef686d8e11610064578063ef686d8e1461073b578063f2fde38b1461075b578063ff2deec31461077b57600080fd5b8063e6c725f5146106e2578063e89b44851461072857600080fd5b8063c851cc3214610662578063c89245d514610682578063cf6730f8146106a2578063e4ca8754146106c257600080fd5b8063b0f479a1116100ec578063b0f479a1146105b6578063b187bd26146105e1578063b5a1101114610619578063bee518a41461063957600080fd5b80638da5cb5b1461052b5780638f491cba146105565780639d2aede5146105765780639fe74e261461059657600080fd5b80635075a9d4116101b05780636d62d6331161017f57806379ba50971161016457806379ba5097146104d65780638462a2b9146104eb57806385572ffb1461050b57600080fd5b80636d62d6331461046d5780636fef519e1461048d57600080fd5b80635075a9d4146103d2578063536c6bfa146104005780635e35359e146104205780636939cd971461044057600080fd5b80631892b906116101ec5780631892b906146103175780632874d8bf146103375780632b6e5d631461034c57806335f170ef146103a457600080fd5b806305bfe982146102295780630e958d6b1461026f57806316c38b3c1461029f578063181f5a77146102c157600080fd5b3661022457005b600080fd5b34801561023557600080fd5b506102596102443660046138ac565b60096020526000908152604090205460ff1681565b60405161026691906138c5565b60405180910390f35b34801561027b57600080fd5b5061028f61028a36600461391c565b6107a8565b6040519015158152602001610266565b3480156102ab57600080fd5b506102bf6102ba3660046139af565b6107f3565b005b3480156102cd57600080fd5b5061030a6040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b6040516102669190613a3a565b34801561032357600080fd5b506102bf610332366004613a4d565b61084d565b34801561034357600080fd5b506102bf610890565b34801561035857600080fd5b50600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610266565b3480156103b057600080fd5b506103c46103bf366004613a4d565b6108cc565b604051610266929190613a6a565b3480156103de57600080fd5b506103f26103ed3660046138ac565b6109f8565b604051908152602001610266565b34801561040c57600080fd5b506102bf61041b366004613aba565b610a0b565b34801561042c57600080fd5b506102bf61043b366004613ae6565b610a6f565b34801561044c57600080fd5b5061046061045b3660046138ac565b610b04565b6040516102669190613b84565b34801561047957600080fd5b506102bf610488366004613c18565b610d0f565b34801561049957600080fd5b5061030a6040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b3480156104e257600080fd5b506102bf611029565b3480156104f757600080fd5b506102bf610506366004613c94565b611126565b34801561051757600080fd5b506102bf610526366004613d00565b611467565b34801561053757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661037f565b34801561056257600080fd5b506102bf6105713660046138ac565b611670565b34801561058257600080fd5b506102bf610591366004613d3b565b61184c565b3480156105a257600080fd5b506102bf6105b1366004613d58565b611907565b3480156105c257600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff1661037f565b3480156105ed57600080fd5b50600a547c0100000000000000000000000000000000000000000000000000000000900460ff1661028f565b34801561062557600080fd5b506102bf610634366004613d9a565b611c98565b34801561064557600080fd5b50600a5460405167ffffffffffffffff9091168152602001610266565b34801561066e57600080fd5b506102bf61067d366004613d3b565b611e08565b34801561068e57600080fd5b506102bf61069d366004613d3b565b611ed4565b3480156106ae57600080fd5b506102bf6106bd366004613d00565b612048565b3480156106ce57600080fd5b506102bf6106dd3660046138ac565b612265565b3480156106ee57600080fd5b50600a547d010000000000000000000000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610266565b6103f2610736366004613efd565b6124cf565b34801561074757600080fd5b506102bf61075636600461400a565b612a05565b34801561076757600080fd5b506102bf610776366004613d3b565b612a96565b34801561078757600080fd5b5060085461037f9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107d7908590859061402d565b9081526040519081900360200190205460ff1690509392505050565b6107fb612aa7565b600a80549115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b610855612aa7565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b610898612aa7565b600a80547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556108ca6001612b28565b565b6003602052600090815260409020805481906108e79061403d565b80601f01602080910402602001604051908101604052809291908181526020018280546109139061403d565b80156109605780601f1061093557610100808354040283529160200191610960565b820191906000526020600020905b81548152906001019060200180831161094357829003601f168201915b5050505050908060010180546109759061403d565b80601f01602080910402602001604051908101604052809291908181526020018280546109a19061403d565b80156109ee5780601f106109c3576101008083540402835291602001916109ee565b820191906000526020600020905b8154815290600101906020018083116109d157829003601f168201915b5050505050905082565b6000610a05600583612d84565b92915050565b610a13612aa7565b610a1d8282612d97565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b610a77612aa7565b610a9873ffffffffffffffffffffffffffffffffffffffff84168383612ef1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610af791815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610b739061403d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9f9061403d565b8015610bec5780601f10610bc157610100808354040283529160200191610bec565b820191906000526020600020905b815481529060010190602001808311610bcf57829003601f168201915b50505050508152602001600382018054610c059061403d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c319061403d565b8015610c7e5780601f10610c5357610100808354040283529160200191610c7e565b820191906000526020600020905b815481529060010190602001808311610c6157829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610d015760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610cac565b505050915250909392505050565b610d17612aa7565b6001610d24600584612d84565b14610d63576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610d738260025b60059190612fc5565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610dbb9061403d565b80601f0160208091040260200160405190810160405280929190818152602001828054610de79061403d565b8015610e345780601f10610e0957610100808354040283529160200191610e34565b820191906000526020600020905b815481529060010190602001808311610e1757829003601f168201915b50505050508152602001600382018054610e4d9061403d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e799061403d565b8015610ec65780601f10610e9b57610100808354040283529160200191610ec6565b820191906000526020600020905b815481529060010190602001808311610ea957829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610f495760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610ef4565b5050505081525050905060005b816080015151811015610fd857610fd08383608001518381518110610f7d57610f7d614090565b60200260200101516020015184608001518481518110610f9f57610f9f614090565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612ef19092919063ffffffff16565b600101610f56565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610d5a565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61112e612aa7565b60005b818110156112c1576003600084848481811061114f5761114f614090565b905060200281019061116191906140bf565b61116f906020810190613a4d565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106111a6576111a6614090565b90506020028101906111b891906140bf565b6111c69060208101906140fd565b6040516111d492919061402d565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905582828281811061121b5761121b614090565b905060200281019061122d91906140bf565b61123b9060208101906140fd565b60405161124992919061402d565b604051809103902083838381811061126357611263614090565b905060200281019061127591906140bf565b611283906020810190613a4d565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101611131565b5060005b83811015611460576001600360008787858181106112e5576112e5614090565b90506020028101906112f791906140bf565b611305906020810190613a4d565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061133c5761133c614090565b905060200281019061134e91906140bf565b61135c9060208101906140fd565b60405161136a92919061402d565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790558484828181106113ba576113ba614090565b90506020028101906113cc91906140bf565b6113da9060208101906140fd565b6040516113e892919061402d565b604051809103902085858381811061140257611402614090565b905060200281019061141491906140bf565b611422906020810190613a4d565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a36001016112c5565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146114ba576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610d5a565b6114ca6040820160208301613a4d565b67ffffffffffffffff81166000908152600360205260409020805481906114f09061403d565b9050600003611537576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610d5a565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611573908690600401614264565b600060405180830381600087803b15801561158d57600080fd5b505af192505050801561159e575060015b61163e573d8080156115cc576040519150601f19603f3d011682016040523d82523d6000602084013e6115d1565b606091505b506115de84356001610d6a565b508335600090815260046020526040902084906115fb8282614636565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90611630908490613a3a565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b600a547d010000000000000000000000000000000000000000000000000000000000900460ff1615806116c85750600a547d010000000000000000000000000000000000000000000000000000000000900460ff1681105b156116d05750565b600a54600190611704907d010000000000000000000000000000000000000000000000000000000000900460ff1683614730565b116118495760025473ffffffffffffffffffffffffffffffffffffffff16600a546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c0919061476b565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561180757600080fd5b505af115801561181b573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b611854612aa7565b600a80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560408051602081019290925201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152600a5467ffffffffffffffff166000908152600360205220906119039082614788565b5050565b61190f612aa7565b60005b8181101561166b5782828281811061192c5761192c614090565b905060200281019061193e91906148a2565b61194f9060408101906020016139af565b611a1b576003600084848481811061196957611969614090565b905060200281019061197b91906148a2565b611989906020810190613a4d565b67ffffffffffffffff168152602081019190915260400160009081206119ae9161385e565b8282828181106119c0576119c0614090565b90506020028101906119d291906148a2565b6119e0906020810190613a4d565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2611c90565b828282818110611a2d57611a2d614090565b9050602002810190611a3f91906148a2565b611a4d9060408101906140fd565b9050600003611a88576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000858585818110611aa057611aa0614090565b9050602002810190611ab291906148a2565b611ac0906020810190613a4d565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611af657611af6614090565b9050602002810190611b0891906148a2565b611b169060408101906140fd565b8291611b239190836143ba565b50838383818110611b3657611b36614090565b9050602002810190611b4891906148a2565b611b569060608101906140fd565b159050611ba157838383818110611b6f57611b6f614090565b9050602002810190611b8191906148a2565b611b8f9060608101906140fd565b6001830191611b9f9190836143ba565b505b838383818110611bb357611bb3614090565b9050602002810190611bc591906148a2565b611bd39060408101906140fd565b604051611be192919061402d565b6040518091039020848484818110611bfb57611bfb614090565b9050602002810190611c0d91906148a2565b611c1b906020810190613a4d565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212868686818110611c5857611c58614090565b9050602002810190611c6a91906148a2565b611c789060608101906140fd565b604051611c869291906148d6565b60405180910390a3505b600101611912565b611ca0612aa7565b600a805467ffffffffffffffff84167fffffffff0000000000000000000000000000000000000000000000000000000090911681176801000000000000000073ffffffffffffffffffffffffffffffffffffffff8516908102919091179092556000908152600360209081526040918290208251918201939093526001926002019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611d5b916148ea565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff841660009081526003602052209061166b9082614788565b611e10612aa7565b73ffffffffffffffffffffffffffffffffffffffff8116611e5d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611edc612aa7565b60085473ffffffffffffffffffffffffffffffffffffffff1615611f3d57611f3d611f1c60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612fda565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611fea57611fea611faa60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61315c565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e6760405160405180910390a35050565b333014612081576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120916040820160208301613a4d565b61209e60408301836140fd565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506120f59250905061403d565b1590508061214b5750600360008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018160405161213691906148ea565b9081526040519081900360200190205460ff16155b1561218457806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610d5a9190613a3a565b6121946040840160208501613a4d565b67ffffffffffffffff81166000908152600360205260409020805481906121ba9061403d565b9050600003612201576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610d5a565b600061221060608701876140fd565b81019061221d91906138ac565b600a549091507c0100000000000000000000000000000000000000000000000000000000900460ff1661225d5761225d6122588260016148fc565b612b28565b505050505050565b6001612272600583612d84565b146122ac576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610d5a565b6122b7816000610d6a565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916122ff9061403d565b80601f016020809104026020016040519081016040528092919081815260200182805461232b9061403d565b80156123785780601f1061234d57610100808354040283529160200191612378565b820191906000526020600020905b81548152906001019060200180831161235b57829003601f168201915b505050505081526020016003820180546123919061403d565b80601f01602080910402602001604051908101604052809291908181526020018280546123bd9061403d565b801561240a5780601f106123df5761010080835404028352916020019161240a565b820191906000526020600020905b8154815290600101906020018083116123ed57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561248d5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101612438565b505050508152505090506124a081613260565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff83166000908152600360205260408120805485919081906124f89061403d565b905060000361253f576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610d5a565b6040805160a08101825267ffffffffffffffff881660009081526003602052918220805482919061256f9061403d565b80601f016020809104026020016040519081016040528092919081815260200182805461259b9061403d565b80156125e85780601f106125bd576101008083540402835291602001916125e8565b820191906000526020600020905b8154815290600101906020018083116125cb57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b1660009081526003909252902060010180546080909201916126499061403d565b80601f01602080910402602001604051908101604052809291908181526020018280546126759061403d565b80156126c25780601f10612697576101008083540402835291602001916126c2565b820191906000526020600020905b8154815290600101906020018083116126a557829003601f168201915b5050505050815250905060005b865181101561281f5761273f33308984815181106126ef576126ef614090565b6020026020010151602001518a858151811061270d5761270d614090565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166132d2909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061276f5761276f614090565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146128175760025487516128179173ffffffffffffffffffffffffffffffffffffffff16908990849081106127c8576127c8614090565b6020026020010151602001518984815181106127e6576127e6614090565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612fda9092919063ffffffff16565b6001016126cf565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded90612879908b90869060040161490f565b602060405180830381865afa158015612896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ba91906149dc565b60085490915073ffffffffffffffffffffffffffffffffffffffff1615612900576008546129009073ffffffffffffffffffffffffffffffffffffffff163330846132d2565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612932576000612934565b825b8a856040518463ffffffff1660e01b815260040161295392919061490f565b60206040518083038185885af1158015612971573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061299691906149dc565b60008181526009602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055519196509086907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372908390a3505050509392505050565b612a0d612aa7565b600a80547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b612a9e612aa7565b61184981613330565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610d5a565b80600116600103612b6b576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612b9f565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b612ba881611670565b6040805160a08101909152600a5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001612c0c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015612c8657816020015b6040805180820190915260008082526020820152815260200190600190039081612c5f5790505b50815260085473ffffffffffffffffffffffffffffffffffffffff1660208083019190915260408051918201815260008252909101529050612cdd60025473ffffffffffffffffffffffffffffffffffffffff1690565b600a546040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216916396f4e9f991612d419167ffffffffffffffff90911690859060040161490f565b6020604051808303816000875af1158015612d60573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b91906149dc565b6000612d908383613425565b9392505050565b80471015612e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d5a565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e5b576040519150601f19603f3d011682016040523d82523d6000602084013e612e60565b606091505b505090508061166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d5a565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261166b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526134af565b6000612fd28484846135bb565b949350505050565b80158061307a57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307891906149dc565b155b613106576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610d5a565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261166b9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612f43565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156131d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f791906149dc565b61320191906148fc565b60405173ffffffffffffffffffffffffffffffffffffffff851660248201526044810182905290915061325a9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612f43565b50505050565b613268612aa7565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906132a4908490600401613b84565b600060405180830381600087803b1580156132be57600080fd5b505af1158015611460573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261325a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612f43565b3373ffffffffffffffffffffffffffffffffffffffff8216036133af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610d5a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580613449575061344984846135d8565b612d90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610d5a565b6000613511826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135e49092919063ffffffff16565b80519091501561166b578080602001905181019061352f91906149f5565b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d5a565b60008281526002840160205260408120829055612fd284846135f3565b6000612d9083836135ff565b6060612fd28484600085613617565b6000612d908383613730565b60008181526001830160205260408120541515612d90565b6060824710156136a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d5a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516136d291906148ea565b60006040518083038185875af1925050503d806000811461370f576040519150601f19603f3d011682016040523d82523d6000602084013e613714565b606091505b50915091506137258783838761377f565b979650505050505050565b600081815260018301602052604081205461377757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a05565b506000610a05565b6060831561381557825160000361380e5773ffffffffffffffffffffffffffffffffffffffff85163b61380e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d5a565b5081612fd2565b612fd2838381511561382a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a9190613a3a565b50805461386a9061403d565b6000825580601f1061387a575050565b601f01602090049060005260206000209081019061184991905b808211156138a85760008155600101613894565b5090565b6000602082840312156138be57600080fd5b5035919050565b6020810160038310613900577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff8116811461184957600080fd5b60008060006040848603121561393157600080fd5b833561393c81613906565b9250602084013567ffffffffffffffff8082111561395957600080fd5b818601915086601f83011261396d57600080fd5b81358181111561397c57600080fd5b87602082850101111561398e57600080fd5b6020830194508093505050509250925092565b801515811461184957600080fd5b6000602082840312156139c157600080fd5b8135612d90816139a1565b60005b838110156139e75781810151838201526020016139cf565b50506000910152565b60008151808452613a088160208601602086016139cc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d9060208301846139f0565b600060208284031215613a5f57600080fd5b8135612d9081613906565b604081526000613a7d60408301856139f0565b8281036020840152613a8f81856139f0565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461184957600080fd5b60008060408385031215613acd57600080fd5b8235613ad881613a98565b946020939093013593505050565b600080600060608486031215613afb57600080fd5b8335613b0681613a98565b92506020840135613b1681613a98565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613b79578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613b3c565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152613bbe60c08401826139f0565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613bfa83836139f0565b925060808601519150808584030160a086015250613a8f8282613b27565b60008060408385031215613c2b57600080fd5b823591506020830135613c3d81613a98565b809150509250929050565b60008083601f840112613c5a57600080fd5b50813567ffffffffffffffff811115613c7257600080fd5b6020830191508360208260051b8501011115613c8d57600080fd5b9250929050565b60008060008060408587031215613caa57600080fd5b843567ffffffffffffffff80821115613cc257600080fd5b613cce88838901613c48565b90965094506020870135915080821115613ce757600080fd5b50613cf487828801613c48565b95989497509550505050565b600060208284031215613d1257600080fd5b813567ffffffffffffffff811115613d2957600080fd5b820160a08185031215612d9057600080fd5b600060208284031215613d4d57600080fd5b8135612d9081613a98565b60008060208385031215613d6b57600080fd5b823567ffffffffffffffff811115613d8257600080fd5b613d8e85828601613c48565b90969095509350505050565b60008060408385031215613dad57600080fd5b8235613db881613906565b91506020830135613c3d81613a98565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613e1a57613e1a613dc8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e6757613e67613dc8565b604052919050565b600082601f830112613e8057600080fd5b813567ffffffffffffffff811115613e9a57613e9a613dc8565b613ecb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e20565b818152846020838601011115613ee057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613f1257600080fd5b8335613f1d81613906565b925060208481013567ffffffffffffffff80821115613f3b57600080fd5b818701915087601f830112613f4f57600080fd5b813581811115613f6157613f61613dc8565b613f6f848260051b01613e20565b81815260069190911b8301840190848101908a831115613f8e57600080fd5b938501935b82851015613fda576040858c031215613fac5760008081fd5b613fb4613df7565b8535613fbf81613a98565b81528587013587820152825260409094019390850190613f93565b965050506040870135925080831115613ff257600080fd5b505061400086828701613e6f565b9150509250925092565b60006020828403121561401c57600080fd5b813560ff81168114612d9057600080fd5b8183823760009101908152919050565b600181811c9082168061405157607f821691505b60208210810361408a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126140f357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261413257600080fd5b83018035915067ffffffffffffffff82111561414d57600080fd5b602001915036819003821315613c8d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261419757600080fd5b830160208101925035905067ffffffffffffffff8111156141b757600080fd5b803603821315613c8d57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015613b7957813561423281613a98565b73ffffffffffffffffffffffffffffffffffffffff16875281830135838801526040968701969091019060010161421f565b60208152813560208201526000602083013561427f81613906565b67ffffffffffffffff808216604085015261429d6040860186614162565b925060a060608601526142b460c0860184836141c6565b9250506142c46060860186614162565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526142fa8583856141c6565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261433357600080fd5b6020928801928301923591508382111561434c57600080fd5b8160061b360383131561435e57600080fd5b8685030160a087015261372584828461420f565b601f82111561166b576000816000526020600020601f850160051c8101602086101561439b5750805b601f850160051c820191505b8181101561225d578281556001016143a7565b67ffffffffffffffff8311156143d2576143d2613dc8565b6143e6836143e0835461403d565b83614372565b6000601f84116001811461443857600085156144025750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611460565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156144875786850135825560209485019460019092019101614467565b50868210156144c2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561450e81613a98565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561457457614574613dc8565b8054838255808410156146015760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146145b5576145b56144d4565b80861686146145c6576145c66144d4565b5060008360005260206000208360011b81018760011b820191505b808210156145fc5782825582848301556002820191506145e1565b505050505b5060008181526020812083915b8581101561225d576146208383614503565b604092909201916002919091019060010161460e565b8135815560018101602083013561464c81613906565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561468c60408601866140fd565b9350915061469e8383600287016143ba565b6146ab60608601866140fd565b935091506146bd8383600387016143ba565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030183126146f457600080fd5b91840191823591508082111561470957600080fd5b506020820191508060061b360382131561472257600080fd5b61325a81836004860161455b565b600082614766577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561477d57600080fd5b8151612d9081613a98565b815167ffffffffffffffff8111156147a2576147a2613dc8565b6147b6816147b0845461403d565b84614372565b602080601f83116001811461480957600084156147d35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561225d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561485657888601518255948401946001909101908401614837565b508582101561489257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126140f357600080fd5b602081526000612fd26020830184866141c6565b600082516140f38184602087016139cc565b80820180821115610a0557610a056144d4565b67ffffffffffffffff83168152604060208201526000825160a0604084015261493b60e08401826139f0565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08085840301606086015261497783836139f0565b925060408601519150808584030160808601526149948383613b27565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506149d282826139f0565b9695505050505050565b6000602082840312156149ee57600080fd5b5051919050565b600060208284031215614a0757600080fd5b8151612d90816139a156fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldFeeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620050f1380380620050f18339810160408190526200003491620005eb565b8282818181803380600081620000915760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c457620000c48162000163565b5050506001600160a01b038116620000ef576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b031991821681179092556008805493861693909116831790556200012d92506000196200020e565b5050505080600262000140919062000644565b600960156101000a81548160ff021916908360ff16021790555050505062000734565b336001600160a01b03821603620001bd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000088565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200028c5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a919062000676565b155b620003005760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000088565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003589185916200035d16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620003ac906001600160a01b0385169084906200042e565b805190915015620003585780806020019051810190620003cd919062000690565b620003585760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000088565b60606200043f848460008562000447565b949350505050565b606082471015620004aa5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000088565b600080866001600160a01b03168587604051620004c89190620006e1565b60006040518083038185875af1925050503d806000811462000507576040519150601f19603f3d011682016040523d82523d6000602084013e6200050c565b606091505b50909250905062000520878383876200052b565b979650505050505050565b606083156200059f57825160000362000597576001600160a01b0385163b620005975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000088565b50816200043f565b6200043f8383815115620005b65781518083602001fd5b8060405162461bcd60e51b8152600401620000889190620006ff565b6001600160a01b0381168114620005e857600080fd5b50565b6000806000606084860312156200060157600080fd5b83516200060e81620005d2565b60208501519093506200062181620005d2565b604085015190925060ff811681146200063957600080fd5b809150509250925092565b60ff81811683821602908116908181146200066f57634e487b7160e01b600052601160045260246000fd5b5092915050565b6000602082840312156200068957600080fd5b5051919050565b600060208284031215620006a357600080fd5b81518015158114620006b457600080fd5b9392505050565b60005b83811015620006d8578181015183820152602001620006be565b50506000910152565b60008251620006f5818460208701620006bb565b9190910192915050565b602081526000825180602084015262000720816040850160208701620006bb565b601f01601f19169190910160400192915050565b6149ad80620007446000396000f3fe6080604052600436106101e75760003560e01c80638f491cba11610102578063c89245d511610095578063e89b448511610064578063e89b44851461066e578063ef686d8e14610681578063f2fde38b146106a1578063ff2deec3146106c157600080fd5b8063c89245d5146105d0578063cf6730f8146105f0578063e4ca875414610610578063e6c725f51461063057600080fd5b8063b187bd26116100d1578063b187bd2614610515578063b5a1101114610545578063bee518a414610565578063c851cc32146105b057600080fd5b80638f491cba1461048a5780639d2aede5146104aa5780639fe74e26146104ca578063b0f479a1146104ea57600080fd5b8063536c6bfa1161017a57806379ba50971161014957806379ba50971461040a5780638462a2b91461041f57806385572ffb1461043f5780638da5cb5b1461045f57600080fd5b8063536c6bfa1461037d5780635e35359e1461039d5780636939cd97146103bd5780636d62d633146103ea57600080fd5b80632874d8bf116101b65780632874d8bf146102c05780632b6e5d63146102d557806335f170ef146103215780635075a9d41461034f57600080fd5b80630e958d6b146101f357806316c38b3c14610228578063181f5a771461024a5780631892b906146102a057600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021361020e366004613891565b6106ee565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b50610248610243366004613924565b610739565b005b34801561025657600080fd5b506102936040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b60405161021f91906139af565b3480156102ac57600080fd5b506102486102bb3660046139c2565b61078b565b3480156102cc57600080fd5b506102486107e6565b3480156102e157600080fd5b5060095473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b34801561032d57600080fd5b5061034161033c3660046139c2565b610822565b60405161021f9291906139df565b34801561035b57600080fd5b5061036f61036a366004613a0d565b61094e565b60405190815260200161021f565b34801561038957600080fd5b50610248610398366004613a48565b610961565b3480156103a957600080fd5b506102486103b8366004613a74565b6109c5565b3480156103c957600080fd5b506103dd6103d8366004613a0d565b610a5a565b60405161021f9190613b12565b3480156103f657600080fd5b50610248610405366004613ba6565b610c65565b34801561041657600080fd5b50610248610f7f565b34801561042b57600080fd5b5061024861043a366004613c22565b61107c565b34801561044b57600080fd5b5061024861045a366004613c8e565b6113bd565b34801561046b57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102fc565b34801561049657600080fd5b506102486104a5366004613a0d565b6115c6565b3480156104b657600080fd5b506102486104c5366004613cc9565b6117a1565b3480156104d657600080fd5b506102486104e5366004613ce6565b611866565b3480156104f657600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102fc565b34801561052157600080fd5b5060095474010000000000000000000000000000000000000000900460ff16610213565b34801561055157600080fd5b50610248610560366004613d28565b611bf7565b34801561057157600080fd5b5060085474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161021f565b3480156105bc57600080fd5b506102486105cb366004613cc9565b611d9d565b3480156105dc57600080fd5b506102486105eb366004613cc9565b611e69565b3480156105fc57600080fd5b5061024861060b366004613c8e565b611fd3565b34801561061c57600080fd5b5061024861062b366004613a0d565b6121e8565b34801561063c57600080fd5b506009547501000000000000000000000000000000000000000000900460ff1660405160ff909116815260200161021f565b61036f61067c366004613e8b565b612452565b34801561068d57600080fd5b5061024861069c366004613f98565b6129fc565b3480156106ad57600080fd5b506102486106bc366004613cc9565b612a85565b3480156106cd57600080fd5b506008546102fc9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff8316600090815260036020526040808220905160029091019061071d9085908590613fbb565b9081526040519081900360200190205460ff1690509392505050565b610741612a96565b6009805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610793612a96565b6008805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107ee612a96565b600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556108206001612b17565b565b60036020526000908152604090208054819061083d90613fcb565b80601f016020809104026020016040519081016040528092919081815260200182805461086990613fcb565b80156108b65780601f1061088b576101008083540402835291602001916108b6565b820191906000526020600020905b81548152906001019060200180831161089957829003601f168201915b5050505050908060010180546108cb90613fcb565b80601f01602080910402602001604051908101604052809291908181526020018280546108f790613fcb565b80156109445780601f1061091957610100808354040283529160200191610944565b820191906000526020600020905b81548152906001019060200180831161092757829003601f168201915b5050505050905082565b600061095b600583612d53565b92915050565b610969612a96565b6109738282612d66565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b6109cd612a96565b6109ee73ffffffffffffffffffffffffffffffffffffffff84168383612ec0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e83604051610a4d91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610ac990613fcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610af590613fcb565b8015610b425780601f10610b1757610100808354040283529160200191610b42565b820191906000526020600020905b815481529060010190602001808311610b2557829003601f168201915b50505050508152602001600382018054610b5b90613fcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8790613fcb565b8015610bd45780601f10610ba957610100808354040283529160200191610bd4565b820191906000526020600020905b815481529060010190602001808311610bb757829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610c575760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610c02565b505050915250909392505050565b610c6d612a96565b6001610c7a600584612d53565b14610cb9576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610cc98260025b60059190612f94565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610d1190613fcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3d90613fcb565b8015610d8a5780601f10610d5f57610100808354040283529160200191610d8a565b820191906000526020600020905b815481529060010190602001808311610d6d57829003601f168201915b50505050508152602001600382018054610da390613fcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcf90613fcb565b8015610e1c5780601f10610df157610100808354040283529160200191610e1c565b820191906000526020600020905b815481529060010190602001808311610dff57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e9f5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e4a565b5050505081525050905060005b816080015151811015610f2e57610f268383608001518381518110610ed357610ed361401e565b60200260200101516020015184608001518481518110610ef557610ef561401e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612ec09092919063ffffffff16565b600101610eac565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611000576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610cb0565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611084612a96565b60005b8181101561121757600360008484848181106110a5576110a561401e565b90506020028101906110b7919061404d565b6110c59060208101906139c2565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018383838181106110fc576110fc61401e565b905060200281019061110e919061404d565b61111c90602081019061408b565b60405161112a929190613fbb565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106111715761117161401e565b9050602002810190611183919061404d565b61119190602081019061408b565b60405161119f929190613fbb565b60405180910390208383838181106111b9576111b961401e565b90506020028101906111cb919061404d565b6111d99060208101906139c2565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101611087565b5060005b838110156113b65760016003600087878581811061123b5761123b61401e565b905060200281019061124d919061404d565b61125b9060208101906139c2565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106112925761129261401e565b90506020028101906112a4919061404d565b6112b290602081019061408b565b6040516112c0929190613fbb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790558484828181106113105761131061401e565b9050602002810190611322919061404d565b61133090602081019061408b565b60405161133e929190613fbb565b60405180910390208585838181106113585761135861401e565b905060200281019061136a919061404d565b6113789060208101906139c2565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a360010161121b565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611410576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610cb0565b61142060408201602083016139c2565b67ffffffffffffffff811660009081526003602052604090208054819061144690613fcb565b905060000361148d576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610cb0565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906114c99086906004016141f2565b600060405180830381600087803b1580156114e357600080fd5b505af19250505080156114f4575060015b611594573d808015611522576040519150601f19603f3d011682016040523d82523d6000602084013e611527565b606091505b5061153484356001610cc0565b5083356000908152600460205260409020849061155182826145c4565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906115869084906139af565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b6009547501000000000000000000000000000000000000000000900460ff16158061160e57506009547501000000000000000000000000000000000000000000900460ff1681105b156116165750565b600954600190611642907501000000000000000000000000000000000000000000900460ff16836146be565b1161179e5760025473ffffffffffffffffffffffffffffffffffffffff166008546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa1580156116f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171591906146f9565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b6117a9612a96565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560408051602081019290925201604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815260085474010000000000000000000000000000000000000000900467ffffffffffffffff166000908152600360205220906118629082614716565b5050565b61186e612a96565b60005b818110156115c15782828281811061188b5761188b61401e565b905060200281019061189d9190614830565b6118ae906040810190602001613924565b61197a57600360008484848181106118c8576118c861401e565b90506020028101906118da9190614830565b6118e89060208101906139c2565b67ffffffffffffffff1681526020810191909152604001600090812061190d9161382d565b82828281811061191f5761191f61401e565b90506020028101906119319190614830565b61193f9060208101906139c2565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2611bef565b82828281811061198c5761198c61401e565b905060200281019061199e9190614830565b6119ac90604081019061408b565b90506000036119e7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008585858181106119ff576119ff61401e565b9050602002810190611a119190614830565b611a1f9060208101906139c2565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000209050838383818110611a5557611a5561401e565b9050602002810190611a679190614830565b611a7590604081019061408b565b8291611a82919083614348565b50838383818110611a9557611a9561401e565b9050602002810190611aa79190614830565b611ab590606081019061408b565b159050611b0057838383818110611ace57611ace61401e565b9050602002810190611ae09190614830565b611aee90606081019061408b565b6001830191611afe919083614348565b505b838383818110611b1257611b1261401e565b9050602002810190611b249190614830565b611b3290604081019061408b565b604051611b40929190613fbb565b6040518091039020848484818110611b5a57611b5a61401e565b9050602002810190611b6c9190614830565b611b7a9060208101906139c2565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212868686818110611bb757611bb761401e565b9050602002810190611bc99190614830565b611bd790606081019061408b565b604051611be5929190614864565b60405180910390a3505b600101611871565b611bff612a96565b600880547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff851690810291909117909155600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560009182526003602090815260409283902083519182019290925260019260029092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611cf091614878565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff84166000908152600360205220906115c19082614716565b611da5612a96565b73ffffffffffffffffffffffffffffffffffffffff8116611df2576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611e71612a96565b60085473ffffffffffffffffffffffffffffffffffffffff1615611ed257611ed2611eb160025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16906000612fa9565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611f7f57611f7f611f3f60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61312b565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b33301461200c576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61201c60408201602083016139c2565b612029604083018361408b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061208092509050613fcb565b159050806120d65750600360008367ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201816040516120c19190614878565b9081526040519081900360200190205460ff16155b1561210f57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610cb091906139af565b61211f60408401602085016139c2565b67ffffffffffffffff811660009081526003602052604090208054819061214590613fcb565b905060000361218c576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610cb0565b600061219b606087018761408b565b8101906121a89190613a0d565b60095490915074010000000000000000000000000000000000000000900460ff166121e0576121e06121db82600161488a565b612b17565b505050505050565b60016121f5600583612d53565b1461222f576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610cb0565b61223a816000610cc0565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff1693810193909352600281018054919284019161228290613fcb565b80601f01602080910402602001604051908101604052809291908181526020018280546122ae90613fcb565b80156122fb5780601f106122d0576101008083540402835291602001916122fb565b820191906000526020600020905b8154815290600101906020018083116122de57829003601f168201915b5050505050815260200160038201805461231490613fcb565b80601f016020809104026020016040519081016040528092919081815260200182805461234090613fcb565b801561238d5780601f106123625761010080835404028352916020019161238d565b820191906000526020600020905b81548152906001019060200180831161237057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156124105760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016123bb565b505050508152505090506124238161322f565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff831660009081526003602052604081208054859190819061247b90613fcb565b90506000036124c2576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610cb0565b6040805160a08101825267ffffffffffffffff88166000908152600360205291822080548291906124f290613fcb565b80601f016020809104026020016040519081016040528092919081815260200182805461251e90613fcb565b801561256b5780601f106125405761010080835404028352916020019161256b565b820191906000526020600020905b81548152906001019060200180831161254e57829003601f168201915b5050509183525050602080820188905260408083018a905260085473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8b1660009081526003909252902060010180546080909201916125cc90613fcb565b80601f01602080910402602001604051908101604052809291908181526020018280546125f890613fcb565b80156126455780601f1061261a57610100808354040283529160200191612645565b820191906000526020600020905b81548152906001019060200180831161262857829003601f168201915b5050505050815250905060005b86518110156127a2576126c233308984815181106126725761267261401e565b6020026020010151602001518a85815181106126905761269061401e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166132a1909392919063ffffffff16565b600854875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106126f2576126f261401e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161461279a57600254875161279a9173ffffffffffffffffffffffffffffffffffffffff169089908490811061274b5761274b61401e565b6020026020010151602001518984815181106127695761276961401e565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612fa99092919063ffffffff16565b600101612652565b506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906320487ded906127fc908b90869060040161489d565b602060405180830381865afa158015612819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283d919061496a565b60085490915073ffffffffffffffffffffffffffffffffffffffff16158015906128f657506008546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156128d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f4919061496a565b105b15612920576008546129209073ffffffffffffffffffffffffffffffffffffffff163330846132a1565b60025460085473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612952576000612954565b825b8a856040518463ffffffff1660e01b815260040161297392919061489d565b60206040518083038185885af1158015612991573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129b6919061496a565b94507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a856040516129e991815260200190565b60405180910390a1505050509392505050565b612a04612a96565b600980547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b612a8d612a96565b61179e816132ff565b60005473ffffffffffffffffffffffffffffffffffffffff163314610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610cb0565b80600116600103612b5a576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612b8e565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b612b97816115c6565b6040805160a0810190915260095473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001612bef91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015612c6957816020015b6040805180820190915260008082526020820152815260200190600190039081612c425790505b50815260085473ffffffffffffffffffffffffffffffffffffffff1660208083019190915260408051918201815260008252909101529050612cc060025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600860149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401612d1092919061489d565b6020604051808303816000875af1158015612d2f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c1919061496a565b6000612d5f83836133f4565b9392505050565b80471015612dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610cb0565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612e2a576040519150601f19603f3d011682016040523d82523d6000602084013e612e2f565b606091505b50509050806115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610cb0565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115c19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261347e565b6000612fa184848461358a565b949350505050565b80158061304957506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613023573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613047919061496a565b155b6130d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610cb0565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526115c19084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612f12565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156131a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c6919061496a565b6131d0919061488a565b60405173ffffffffffffffffffffffffffffffffffffffff85166024820152604481018290529091506132299085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612f12565b50505050565b613237612a96565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890613273908490600401613b12565b600060405180830381600087803b15801561328d57600080fd5b505af11580156113b6573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526132299085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612f12565b3373ffffffffffffffffffffffffffffffffffffffff82160361337e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610cb0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260028301602052604081205480151580613418575061341884846135a7565b612d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610cb0565b60006134e0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135b39092919063ffffffff16565b8051909150156115c157808060200190518101906134fe9190614983565b6115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610cb0565b60008281526002840160205260408120829055612fa184846135c2565b6000612d5f83836135ce565b6060612fa184846000856135e6565b6000612d5f83836136ff565b60008181526001830160205260408120541515612d5f565b606082471015613678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610cb0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516136a19190614878565b60006040518083038185875af1925050503d80600081146136de576040519150601f19603f3d011682016040523d82523d6000602084013e6136e3565b606091505b50915091506136f48783838761374e565b979650505050505050565b60008181526001830160205260408120546137465750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561095b565b50600061095b565b606083156137e45782516000036137dd5773ffffffffffffffffffffffffffffffffffffffff85163b6137dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cb0565b5081612fa1565b612fa183838151156137f95781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb091906139af565b50805461383990613fcb565b6000825580601f10613849575050565b601f01602090049060005260206000209081019061179e91905b808211156138775760008155600101613863565b5090565b67ffffffffffffffff8116811461179e57600080fd5b6000806000604084860312156138a657600080fd5b83356138b18161387b565b9250602084013567ffffffffffffffff808211156138ce57600080fd5b818601915086601f8301126138e257600080fd5b8135818111156138f157600080fd5b87602082850101111561390357600080fd5b6020830194508093505050509250925092565b801515811461179e57600080fd5b60006020828403121561393657600080fd5b8135612d5f81613916565b60005b8381101561395c578181015183820152602001613944565b50506000910152565b6000815180845261397d816020860160208601613941565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d5f6020830184613965565b6000602082840312156139d457600080fd5b8135612d5f8161387b565b6040815260006139f26040830185613965565b8281036020840152613a048185613965565b95945050505050565b600060208284031215613a1f57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461179e57600080fd5b60008060408385031215613a5b57600080fd5b8235613a6681613a26565b946020939093013593505050565b600080600060608486031215613a8957600080fd5b8335613a9481613a26565b92506020840135613aa481613a26565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015613b07578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613aca565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152613b4c60c0840182613965565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613b888383613965565b925060808601519150808584030160a086015250613a048282613ab5565b60008060408385031215613bb957600080fd5b823591506020830135613bcb81613a26565b809150509250929050565b60008083601f840112613be857600080fd5b50813567ffffffffffffffff811115613c0057600080fd5b6020830191508360208260051b8501011115613c1b57600080fd5b9250929050565b60008060008060408587031215613c3857600080fd5b843567ffffffffffffffff80821115613c5057600080fd5b613c5c88838901613bd6565b90965094506020870135915080821115613c7557600080fd5b50613c8287828801613bd6565b95989497509550505050565b600060208284031215613ca057600080fd5b813567ffffffffffffffff811115613cb757600080fd5b820160a08185031215612d5f57600080fd5b600060208284031215613cdb57600080fd5b8135612d5f81613a26565b60008060208385031215613cf957600080fd5b823567ffffffffffffffff811115613d1057600080fd5b613d1c85828601613bd6565b90969095509350505050565b60008060408385031215613d3b57600080fd5b8235613d468161387b565b91506020830135613bcb81613a26565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613da857613da8613d56565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613df557613df5613d56565b604052919050565b600082601f830112613e0e57600080fd5b813567ffffffffffffffff811115613e2857613e28613d56565b613e5960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613dae565b818152846020838601011115613e6e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ea057600080fd5b8335613eab8161387b565b925060208481013567ffffffffffffffff80821115613ec957600080fd5b818701915087601f830112613edd57600080fd5b813581811115613eef57613eef613d56565b613efd848260051b01613dae565b81815260069190911b8301840190848101908a831115613f1c57600080fd5b938501935b82851015613f68576040858c031215613f3a5760008081fd5b613f42613d85565b8535613f4d81613a26565b81528587013587820152825260409094019390850190613f21565b965050506040870135925080831115613f8057600080fd5b5050613f8e86828701613dfd565b9150509250925092565b600060208284031215613faa57600080fd5b813560ff81168114612d5f57600080fd5b8183823760009101908152919050565b600181811c90821680613fdf57607f821691505b602082108103614018577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261408157600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140c057600080fd5b83018035915067ffffffffffffffff8211156140db57600080fd5b602001915036819003821315613c1b57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261412557600080fd5b830160208101925035905067ffffffffffffffff81111561414557600080fd5b803603821315613c1b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015613b075781356141c081613a26565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016141ad565b60208152813560208201526000602083013561420d8161387b565b67ffffffffffffffff808216604085015261422b60408601866140f0565b925060a0606086015261424260c086018483614154565b92505061425260608601866140f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152614288858385614154565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126142c157600080fd5b602092880192830192359150838211156142da57600080fd5b8160061b36038313156142ec57600080fd5b8685030160a08701526136f484828461419d565b601f8211156115c1576000816000526020600020601f850160051c810160208610156143295750805b601f850160051c820191505b818110156121e057828155600101614335565b67ffffffffffffffff83111561436057614360613d56565b6143748361436e8354613fcb565b83614300565b6000601f8411600181146143c657600085156143905750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556113b6565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561441557868501358255602094850194600190920191016143f5565b5086821015614450577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561449c81613a26565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561450257614502613d56565b80548382558084101561458f5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461454357614543614462565b808616861461455457614554614462565b5060008360005260206000208360011b81018760011b820191505b8082101561458a57828255828483015560028201915061456f565b505050505b5060008181526020812083915b858110156121e0576145ae8383614491565b604092909201916002919091019060010161459c565b813581556001810160208301356145da8161387b565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561461a604086018661408b565b9350915061462c838360028701614348565b614639606086018661408b565b9350915061464b838360038701614348565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261468257600080fd5b91840191823591508082111561469757600080fd5b506020820191508060061b36038213156146b057600080fd5b6132298183600486016144e9565b6000826146f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561470b57600080fd5b8151612d5f81613a26565b815167ffffffffffffffff81111561473057614730613d56565b6147448161473e8454613fcb565b84614300565b602080601f83116001811461479757600084156147615750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556121e0565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156147e4578886015182559484019460019091019084016147c5565b508582101561482057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183360301811261408157600080fd5b602081526000612fa1602083018486614154565b60008251614081818460208701613941565b8082018082111561095b5761095b614462565b67ffffffffffffffff83168152604060208201526000825160a060408401526148c960e0840182613965565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526149058383613965565b925060408601519150808584030160808601526149228383613ab5565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506149608282613965565b9695505050505050565b60006020828403121561497c57600080fd5b5051919050565b60006020828403121561499557600080fd5b8151612d5f8161391656fea164736f6c6343000818000a", } var SelfFundedPingPongABI = SelfFundedPingPongMetaData.ABI @@ -196,28 +196,6 @@ func (_SelfFundedPingPong *SelfFundedPingPongTransactorRaw) Transact(opts *bind. return _SelfFundedPingPong.Contract.contract.Transact(opts, method, params...) } -func (_SelfFundedPingPong *SelfFundedPingPongCaller) ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _SelfFundedPingPong.contract.Call(opts, &out, "ACK_MESSAGE_HEADER") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -func (_SelfFundedPingPong *SelfFundedPingPongSession) ACKMESSAGEHEADER() (string, error) { - return _SelfFundedPingPong.Contract.ACKMESSAGEHEADER(&_SelfFundedPingPong.CallOpts) -} - -func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) ACKMESSAGEHEADER() (string, error) { - return _SelfFundedPingPong.Contract.ACKMESSAGEHEADER(&_SelfFundedPingPong.CallOpts) -} - func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetCountIncrBeforeFunding(opts *bind.CallOpts) (uint8, error) { var out []interface{} err := _SelfFundedPingPong.contract.Call(opts, &out, "getCountIncrBeforeFunding") @@ -468,28 +446,6 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SFeeToken() (common. return _SelfFundedPingPong.Contract.SFeeToken(&_SelfFundedPingPong.CallOpts) } -func (_SelfFundedPingPong *SelfFundedPingPongCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { - var out []interface{} - err := _SelfFundedPingPong.contract.Call(opts, &out, "s_messageStatus", messageId) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -func (_SelfFundedPingPong *SelfFundedPingPongSession) SMessageStatus(messageId [32]byte) (uint8, error) { - return _SelfFundedPingPong.Contract.SMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) -} - -func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) SMessageStatus(messageId [32]byte) (uint8, error) { - return _SelfFundedPingPong.Contract.SMessageStatus(&_SelfFundedPingPong.CallOpts, messageId) -} - func (_SelfFundedPingPong *SelfFundedPingPongCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { var out []interface{} err := _SelfFundedPingPong.contract.Call(opts, &out, "typeAndVersion") @@ -1614,41 +1570,23 @@ func (it *SelfFundedPingPongFeeTokenUpdatedIterator) Close() error { } type SelfFundedPingPongFeeTokenUpdated struct { - OldToken common.Address - NewToken common.Address - Raw types.Log + OldFeeToken common.Address + NewFeeToken common.Address + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterFeeTokenUpdated(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*SelfFundedPingPongFeeTokenUpdatedIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterFeeTokenUpdated(opts *bind.FilterOpts) (*SelfFundedPingPongFeeTokenUpdatedIterator, error) { - var oldTokenRule []interface{} - for _, oldTokenItem := range oldToken { - oldTokenRule = append(oldTokenRule, oldTokenItem) - } - var newTokenRule []interface{} - for _, newTokenItem := range newToken { - newTokenRule = append(newTokenRule, newTokenItem) - } - - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "FeeTokenUpdated", oldTokenRule, newTokenRule) + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } return &SelfFundedPingPongFeeTokenUpdatedIterator{contract: _SelfFundedPingPong.contract, event: "FeeTokenUpdated", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenUpdated, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) { - - var oldTokenRule []interface{} - for _, oldTokenItem := range oldToken { - oldTokenRule = append(oldTokenRule, oldTokenItem) - } - var newTokenRule []interface{} - for _, newTokenItem := range newToken { - newTokenRule = append(newTokenRule, newTokenItem) - } +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenUpdated) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "FeeTokenUpdated", oldTokenRule, newTokenRule) + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } @@ -1933,240 +1871,6 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAbandoned(log return event, nil } -type SelfFundedPingPongMessageAckReceivedIterator struct { - Event *SelfFundedPingPongMessageAckReceived - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *SelfFundedPingPongMessageAckReceivedIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(SelfFundedPingPongMessageAckReceived) - 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 - } - } - - select { - case log := <-it.logs: - it.Event = new(SelfFundedPingPongMessageAckReceived) - 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() - } -} - -func (it *SelfFundedPingPongMessageAckReceivedIterator) Error() error { - return it.fail -} - -func (it *SelfFundedPingPongMessageAckReceivedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type SelfFundedPingPongMessageAckReceived struct { - MessageId [32]byte - Raw types.Log -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageAckReceived(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckReceivedIterator, error) { - - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageAckReceived") - if err != nil { - return nil, err - } - return &SelfFundedPingPongMessageAckReceivedIterator{contract: _SelfFundedPingPong.contract, event: "MessageAckReceived", logs: logs, sub: sub}, nil -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckReceived) (event.Subscription, error) { - - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageAckReceived") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(SelfFundedPingPongMessageAckReceived) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckReceived", 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 -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAckReceived(log types.Log) (*SelfFundedPingPongMessageAckReceived, error) { - event := new(SelfFundedPingPongMessageAckReceived) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckReceived", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -type SelfFundedPingPongMessageAckSentIterator struct { - Event *SelfFundedPingPongMessageAckSent - - contract *bind.BoundContract - event string - - logs chan types.Log - sub ethereum.Subscription - done bool - fail error -} - -func (it *SelfFundedPingPongMessageAckSentIterator) Next() bool { - - if it.fail != nil { - return false - } - - if it.done { - select { - case log := <-it.logs: - it.Event = new(SelfFundedPingPongMessageAckSent) - 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 - } - } - - select { - case log := <-it.logs: - it.Event = new(SelfFundedPingPongMessageAckSent) - 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() - } -} - -func (it *SelfFundedPingPongMessageAckSentIterator) Error() error { - return it.fail -} - -func (it *SelfFundedPingPongMessageAckSentIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -type SelfFundedPingPongMessageAckSent struct { - IncomingMessageId [32]byte - Raw types.Log -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageAckSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckSentIterator, error) { - - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageAckSent") - if err != nil { - return nil, err - } - return &SelfFundedPingPongMessageAckSentIterator{contract: _SelfFundedPingPong.contract, event: "MessageAckSent", logs: logs, sub: sub}, nil -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckSent) (event.Subscription, error) { - - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageAckSent") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - - event := new(SelfFundedPingPongMessageAckSent) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckSent", 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 -} - -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAckSent(log types.Log) (*SelfFundedPingPongMessageAckSent, error) { - event := new(SelfFundedPingPongMessageAckSent) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAckSent", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - type SelfFundedPingPongMessageFailedIterator struct { Event *SelfFundedPingPongMessageFailed @@ -2483,41 +2187,22 @@ func (it *SelfFundedPingPongMessageSentIterator) Close() error { } type SelfFundedPingPongMessageSent struct { - IncomingMessageId [32]byte - ACKMessageId [32]byte - Raw types.Log + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*SelfFundedPingPongMessageSentIterator, error) { - - var incomingMessageIdRule []interface{} - for _, incomingMessageIdItem := range incomingMessageId { - incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) - } - var ACKMessageIdRule []interface{} - for _, ACKMessageIdItem := range ACKMessageId { - ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) - } +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageSentIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSent") if err != nil { return nil, err } return &SelfFundedPingPongMessageSentIterator{contract: _SelfFundedPingPong.contract, event: "MessageSent", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) { - - var incomingMessageIdRule []interface{} - for _, incomingMessageIdItem := range incomingMessageId { - incomingMessageIdRule = append(incomingMessageIdRule, incomingMessageIdItem) - } - var ACKMessageIdRule []interface{} - for _, ACKMessageIdItem := range ACKMessageId { - ACKMessageIdRule = append(ACKMessageIdRule, ACKMessageIdItem) - } +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSent", incomingMessageIdRule, ACKMessageIdRule) + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSent") if err != nil { return nil, err } @@ -3353,10 +3038,6 @@ func (_SelfFundedPingPong *SelfFundedPingPong) ParseLog(log types.Log) (generate return _SelfFundedPingPong.ParseFunded(log) case _SelfFundedPingPong.abi.Events["MessageAbandoned"].ID: return _SelfFundedPingPong.ParseMessageAbandoned(log) - case _SelfFundedPingPong.abi.Events["MessageAckReceived"].ID: - return _SelfFundedPingPong.ParseMessageAckReceived(log) - case _SelfFundedPingPong.abi.Events["MessageAckSent"].ID: - return _SelfFundedPingPong.ParseMessageAckSent(log) case _SelfFundedPingPong.abi.Events["MessageFailed"].ID: return _SelfFundedPingPong.ParseMessageFailed(log) case _SelfFundedPingPong.abi.Events["MessageRecovered"].ID: @@ -3417,14 +3098,6 @@ func (SelfFundedPingPongMessageAbandoned) Topic() common.Hash { return common.HexToHash("0xd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957") } -func (SelfFundedPingPongMessageAckReceived) Topic() common.Hash { - return common.HexToHash("0xef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79") -} - -func (SelfFundedPingPongMessageAckSent) Topic() common.Hash { - return common.HexToHash("0x75944f95ba0be568cb30faeb0ef135cb73d07006939da29722d670a97f5c5b26") -} - func (SelfFundedPingPongMessageFailed) Topic() common.Hash { return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") } @@ -3434,7 +3107,7 @@ func (SelfFundedPingPongMessageRecovered) Topic() common.Hash { } func (SelfFundedPingPongMessageSent) Topic() common.Hash { - return common.HexToHash("0x9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b2372") + return common.HexToHash("0x54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a") } func (SelfFundedPingPongMessageSucceeded) Topic() common.Hash { @@ -3466,8 +3139,6 @@ func (_SelfFundedPingPong *SelfFundedPingPong) Address() common.Address { } type SelfFundedPingPongInterface interface { - ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) - GetCountIncrBeforeFunding(opts *bind.CallOpts) (uint8, error) GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) @@ -3492,8 +3163,6 @@ type SelfFundedPingPongInterface interface { SFeeToken(opts *bind.CallOpts) (common.Address, error) - SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) - TypeAndVersion(opts *bind.CallOpts) (string, error) AbandonFailedMessage(opts *bind.TransactOpts, messageId [32]byte, receiver common.Address) (*types.Transaction, error) @@ -3574,9 +3243,9 @@ type SelfFundedPingPongInterface interface { ParseCountIncrBeforeFundingSet(log types.Log) (*SelfFundedPingPongCountIncrBeforeFundingSet, error) - FilterFeeTokenUpdated(opts *bind.FilterOpts, oldToken []common.Address, newToken []common.Address) (*SelfFundedPingPongFeeTokenUpdatedIterator, error) + FilterFeeTokenUpdated(opts *bind.FilterOpts) (*SelfFundedPingPongFeeTokenUpdatedIterator, error) - WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenUpdated, oldToken []common.Address, newToken []common.Address) (event.Subscription, error) + WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongFeeTokenUpdated) (event.Subscription, error) ParseFeeTokenUpdated(log types.Log) (*SelfFundedPingPongFeeTokenUpdated, error) @@ -3592,18 +3261,6 @@ type SelfFundedPingPongInterface interface { ParseMessageAbandoned(log types.Log) (*SelfFundedPingPongMessageAbandoned, error) - FilterMessageAckReceived(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckReceivedIterator, error) - - WatchMessageAckReceived(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckReceived) (event.Subscription, error) - - ParseMessageAckReceived(log types.Log) (*SelfFundedPingPongMessageAckReceived, error) - - FilterMessageAckSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageAckSentIterator, error) - - WatchMessageAckSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAckSent) (event.Subscription, error) - - ParseMessageAckSent(log types.Log) (*SelfFundedPingPongMessageAckSent, error) - FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageFailedIterator, error) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageFailed, messageId [][32]byte) (event.Subscription, error) @@ -3616,9 +3273,9 @@ type SelfFundedPingPongInterface interface { ParseMessageRecovered(log types.Log) (*SelfFundedPingPongMessageRecovered, error) - FilterMessageSent(opts *bind.FilterOpts, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (*SelfFundedPingPongMessageSentIterator, error) + FilterMessageSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageSentIterator, error) - WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent, incomingMessageId [][32]byte, ACKMessageId [][32]byte) (event.Subscription, error) + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent) (event.Subscription, error) ParseMessageSent(log types.Log) (*SelfFundedPingPongMessageSent, error) diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 7075e67b65..7815717d7f 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -5,7 +5,7 @@ burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin fee3f82935ce7a26c65e12f19a472a4fccdae62755abdb42d8b0a01f0f06981a burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin c7efa00d2be62a97a814730c8e13aa70794ebfdd38a9f3b3c11554a5dfd70478 burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin a0728e186af74968101135a58a483320ced9ab79b22b1b24ac6994254ee79097 -ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin 3f0dfdc726b764afa0dca19c1974a2d50e785423ff2035023f4ca7cf7933e4a6 +ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin 78bd19051a85a8417f317e257d5280e1421ae4aeee8361740948385eb41e1584 ccipClientWithACK: ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.abi ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.bin 446a05c235e14f263764f126ce06602c7035aab4bb984b204d40c89646cd7b09 ccipReceiver: ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin 0d7d496ff6aaf37fcf8db25c708b6977c841650027a2028c864f7a0e17fa7b08 ccipReceiverWithACK: ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.bin e6bfb15f1f320cceb76435f49b43c90bfcfc69b4561c811c4b938a6356a23566 @@ -29,12 +29,12 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin abb0ecb1ed8621f26e43b39f5fa25f3d0b6d6c184fa37c404c4389605ecb74e7 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 78b58f4f192db7496e2b6de805d6a2c918b98d4fa62f3c7ed145ef3b5657a40d ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 -ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin e6f9d5162853fdd411df702394d5af7cfaee1d2c90ffd1e50259c0ce6b97f9b8 +ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin e468bfda33b1726ce175b748383045773022ecbb0dfc7b53f452adba3d7a1307 price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 0b3e253684d7085aa11f9179b71453b9db9d11cabea41605d5b4ac4128f85bfb registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin cbe7698bfd811b485ac3856daf073a7bdebeefdf2583403ca4a19d5b7e2d4ae8 report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin c07af8433bf8dbc7981725b18922a9c4e2dea068dd204bc62adc0e926cb499c3 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 42576577e81beea9a069bd9229caaa9a71227fbaef3871a1a2e69fd218216290 -self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin b088de65dc7d7d4e6f7ba534e7c6940e7fe8ba5fa47a120fc7745766a38ec58b +self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 4a23adcd2bd9869f48824c0da4896f3d6a8be9f95acf691e312de60a397d0a33 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin fb06d2cf5f7476e512c6fb7aab8eab43545efd7f0f6ca133c64ff4e3963902c4 token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 47a83e91b28ad1381a2a5882e2adfe168809a63a8f533ab1631f174550c64bed usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin 48caf06855a2f60455364d384e5fb2e6ecdf0a9ce4c1fc706b54b9885df76695