UNPKG

@avalanche-sdk/interchain

Version:
1,069 lines 76.4 kB
export const tokenHomeABI = { abi: [ { "type": "constructor", "inputs": [ { "name": "teleporterRegistryAddress", "type": "address", "internalType": "address" }, { "name": "teleporterManager", "type": "address", "internalType": "address" }, { "name": "minTeleporterVersion", "type": "uint256", "internalType": "uint256" }, { "name": "tokenAddress", "type": "address", "internalType": "address" }, { "name": "tokenDecimals", "type": "uint8", "internalType": "uint8" } ], "stateMutability": "nonpayable" }, { "type": "function", "name": "ERC20_TOKEN_HOME_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", "type": "bytes32", "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", "name": "TELEPORTER_REGISTRY_APP_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", "type": "bytes32", "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", "name": "TOKEN_HOME_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", "type": "bytes32", "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", "name": "addCollateral", "inputs": [ { "name": "remoteBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "remoteTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "amount", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "getBlockchainID", "inputs": [], "outputs": [ { "name": "", "type": "bytes32", "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", "name": "getMinTeleporterVersion", "inputs": [], "outputs": [ { "name": "", "type": "uint256", "internalType": "uint256" } ], "stateMutability": "view" }, { "type": "function", "name": "getRemoteTokenTransferrerSettings", "inputs": [ { "name": "remoteBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "remoteTokenTransferrerAddress", "type": "address", "internalType": "address" } ], "outputs": [ { "name": "", "type": "tuple", "internalType": "struct RemoteTokenTransferrerSettings", "components": [ { "name": "registered", "type": "bool", "internalType": "bool" }, { "name": "collateralNeeded", "type": "uint256", "internalType": "uint256" }, { "name": "tokenMultiplier", "type": "uint256", "internalType": "uint256" }, { "name": "multiplyOnRemote", "type": "bool", "internalType": "bool" } ] } ], "stateMutability": "view" }, { "type": "function", "name": "getTokenAddress", "inputs": [], "outputs": [ { "name": "", "type": "address", "internalType": "address" } ], "stateMutability": "view" }, { "type": "function", "name": "getTransferredBalance", "inputs": [ { "name": "remoteBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "remoteTokenTransferrerAddress", "type": "address", "internalType": "address" } ], "outputs": [ { "name": "", "type": "uint256", "internalType": "uint256" } ], "stateMutability": "view" }, { "type": "function", "name": "initialize", "inputs": [ { "name": "teleporterRegistryAddress", "type": "address", "internalType": "address" }, { "name": "teleporterManager", "type": "address", "internalType": "address" }, { "name": "minTeleporterVersion", "type": "uint256", "internalType": "uint256" }, { "name": "tokenAddress", "type": "address", "internalType": "address" }, { "name": "tokenDecimals", "type": "uint8", "internalType": "uint8" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "isTeleporterAddressPaused", "inputs": [ { "name": "teleporterAddress", "type": "address", "internalType": "address" } ], "outputs": [ { "name": "", "type": "bool", "internalType": "bool" } ], "stateMutability": "view" }, { "type": "function", "name": "owner", "inputs": [], "outputs": [ { "name": "", "type": "address", "internalType": "address" } ], "stateMutability": "view" }, { "type": "function", "name": "pauseTeleporterAddress", "inputs": [ { "name": "teleporterAddress", "type": "address", "internalType": "address" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "receiveTeleporterMessage", "inputs": [ { "name": "sourceBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "originSenderAddress", "type": "address", "internalType": "address" }, { "name": "message", "type": "bytes", "internalType": "bytes" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "renounceOwnership", "inputs": [], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "send", "inputs": [ { "name": "input", "type": "tuple", "internalType": "struct SendTokensInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" } ] }, { "name": "amount", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "sendAndCall", "inputs": [ { "name": "input", "type": "tuple", "internalType": "struct SendAndCallInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipientContract", "type": "address", "internalType": "address" }, { "name": "recipientPayload", "type": "bytes", "internalType": "bytes" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "recipientGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" }, { "name": "fallbackRecipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" } ] }, { "name": "amount", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "transferOwnership", "inputs": [ { "name": "newOwner", "type": "address", "internalType": "address" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "unpauseTeleporterAddress", "inputs": [ { "name": "teleporterAddress", "type": "address", "internalType": "address" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "function", "name": "updateMinTeleporterVersion", "inputs": [ { "name": "version", "type": "uint256", "internalType": "uint256" } ], "outputs": [], "stateMutability": "nonpayable" }, { "type": "event", "name": "CallFailed", "inputs": [ { "name": "recipientContract", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "CallSucceeded", "inputs": [ { "name": "recipientContract", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "CollateralAdded", "inputs": [ { "name": "remoteBlockchainID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "remoteTokenTransferrerAddress", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "remaining", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "Initialized", "inputs": [ { "name": "version", "type": "uint64", "indexed": false, "internalType": "uint64" } ], "anonymous": false }, { "type": "event", "name": "MinTeleporterVersionUpdated", "inputs": [ { "name": "oldMinTeleporterVersion", "type": "uint256", "indexed": true, "internalType": "uint256" }, { "name": "newMinTeleporterVersion", "type": "uint256", "indexed": true, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "OwnershipTransferred", "inputs": [ { "name": "previousOwner", "type": "address", "indexed": true, "internalType": "address" }, { "name": "newOwner", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "RemoteRegistered", "inputs": [ { "name": "remoteBlockchainID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "remoteTokenTransferrerAddress", "type": "address", "indexed": true, "internalType": "address" }, { "name": "initialCollateralNeeded", "type": "uint256", "indexed": false, "internalType": "uint256" }, { "name": "tokenDecimals", "type": "uint8", "indexed": false, "internalType": "uint8" } ], "anonymous": false }, { "type": "event", "name": "TeleporterAddressPaused", "inputs": [ { "name": "teleporterAddress", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "TeleporterAddressUnpaused", "inputs": [ { "name": "teleporterAddress", "type": "address", "indexed": true, "internalType": "address" } ], "anonymous": false }, { "type": "event", "name": "TokensAndCallRouted", "inputs": [ { "name": "teleporterMessageID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "input", "type": "tuple", "indexed": false, "internalType": "struct SendAndCallInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipientContract", "type": "address", "internalType": "address" }, { "name": "recipientPayload", "type": "bytes", "internalType": "bytes" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "recipientGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" }, { "name": "fallbackRecipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" } ] }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "TokensAndCallSent", "inputs": [ { "name": "teleporterMessageID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "sender", "type": "address", "indexed": true, "internalType": "address" }, { "name": "input", "type": "tuple", "indexed": false, "internalType": "struct SendAndCallInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipientContract", "type": "address", "internalType": "address" }, { "name": "recipientPayload", "type": "bytes", "internalType": "bytes" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "recipientGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" }, { "name": "fallbackRecipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" } ] }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "TokensRouted", "inputs": [ { "name": "teleporterMessageID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "input", "type": "tuple", "indexed": false, "internalType": "struct SendTokensInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" } ] }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "TokensSent", "inputs": [ { "name": "teleporterMessageID", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, { "name": "sender", "type": "address", "indexed": true, "internalType": "address" }, { "name": "input", "type": "tuple", "indexed": false, "internalType": "struct SendTokensInput", "components": [ { "name": "destinationBlockchainID", "type": "bytes32", "internalType": "bytes32" }, { "name": "destinationTokenTransferrerAddress", "type": "address", "internalType": "address" }, { "name": "recipient", "type": "address", "internalType": "address" }, { "name": "primaryFeeTokenAddress", "type": "address", "internalType": "address" }, { "name": "primaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "secondaryFee", "type": "uint256", "internalType": "uint256" }, { "name": "requiredGasLimit", "type": "uint256", "internalType": "uint256" }, { "name": "multiHopFallback", "type": "address", "internalType": "address" } ] }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "event", "name": "TokensWithdrawn", "inputs": [ { "name": "recipient", "type": "address", "indexed": true, "internalType": "address" }, { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } ], "anonymous": false }, { "type": "error", "name": "AddressEmptyCode", "inputs": [ { "name": "target", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "AddressInsufficientBalance", "inputs": [ { "name": "account", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "FailedInnerCall", "inputs": [] }, { "type": "error", "name": "InvalidInitialization", "inputs": [] }, { "type": "error", "name": "NotInitializing", "inputs": [] }, { "type": "error", "name": "OwnableInvalidOwner", "inputs": [ { "name": "owner", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "OwnableUnauthorizedAccount", "inputs": [ { "name": "account", "type": "address", "internalType": "address" } ] }, { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] }, { "type": "error", "name": "SafeERC20FailedOperation", "inputs": [ { "name": "token", "type": "address", "internalType": "address" } ] } ], bytecode: '0x608060405234801561000f575f80fd5b50604051614ffb380380614ffb83398101604081905261002e91610893565b61003b8585858585610048565b505050505061090d565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100915750825b90505f826001600160401b031660011480156100ac5750303b155b9050811580156100ba575080155b156100d85760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561010657845460ff60401b1916680100000000000000001785555b6101138a8a8a8a8a610165565b831561015957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b61016d61018a565b61017a85858585856101da565b610183826101ff565b5050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101d857604051631afcd79f60e31b815260040160405180910390fd5b565b6101e261018a565b6101ed858585610248565b6101f5610268565b6101838282610278565b61020761018a565b7f914a9547f6c3ddce1d5efbd9e687708f0d1d408ce129e8e1a88bce4f40e2950080546001600160a01b0319166001600160a01b0392909216919091179055565b61025061018a565b61025a8382610404565b6102638261042a565b505050565b61027061018a565b6101d861043b565b61028061018a565b6001600160a01b0382166102db5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e486f6d653a207a65726f20746f6b656e206164647265737300000060448201526064015b60405180910390fd5b60128160ff16111561033a5760405162461bcd60e51b815260206004820152602260248201527f546f6b656e486f6d653a20746f6b656e20646563696d616c7320746f6f2068696044820152610ced60f31b60648201526084016102d2565b5f7f9316912b5a9db88acbe872c934fdd0a46c436c6dcba332d649c4d57c7bc9e60090507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d291906108f6565b8155600101805460ff909216600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b61040c61018a565b610414610465565b61041c610475565b610426828261047d565b5050565b61043261018a565b61004581610607565b5f7fd2f1ed38b7d242bfb8b41862afb813a15193219a4bc717f2056607593e6c75005b6001905550565b61046d61018a565b6101d8610641565b6101d861018a565b61048561018a565b6001600160a01b0382166105015760405162461bcd60e51b815260206004820152603760248201527f54656c65706f7274657252656769737472794170703a207a65726f2054656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084016102d2565b5f7fde77a4dc7391f6f8f2d9567915d687d3aee79e7a1fc7300392f2727e9a0f1d0090505f8390505f816001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610566573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058a91906108f6565b116105df5760405162461bcd60e51b815260206004820152603260248201525f80516020614fdb833981519152604482015271656c65706f7274657220726567697374727960701b60648201526084016102d2565b81546001600160a01b0319166001600160a01b03821617825561060183610670565b50505050565b61060f61018a565b6001600160a01b03811661063857604051631e4fbdf760e01b81525f60048201526024016102d2565b61004581610808565b61064961018a565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061045e565b7fde77a4dc7391f6f8f2d9567915d687d3aee79e7a1fc7300392f2727e9a0f1d0080546040805163301fd1f560e21b815290515f926001600160a01b03169163c07f47d49160048083019260209291908290030181865afa1580156106d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106fb91906108f6565b60028301549091508184111561075a5760405162461bcd60e51b815260206004820152603160248201525f80516020614fdb83398151915260448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016102d2565b8084116107cf5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f7274657252656769737472794170703a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016102d2565b60028301849055604051849082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d905f90a350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b80516001600160a01b038116811461088e575f80fd5b919050565b5f805f805f60a086880312156108a7575f80fd5b6108b086610878565b94506108be60208701610878565b9350604086015192506108d360608701610878565b9150608086015160ff811681146108e8575f80fd5b809150509295509295909350565b5f60208284031215610906575f80fd5b5051919050565b6146c18061091a5f395ff3fe608060405234801561000f575f80fd5b5060043610610127575f3560e01c806365690038116100a9578063c8511ada1161006e578063c8511ada146102b4578063c868efaa14610388578063d2cc7a701461039b578063f2fde38b146103c2578063fd658268146103d5575f80fd5b80636569003814610232578063715018a6146102455780638da5cb5b1461024d578063909a6ac01461027d5780639731429714610291575f80fd5b80634511243e116100ef5780634511243e146101d15780634797735f146101e45780635d16225d146101f85780635eb995141461020b57806362e3901b1461021e575f80fd5b806310fe9ae81461012b578063154d625a146101745780632b0d8f18146101955780633bb03890146101aa5780634213cf78146101bd575b5f80fd5b7f9316912b5a9db88acbe872c934fdd0a46c436c6dcba332d649c4d57c7bc9e601546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b61018761018236600461368c565b6103e8565b60405190815260200161016b565b6101a86101a33660046136ba565b610430565b005b6101a86101b83660046136e3565b610532565b5f8051602061461583398151915254610187565b6101a86101df3660046136ba565b610646565b6101875f8051602061467583398151915281565b6101a8610206366004613747565b610735565b6101a8610219366004613776565b610751565b6101875f8051602061461583398151915281565b6101a861024036600461378d565b610765565b6101a861078e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610157565b6101875f8051602061469583398151915281565b6102a461029f3660046136ba565b6107a1565b604051901515815260200161016b565b6103516102c236600461368c565b60408051608080820183525f808352602080840182905283850182905260609384018290529581525f8051602061463583398151915286528381206001600160a01b039590951681529385529282902082519384018352805460ff9081161515855260018201549585019590955260028101549284019290925260039091015490921615159181019190915290565b60405161016b9190815115158152602080830151908201526040808301519082015260609182015115159181019190915260800190565b6101a86103963660046137d3565b6107c1565b7fde77a4dc7391f6f8f2d9567915d687d3aee79e7a1fc7300392f2727e9a0f1d0254610187565b6101a86103d03660046136ba565b61097e565b6101a86103e3366004613854565b6109b8565b5f8281527f9316912b5a9db88acbe872c934fdd0a46c436c6dcba332d649c4d57c7bc9e603602090815260408083206001600160a01b03851684529091529020545b92915050565b5f805160206146958339815191526104466109c8565b6001600160a01b0382166104755760405162461bcd60e51b815260040161046c90613889565b60405180910390fd5b61047f81836109d0565b156104e25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f7274657252656769737472794170703a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161046c565b6001600160a01b0382165f81815260018381016020526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156105765750825b90505f826001600160401b031660011480156105915750303b155b90508115801561059f575080155b156105bd5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105e757845460ff60401b1916600160401b1785555b6105f48a8a8a8a8a6109f1565b831561063a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f8051602061469583398151915261065c6109c8565b6001600160a01b0382166106825760405162461bcd60e51b815260040161046c90613889565b61068c81836109d0565b6106ea5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f7274657252656769737472794170703a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161046c565b6001600160a01b0382165f818152600183016020526040808220805460ff19169055517f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c39190a25050565b61074d61074736849003840184613989565b82610a16565b5050565b6107596109c8565b61076281610c27565b50565b61074d61077d5f805160206146158339815191525490565b303361078886613a8b565b85610dbf565b610796610fcb565b61079f5f611026565b565b5f5f805160206146958339815191526107ba81846109d0565b9392505050565b6107c9611096565b5f5f8051602061469583398151915260028101548154919250906001600160a01b0316634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610834573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108589190613b59565b10156108bf5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f7274657252656769737472794170703a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161046c565b6108c981336109d0565b1561092f5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f7274657252656769737472794170703a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161046c565b61096f858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506110e092505050565b506109786114d3565b50505050565b610986610fcb565b6001600160a01b0381166109af57604051631e4fbdf760e01b81525f600482015260240161046c565b61076281611026565b6109c38383836114fd565b505050565b61079f610fcb565b6001600160a01b03165f908152600191909101602052604090205460ff1690565b6109f96116ed565b610a068585858585611736565b610a0f8261175b565b5050505050565b5f805160206146558339815191528054600114610a455760405162461bcd60e51b815260040161046c90613b70565b60028155610a5283611791565b60e08301516001600160a01b031615610a7d5760405162461bcd60e51b815260040161046c90613bb4565b5f80610a9b855f01518660200151868860600151896080015161183a565b915091505f604051806040016040528060016004811115610abe57610abe613bfa565b8152602001604051806040016040528089604001516001600160a01b0316815260200186815250604051602001610af59190613c0e565b60405160208183030381529060405281525090505f610bd46040518060c00160405280895f0151815260200189602001516001600160a01b0316815260200160405180604001604052808b606001516001600160a01b031681526020018781525081526020018960c0015181526020015f6001600160401b03811115610b7d57610b7d6138d7565b604051908082528060200260200182016040528015610ba6578160200160208202803683370190505b50815260200184604051602001610bbd9190613c7b565b6040516020818303038152906040528152506119ff565b9050336001600160a01b0316817f93f19bf1ec58a15dc643b37e7e18a1c13e85e06cd11929e283154691ace9fb528987604051610c12929190613cbd565b60405180910390a35050600190925550505050565b5f8051602061469583398151915280546040805163301fd1f560e21b815290515f926001600160a01b03169163c07f47d49160048083019260209291908290030181865afa158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190613b59565b600283015490915081841115610d115760405162461bcd60e51b815260206004820152603160248201527f54656c65706f7274657252656769737472794170703a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161046c565b808411610d865760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f7274657252656769737472794170703a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161046c565b60028301849055604051849082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d905f90a350505050565b5f805160206146558339815191528054600114610dee5760405162461bcd60e51b815260040161046c90613b70565b60028155610dfb83611b1a565b60c08301516001600160a01b031615610e265760405162461bcd60e51b815260040161046c90613bb4565b5f80610e46855f015186602001518688610100015189610120015161183a565b915091505f604051806040016040528060026004811115610e6957610e69613bfa565b81526020016040518061010001604052808c81526020018b6001600160a01b031681526020018a6001600160a01b0316815260200189604001516001600160a01b03168152602001868152602001896060015181526020018960a0015181526020018960e001516001600160a01b0316815250604051602001610eec9190613d3e565b60405160208183030381529060405281525090505f610f756040518060c00160405280895f0151815260200189602001516001600160a01b0316815260200160405180604001604052808b61010001516001600160a01b03168152602001878152508152602001896080015181526020015f6001600160401b03811115610b7d57610b7d6138d7565b9050876001600160a01b0316817f5d76dff81bf773b908b050fa113d39f7d8135bb4175398f313ea19cd3a1a0b168987604051610fb3929190613ddc565b60405180910390a35050600190925550505050505050565b33610ffd7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461079f5760405163118cdaa760e01b815233600482015260240161046c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f008054600119016110da57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f5f8051602061461583398151915290505f828060200190518101906111069190613f00565b905060018151600481111561111d5761111d613bfa565b03611165575f816020015180602001905181019061113b9190613f88565b90505f61114d87878460200151611cff565b905061115c825f015182611d8a565b50505050505050565b60028151600481111561117a5761117a613bfa565b03611293575f81602001518060200190518101906111989190613fc0565b90505f6111aa87878460800151611cff565b825190915087146112105760405162461bcd60e51b815260206004820152602a60248201527f546f6b656e486f6d653a206d69736d61746368656420736f7572636520626c6f60448201526918dad8da185a5b88125160b21b606482015260840161046c565b856001600160a01b031682602001516001600160a01b0316146112895760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e486f6d653a206d69736d617463686564206f726967696e2073656e60448201526a646572206164647265737360a81b606482015260840161046c565b61115c8282611ded565b6003815160048111156112a8576112a8613bfa565b0361137c575f81602001518060200190518101906112c6919061408a565b90505f806112de888885606001518660800151611fcd565b91509150611372604051806101000160405280855f0151815260200185602001516001600160a01b0316815260200185604001516001600160a01b03168152602001876001015f9054906101000a90046001600160a01b03166001600160a01b031681526020018381526020015f8