From a8aa5249e17b5da4065ea8e11851ae45a63928ef Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Fri, 12 Apr 2024 17:25:51 -0400 Subject: [PATCH 01/26] Native token destination is wrapped native token --- .../go/ERC20Destination/ERC20Destination.go | 35 +- .../NativeTokenDestination.go | 1105 +++++++++++++++-- contracts/src/ERC20Destination.sol | 10 +- contracts/src/NativeTokenDestination.sol | 145 ++- contracts/src/TeleporterTokenDestination.sol | 11 +- contracts/test/ERC20BridgeTests.t.sol | 17 +- contracts/test/ERC20DestinationTests.t.sol | 5 + contracts/test/ERC20SourceTests.t.sol | 5 + contracts/test/NativeTokenBridgeTests.t.sol | 12 - .../test/NativeTokenDestinationTests.t.sol | 247 ++-- contracts/test/NativeTokenSourceTests.t.sol | 11 + tests/flows/er20_source_erc20_destination.go | 2 +- 12 files changed, 1224 insertions(+), 381 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index d9a6fbbed..c0d52f5a8 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -54,8 +54,8 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b50604051620042dc380380620042dc833981016040819052620000359162000690565b82828888888830600080868681600160008190555060006001600160a01b0316816001600160a01b031603620000d85760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000149919062000758565b6002555062000158336200047f565b6200016381620004d1565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e6919062000758565b60a052846200024d5760405162461bcd60e51b81526020600482015260356024820152600080516020620042bc83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000cf565b60a0518503620002d55760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000cf565b6001600160a01b038416620003425760405162461bcd60e51b81526020600482015260356024820152600080516020620042bc83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000cf565b6001600160a01b038316620003a45760405162461bcd60e51b81526020600482015260326024820152600080516020620042bc8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000cf565b60128260ff161115620004105760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000cf565b60c08590526001600160a01b0380851660e0528316610100526200043682600a62000887565b6101205215156101405250600894506200045993508692508491506200092e9050565b5060096200046882826200092e565b50505060ff166101605250620009fa945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620004db62000550565b6001600160a01b038116620005425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000cf565b6200054d816200047f565b50565b6003546001600160a01b03163314620005ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000cf565b565b80516001600160a01b0381168114620005c657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620005f357600080fd5b81516001600160401b0380821115620006105762000610620005cb565b604051601f8301601f19908116603f011681019082821181831017156200063b576200063b620005cb565b816040528381526020925086838588010111156200065857600080fd5b600091505b838210156200067c57858201830151818301840152908201906200065d565b600093810190920192909252949350505050565b600080600080600080600060e0888a031215620006ac57600080fd5b620006b788620005ae565b9650620006c760208901620005ae565b955060408801519450620006de60608901620005ae565b60808901519094506001600160401b0380821115620006fc57600080fd5b6200070a8b838c01620005e1565b945060a08a01519150808211156200072157600080fd5b50620007308a828b01620005e1565b92505060c088015160ff811681146200074857600080fd5b8091505092959891949750929550565b6000602082840312156200076b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c9578160001904821115620007ad57620007ad62000772565b80851615620007bb57918102915b93841c93908002906200078d565b509250929050565b600082620007e25750600162000881565b81620007f15750600062000881565b81600181146200080a5760028114620008155762000835565b600191505062000881565b60ff84111562000829576200082962000772565b50506001821b62000881565b5060208310610133831016604e8410600b84101617156200085a575081810a62000881565b62000866838362000788565b80600019048211156200087d576200087d62000772565b0290505b92915050565b60006200089860ff841683620007d1565b9392505050565b600181811c90821680620008b457607f821691505b602082108103620008d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092957600081815260208120601f850160051c81016020861015620009045750805b601f850160051c820191505b81811015620009255782815560010162000910565b5050505b505050565b81516001600160401b038111156200094a576200094a620005cb565b62000962816200095b84546200089f565b84620008db565b602080601f8311600181146200099a5760008415620009815750858301515b600019600386901b1c1916600185901b17855562000925565b600085815260208120601f198616915b82811015620009cb57888601518255948401946001909101908401620009aa565b5085821015620009ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161014051610160516137d062000aec600039600061030401526000818161028c0152610907015260008181610472015281816109320152610963015260008181610438015281816113640152611b97015260008181610501015281816110840152818161132a0152818161191901528181611b5d0152611d000152600081816102c60152818161105401528181611304015281816118f201528181611b370152611c8a0152600081816104ac015281816111c201526119f501526000818161024d015281816109a40152818161146b015261236601526137d06000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806395d89b411161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104d6578063f2fde38b146104e9578063f5ea0603146104fc578063fb027c9d1461052357600080fd5b8063ba3f5a121461046d578063c868efaa14610494578063d127dc9b146104a7578063d2cc7a70146104ce57600080fd5b8063b51cff1b116100de578063b51cff1b14610416578063b6580b6914610429578063b8df0dea14610433578063b94485871461045a57600080fd5b806395d89b41146103bc57806397314297146103c4578063a457c2d7146103f0578063a9059cbb1461040357600080fd5b8063313ce567116101875780635eb99514116101565780635eb995141461036757806370a082311461037a578063715018a6146103a35780638da5cb5b146103ab57600080fd5b8063313ce567146102fd57806332709bc11461032e57806339509351146103415780634511243e1461035457600080fd5b80631ce22075116101c35780631ce220751461028757806323b872dd146102ae57806329b7b3fd146102c15780632b0d8f18146102e857600080fd5b806306fdde03146101f5578063095ea7b31461021357806318160ddd146102365780631a7f5bec14610248575b600080fd5b6101fd61052c565b60405161020a9190612c20565b60405180910390f35b610226610221366004612c53565b6105be565b604051901515815260200161020a565b6007545b60405190815260200161020a565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b6102266102bc366004612c7f565b6105d8565b61023a7f000000000000000000000000000000000000000000000000000000000000000081565b6102fb6102f6366004612cc0565b6105fc565b005b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020a565b6102fb61033c366004612cdd565b610701565b61022661034f366004612c53565b61070f565b6102fb610362366004612cc0565b610731565b6102fb610375366004612d0e565b61082e565b61023a610388366004612cc0565b6001600160a01b031660009081526005602052604090205490565b6102fb610842565b6003546001600160a01b031661026f565b6101fd610856565b6102266103d2366004612cc0565b6001600160a01b031660009081526001602052604090205460ff1690565b6102266103fe366004612c53565b610865565b610226610411366004612c53565b6108e0565b6102fb610424366004612d27565b6108ee565b61023a62035b6081565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b61023a610468366004612d72565b610900565b61023a7f000000000000000000000000000000000000000000000000000000000000000081565b6102fb6104a2366004612da2565b61098f565b61023a7f000000000000000000000000000000000000000000000000000000000000000081565b60025461023a565b61023a6104e4366004612e2b565b610b59565b6102fb6104f7366004612cc0565b610b84565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b61023a6103e881565b60606008805461053b90612e59565b80601f016020809104026020016040519081016040528092919081815260200182805461056790612e59565b80156105b45780601f10610589576101008083540402835291602001916105b4565b820191906000526020600020905b81548152906001019060200180831161059757829003601f168201915b5050505050905090565b6000336105cc818585610bfa565b60019150505b92915050565b6000336105e6858285610d1e565b6105f1858585610d92565b506001949350505050565b610604610f3d565b6001600160a01b0381166106335760405162461bcd60e51b815260040161062a90612e93565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106b25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161062a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61070b8282610f45565b5050565b6000336105cc8185856107228383610b59565b61072c9190612ef7565b610bfa565b610739610f3d565b6001600160a01b03811661075f5760405162461bcd60e51b815260040161062a90612e93565b6001600160a01b03811660009081526001602052604090205460ff166107d95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161062a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610836610f3d565b61083f81611467565b50565b61084a611607565b6108546000611661565b565b60606009805461053b90612e59565b600033816108738286610b59565b9050838110156108d35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161062a565b6105f18286868403610bfa565b6000336105cc818585610d92565b61070b6108fa83612ff9565b826116b3565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361095e576109577f0000000000000000000000000000000000000000000000000000000000000000846130a7565b90506105d2565b6109887f0000000000000000000000000000000000000000000000000000000000000000846130be565b9392505050565b610997611c2f565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3291906130e0565b1015610a995760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161062a565b610aa2336103d2565b15610b085760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161062a565b610b49848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8892505050565b610b536001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b8c611607565b6001600160a01b038116610bf15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161062a565b61083f81611661565b6001600160a01b038316610c5c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161062a565b6001600160a01b038216610cbd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161062a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610d2a8484610b59565b90506000198114610b535781811015610d855760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161062a565b610b538484848403610bfa565b6001600160a01b038316610df65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161062a565b6001600160a01b038216610e585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161062a565b6001600160a01b03831660009081526005602052604090205481811015610ed05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161062a565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f309086815260200190565b60405180910390a3610b53565b610854611607565b600160045414610f675760405162461bcd60e51b815260040161062a906130f9565b60026004556000610f7e6060840160408501612cc0565b6001600160a01b031603610fdd5760405162461bcd60e51b8152602060048201526032602482015260008051602061375b83398151915260448201527120726563697069656e74206164647265737360701b606482015260840161062a565b8160a001356000036110015760405162461bcd60e51b815260040161062a9061313d565b61102682356110166040850160208601612cc0565b8385606001358660800135611ee1565b905061104d6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036111c0576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110b46040860160208701612cc0565b6001600160a01b0316146110da5760405162461bcd60e51b815260040161062a9061317e565b6080840135156111475760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161062a565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061117e9190612cc0565b6001600160a01b031690526040516111a7919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112f2565b7f000000000000000000000000000000000000000000000000000000000000000084350361121f57306111f96040860160208701612cc0565b6001600160a01b03160361121f5760405162461bcd60e51b815260040161062a9061317e565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906112609190612cc0565b6001600160a01b0316815260200161127e6060890160408a01612cc0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006114156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156113be576113be612f0a565b6040519080825280602002602001820160405280156113e7578160200160208202803683370190505b508152602001856040516020016113fe91906131df565b6040516020818303038152906040528152506120db565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161145392919061322e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb91906130e0565b6002549091508183111561155b5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161062a565b8083116115d05760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161062a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161062a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116d55760405162461bcd60e51b815260040161062a906130f9565b600260045560408201516001600160a01b03166117485760405162461bcd60e51b815260206004820152603b602482015260008051602061375b83398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161062a565b600082608001511161176c5760405162461bcd60e51b815260040161062a9061313d565b60008260a00151116117cb5760405162461bcd60e51b8152602060048201526034602482015260008051602061375b833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161062a565b81608001518260a00151106118365760405162461bcd60e51b8152602060048201526037602482015260008051602061377b83398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161062a565b60c08201516001600160a01b03166118a45760405162461bcd60e51b815260206004820152603b602482015260008051602061375b83398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161062a565b6118c282600001518360200151838560e00151866101000151611ee1565b90506118e96040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036119f1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461196c5760405162461bcd60e51b815260040161062a9061317e565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016119d89190613291565b6040516020818303038152906040528152509150611b25565b83517f00000000000000000000000000000000000000000000000000000000000000009003611a4f57306001600160a01b031684602001516001600160a01b031603611a4f5760405162461bcd60e51b815260040161062a9061317e565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611aee91906132e3565b60405160208183030381529060405281525091508360600151516103e8611b1591906130a7565b611b229062035b60612ef7565b90505b6000611bf16040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156113be576113be612f0a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611453929190613373565b600260005403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161062a565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611cfe5760405162461bcd60e51b8152602060048201526030602482015260008051602061377b83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161062a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d935760405162461bcd60e51b8152602060048201526038602482015260008051602061377b83398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161062a565b600081806020019051810190611da99190613461565b90506000611dbc82602001516001610900565b9050600082516003811115611dd357611dd36131c9565b03611e465760008260400151806020019051810190611df29190613505565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611e4090836121fa565b50611ed5565b600182516003811115611e5b57611e5b6131c9565b03611e865760008260400151806020019051810190611e7a9190613551565b9050611e408183612204565b60405162461bcd60e51b8152602060048201526030602482015260008051602061377b83398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161062a565b5050505050565b505050565b600085611f445760405162461bcd60e51b815260206004820152603a602482015260008051602061375b83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161062a565b6001600160a01b038516611fae5760405162461bcd60e51b815260206004820152603b602482015260008051602061375b83398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161062a565b611fb78461234b565b9350611fc38284612ef7565b84116120375760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161062a565b6120418385613608565b935061204c84612357565b6000612059856000610900565b9050600081116120d15760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161062a565b9695505050505050565b6000806120e6612361565b6040840151602001519091501561218b576040830151516001600160a01b03166121685760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161062a565b60408301516020810151905161218b916001600160a01b03909116908390612475565b604051630624488560e41b81526001600160a01b038216906362448850906121b790869060040161365f565b6020604051808303816000875af11580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906130e0565b61070b828261255a565b61220e308261255a565b61221d30836000015183610bfa565b600030828460200151604051602401612238939291906136dd565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161227891908461261b565b9050600061228a308660000151610b59565b905061229c3086600001516000610bfa565b81156122ee5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122e191815260200190565b60405180910390a2612336565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161232d91815260200190565b60405180910390a25b8015611ed557611ed530866060015183610d92565b60006105d23083612632565b61083f308261279a565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e69190613704565b905061240a816001600160a01b031660009081526001602052604090205460ff1690565b156124705760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161062a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ea91906130e0565b6124f49190612ef7565b6040516001600160a01b038516602482015260448101829052909150610b5390859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526128ce565b6001600160a01b0382166125b05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161062a565b80600760008282546125c29190612ef7565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061262a84600085856129a0565b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f91906130e0565b90506126b66001600160a01b038516333086612a75565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156126fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272191906130e0565b90508181116127875760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b606482015260840161062a565b6127918282613608565b95945050505050565b6001600160a01b0382166127fa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161062a565b6001600160a01b0382166000908152600560205260409020548181101561286e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161062a565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000612923826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612aad9092919063ffffffff16565b805190915015611edc57808060200190518101906129419190613721565b611edc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161062a565b6000845a10156129f25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161062a565b83471015612a425760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161062a565b826001600160a01b03163b600003612a5c5750600061262a565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610b539085906323b872dd60e01b90608401612523565b606061262a848460008585600080866001600160a01b03168587604051612ad4919061373e565b60006040518083038185875af1925050503d8060008114612b11576040519150601f19603f3d011682016040523d82523d6000602084013e612b16565b606091505b5091509150612b2787838387612b32565b979650505050505050565b60608315612ba1578251600003612b9a576001600160a01b0385163b612b9a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161062a565b508161262a565b61262a8383815115612bb65781518083602001fd5b8060405162461bcd60e51b815260040161062a9190612c20565b60005b83811015612beb578181015183820152602001612bd3565b50506000910152565b60008151808452612c0c816020860160208601612bd0565b601f01601f19169290920160200192915050565b6020815260006109886020830184612bf4565b6001600160a01b038116811461083f57600080fd5b803561247081612c33565b60008060408385031215612c6657600080fd5b8235612c7181612c33565b946020939093013593505050565b600080600060608486031215612c9457600080fd5b8335612c9f81612c33565b92506020840135612caf81612c33565b929592945050506040919091013590565b600060208284031215612cd257600080fd5b813561098881612c33565b60008082840360e0811215612cf157600080fd5b60c0811215612cff57600080fd5b50919360c08501359350915050565b600060208284031215612d2057600080fd5b5035919050565b60008060408385031215612d3a57600080fd5b823567ffffffffffffffff811115612d5157600080fd5b83016101208186031215612c7157600080fd5b801515811461083f57600080fd5b60008060408385031215612d8557600080fd5b823591506020830135612d9781612d64565b809150509250929050565b60008060008060608587031215612db857600080fd5b843593506020850135612dca81612c33565b9250604085013567ffffffffffffffff80821115612de757600080fd5b818701915087601f830112612dfb57600080fd5b813581811115612e0a57600080fd5b886020828501011115612e1c57600080fd5b95989497505060200194505050565b60008060408385031215612e3e57600080fd5b8235612e4981612c33565b91506020830135612d9781612c33565b600181811c90821680612e6d57607f821691505b602082108103612e8d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105d2576105d2612ee1565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612f4457612f44612f0a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f7357612f73612f0a565b604052919050565b600067ffffffffffffffff821115612f9557612f95612f0a565b50601f01601f191660200190565b600082601f830112612fb457600080fd5b8135612fc7612fc282612f7b565b612f4a565b818152846020838601011115612fdc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561300c57600080fd5b613014612f20565b8235815261302460208401612c48565b602082015261303560408401612c48565b6040820152606083013567ffffffffffffffff81111561305457600080fd5b61306036828601612fa3565b6060830152506080830135608082015260a083013560a082015261308660c08401612c48565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105d2576105d2612ee1565b6000826130db57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156130f257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b602080825260339082015260008051602061375b833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e9082015260008051602061377b83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061320557634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261262a6080840182612bf4565b8235815260e08101602084013561324481612c33565b6001600160a01b03908116602084015260408501359061326382612c33565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526132c060a0850182612bf4565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261332e610120850183612bf4565b9150608085015160a085015260a085015161335460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161339a60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526133cb610160850183612bf4565b9150608086015160c085015260a086015160e085015260c08601516101006133fd818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261342d57600080fd5b815161343b612fc282612f7b565b81815284602083860101111561345057600080fd5b61262a826020830160208701612bd0565b60006020828403121561347357600080fd5b815167ffffffffffffffff8082111561348b57600080fd5b908301906060828603121561349f57600080fd5b6040516060810181811083821117156134ba576134ba612f0a565b6040528251600481106134cc57600080fd5b8152602083810151908201526040830151828111156134ea57600080fd5b6134f68782860161341c565b60408301525095945050505050565b60006020828403121561351757600080fd5b6040516020810181811067ffffffffffffffff8211171561353a5761353a612f0a565b604052825161354881612c33565b81529392505050565b60006020828403121561356357600080fd5b815167ffffffffffffffff8082111561357b57600080fd5b908301906080828603121561358f57600080fd5b6040516080810181811083821117156135aa576135aa612f0a565b60405282516135b881612c33565b81526020830151828111156135cc57600080fd5b6135d88782860161341c565b60208301525060408301516040820152606083015192506135f883612c33565b6060810192909252509392505050565b818103818111156105d2576105d2612ee1565b600081518084526020808501945080840160005b838110156136545781516001600160a01b03168752958201959082019060010161362f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526136c061010084018261361b565b905060a0840151601f198483030160e08501526127918282612bf4565b60018060a01b03841681528260208201526060604082015260006127916060830184612bf4565b60006020828403121561371657600080fd5b815161098881612c33565b60006020828403121561373357600080fd5b815161098881612d64565b60008251613750818460208701612bd0565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212200ae0d6dbc59f0ee83eb9ca56e440e9a1b3057ed89a751fca68ad65539272a15d64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b506040516200404d3803806200404d833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200402d83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200402d83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051610140516135c662000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261230401526135c66000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a0d565b60405180910390f35b61021b610216366004612a40565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612a6c565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612aad565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612aca565b6106cf565b61021b610344366004612a40565b6106dd565b6102f0610357366004612aad565b6106ff565b6102f061036a366004612afb565b6107fc565b61022f61037d366004612aad565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612aad565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a40565b610833565b61021b610406366004612a40565b6108ae565b6102f0610419366004612b14565b6108bc565b61022f62035b6081565b61022f610436366004612b5f565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612b8f565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c18565b610b27565b6102f06104c5366004612aad565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c46565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c46565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612c80565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612ce4565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612c80565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c46565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612de6565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612e94565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eab565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612ecd565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612ee6565b60026004556000610f4c6060840160408501612aad565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061355183398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f2a565b610ff48235610fe46040850160208601612aad565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612aad565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612f6b565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612aad565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612aad565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612f6b565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612aad565b6001600160a01b0316815260200161124c6060890160408a01612aad565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612cf7565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac9190612fcc565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061301b565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612ecd565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612ee6565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061355183398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f2a565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613551833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b8152602060048201526037602482015260008051602061357183398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061355183398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612f6b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001611986919061307e565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612f6b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c91906130d0565b60405160208183030381529060405281525091508360600151516103e8611ac39190612e94565b611ad09062035b60612ce4565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612cf7565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611401929190613160565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b8152602060048201526030602482015260008051602061357183398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b8152602060048201526038602482015260008051602061357183398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d37919061324e565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612fb6565b03611dd45760008260400151806020019051810190611d8091906132f2565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612fb6565b03611e145760008260400151806020019051810190611e08919061333e565b9050611dce8183612192565b60405162461bcd60e51b8152602060048201526030602482015260008051602061357183398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061355183398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061355183398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f45846122d9565b9350611f518284612ce4565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf83856133f5565b9350611fda846122f5565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b6000806120746122ff565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612413565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161344c565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612ecd565b6106d982826124e7565b61219c30826124e7565b6121ab30836000015183610bc8565b6000308284602001516040516024016121c6939291906134d3565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122069190846125a8565b90506000612218308660000151610b27565b905061222a3086600001516000610bc8565b811561227c5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161226f91815260200190565b60405180910390a26122c4565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122bb91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b60006122e6333084610cec565b6122f1333084610d60565b5090565b61080d30826125bf565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238491906134fa565b90506123a8816001600160a01b031660009081526001602052604090205460ff1690565b1561240e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124889190612ecd565b6124929190612ce4565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b219085906126f3565b6001600160a01b03821661253d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b806007600082825461254f9190612ce4565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125b784600085856127c5565b949350505050565b6001600160a01b03821661261f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126935760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000612748826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661289a9092919063ffffffff16565b805190915015611e6a57808060200190518101906127669190613517565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a10156128175760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128675760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b600003612881575060006125b7565b600080600084516020860188888bf19695505050505050565b60606125b7848460008585600080866001600160a01b031685876040516128c19190613534565b60006040518083038185875af1925050503d80600081146128fe576040519150601f19603f3d011682016040523d82523d6000602084013e612903565b606091505b50915091506129148783838761291f565b979650505050505050565b6060831561298e578251600003612987576001600160a01b0385163b6129875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125b7565b6125b783838151156129a35781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a0d565b60005b838110156129d85781810151838201526020016129c0565b50506000910152565b600081518084526129f98160208601602086016129bd565b601f01601f19169290920160200192915050565b60208152600061095660208301846129e1565b6001600160a01b038116811461080d57600080fd5b803561240e81612a20565b60008060408385031215612a5357600080fd5b8235612a5e81612a20565b946020939093013593505050565b600080600060608486031215612a8157600080fd5b8335612a8c81612a20565b92506020840135612a9c81612a20565b929592945050506040919091013590565b600060208284031215612abf57600080fd5b813561095681612a20565b60008082840360e0811215612ade57600080fd5b60c0811215612aec57600080fd5b50919360c08501359350915050565b600060208284031215612b0d57600080fd5b5035919050565b60008060408385031215612b2757600080fd5b823567ffffffffffffffff811115612b3e57600080fd5b83016101208186031215612a5e57600080fd5b801515811461080d57600080fd5b60008060408385031215612b7257600080fd5b823591506020830135612b8481612b51565b809150509250929050565b60008060008060608587031215612ba557600080fd5b843593506020850135612bb781612a20565b9250604085013567ffffffffffffffff80821115612bd457600080fd5b818701915087601f830112612be857600080fd5b813581811115612bf757600080fd5b886020828501011115612c0957600080fd5b95989497505060200194505050565b60008060408385031215612c2b57600080fd5b8235612c3681612a20565b91506020830135612b8481612a20565b600181811c90821680612c5a57607f821691505b602082108103612c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612cce565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d3157612d31612cf7565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d6057612d60612cf7565b604052919050565b600067ffffffffffffffff821115612d8257612d82612cf7565b50601f01601f191660200190565b600082601f830112612da157600080fd5b8135612db4612daf82612d68565b612d37565b818152846020838601011115612dc957600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612df957600080fd5b612e01612d0d565b82358152612e1160208401612a35565b6020820152612e2260408401612a35565b6040820152606083013567ffffffffffffffff811115612e4157600080fd5b612e4d36828601612d90565b6060830152506080830135608082015260a083013560a0820152612e7360c08401612a35565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612cce565b600082612ec857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612edf57600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613551833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e9082015260008051602061357183398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b602081526000825160048110612ff257634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125b760808401826129e1565b8235815260e08101602084013561303181612a20565b6001600160a01b03908116602084015260408501359061305082612a20565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130ad60a08501826129e1565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261311b6101208501836129e1565b9150608085015160a085015260a085015161314160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161318760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131b86101608501836129e1565b9150608086015160c085015260a086015160e085015260c08601516101006131ea818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261321a57600080fd5b8151613228612daf82612d68565b81815284602083860101111561323d57600080fd5b6125b78260208301602087016129bd565b60006020828403121561326057600080fd5b815167ffffffffffffffff8082111561327857600080fd5b908301906060828603121561328c57600080fd5b6040516060810181811083821117156132a7576132a7612cf7565b6040528251600481106132b957600080fd5b8152602083810151908201526040830151828111156132d757600080fd5b6132e387828601613209565b60408301525095945050505050565b60006020828403121561330457600080fd5b6040516020810181811067ffffffffffffffff8211171561332757613327612cf7565b604052825161333581612a20565b81529392505050565b60006020828403121561335057600080fd5b815167ffffffffffffffff8082111561336857600080fd5b908301906080828603121561337c57600080fd5b60405160808101818110838211171561339757613397612cf7565b60405282516133a581612a20565b81526020830151828111156133b957600080fd5b6133c587828601613209565b60208301525060408301516040820152606083015192506133e583612a20565b6060810192909252509392505050565b818103818111156105a0576105a0612cce565b600081518084526020808501945080840160005b838110156134415781516001600160a01b03168752958201959082019060010161341c565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134ad610100840182613408565b905060a0840151601f198483030160e08501526134ca82826129e1565b95945050505050565b60018060a01b03841681528260208201526060604082015260006134ca60608301846129e1565b60006020828403121561350c57600080fd5b815161095681612a20565b60006020828403121561352957600080fd5b815161095681612b51565b600082516135468184602087016129bd565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122050aad2165622dd0e83d379f66546d5c13158586b6db4fe3b411cdd84ed58b9a564736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. @@ -411,37 +411,6 @@ func (_ERC20Destination *ERC20DestinationCallerSession) Decimals() (uint8, error return _ERC20Destination.Contract.Decimals(&_ERC20Destination.CallOpts) } -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. -// -// Solidity: function feeTokenAddress() view returns(address) -func (_ERC20Destination *ERC20DestinationCaller) FeeTokenAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ERC20Destination.contract.Call(opts, &out, "feeTokenAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. -// -// Solidity: function feeTokenAddress() view returns(address) -func (_ERC20Destination *ERC20DestinationSession) FeeTokenAddress() (common.Address, error) { - return _ERC20Destination.Contract.FeeTokenAddress(&_ERC20Destination.CallOpts) -} - -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. -// -// Solidity: function feeTokenAddress() view returns(address) -func (_ERC20Destination *ERC20DestinationCallerSession) FeeTokenAddress() (common.Address, error) { - return _ERC20Destination.Contract.FeeTokenAddress(&_ERC20Destination.CallOpts) -} - // GetMinTeleporterVersion is a free data retrieval call binding the contract method 0xd2cc7a70. // // Solidity: function getMinTeleporterVersion() view returns(uint256) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 78d497849..b3cf211a3 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -29,6 +29,19 @@ var ( _ = abi.ConvertType ) +// NativeTokenDestinationSettings is an auto generated low-level Go binding around an user-defined struct. +type NativeTokenDestinationSettings struct { + Symbol string + TeleporterRegistryAddress common.Address + TeleporterManager common.Address + SourceBlockchainID [32]byte + TokenSourceAddress common.Address + InitialReserveImbalance *big.Int + DecimalsShift uint8 + MultiplyOnReceive bool + BurnedFeesReportingRewardPercentage *big.Int +} + // SendAndCallInput is an auto generated low-level Go binding around an user-defined struct. type SendAndCallInput struct { DestinationBlockchainID [32]byte @@ -54,8 +67,8 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance_\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive_\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURN_FOR_TRANSFER_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101c06040523480156200001257600080fd5b506040516200428c3803806200428c83398101604081905262000035916200066c565b6001600055888888888887878686816001600160a01b038116620000c65760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013791906200071c565b60025550620001463362000520565b620001518162000572565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d491906200071c565b60a052846200023b5760405162461bcd60e51b815260206004820152603560248201526000805160206200426c83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000bd565b60a0518503620002c35760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000bd565b6001600160a01b038416620003305760405162461bcd60e51b815260206004820152603560248201526000805160206200426c83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000bd565b6001600160a01b038316620003925760405162461bcd60e51b815260206004820152603260248201526000805160206200426c8339815191526044820152712066656520746f6b656e206164647265737360701b6064820152608401620000bd565b60128260ff161115620003ed5760405162461bcd60e51b815260206004820152602d60248201526000805160206200424c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000bd565b60c08590526001600160a01b0380851660e0528316610100526200041382600a6200084b565b610120521515610140525050610100516001600160a01b03166101a05250505060008590039050620004ae5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e6365000000000000000000006064820152608401620000bd565b6101608490526005849055606481106200050d5760405162461bcd60e51b815260206004820152602a60248201526000805160206200424c83398151915260448201526970657263656e7461676560b01b6064820152608401620000bd565b6101805250620008639650505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200057c620005f1565b6001600160a01b038116620005e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000bd565b620005ee8162000520565b50565b6003546001600160a01b031633146200064d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000bd565b565b80516001600160a01b03811681146200066757600080fd5b919050565b60008060008060008060008060006101208a8c0312156200068c57600080fd5b620006978a6200064f565b9850620006a760208b016200064f565b975060408a01519650620006be60608b016200064f565b9550620006ce60808b016200064f565b945060a08a0151935060c08a015160ff81168114620006ec57600080fd5b60e08b015190935080151581146200070357600080fd5b809250506101008a015190509295985092959850929598565b6000602082840312156200072f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200078d57816000190482111562000771576200077162000736565b808516156200077f57918102915b93841c939080029062000751565b509250929050565b600082620007a65750600162000845565b81620007b55750600062000845565b8160018114620007ce5760028114620007d957620007f9565b600191505062000845565b60ff841115620007ed57620007ed62000736565b50506001821b62000845565b5060208310610133831016604e8410600b84101617156200081e575081810a62000845565b6200082a83836200074c565b806000190482111562000841576200084162000736565b0290505b92915050565b60006200085c60ff84168362000795565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516138a2620009aa60003960008181610735015281816107af01528181611bdc0152612a330152600081816104190152610b7c0152600081816104d7015261082f0152600081816103530152610dfa01526000818161060001528181610e250152610e5601526000818161020c015281816105ac01528181610d0b015281816114e30152611abb0152600081816106eb01528181610cdd01528181611203015281816114a90152818161183d01528181611a81015261204401526000818161039701528181610cb2015281816111d3015281816114830152818161181601528181611a5b0152611fce01526000818161068201528181611341015261191901526000818161030701528181610e9901528181611d2b01526125ce01526138a26000f3fe6080604052600436106101fc5760003560e01c8063973142971161010d578063c868efaa116100a0578063ecd4ed1b1161006f578063ecd4ed1b14610566578063f2fde38b146106b9578063f5ea0603146106d9578063fb027c9d1461070d578063fc0c546a1461072357600080fd5b8063c868efaa1461063a578063d10a5b8c1461065a578063d127dc9b14610670578063d2cc7a70146106a457600080fd5b8063b8df0dea116100dc578063b8df0dea1461059a578063b9448587146105ce578063ba3f5a12146105ee578063c452165e1461062257600080fd5b80639731429714610517578063a2309ff814610550578063a2a9501714610566578063b6580b691461058357600080fd5b8063329c3e121161019057806355538c8b1161015f57806355538c8b146104705780635eb9951414610490578063715018a6146104b05780638ac7dd20146104c55780638da5cb5b146104f957600080fd5b8063329c3e12146103ec5780633a23dfe2146104075780634511243e1461043b57806349e3284e1461045b57600080fd5b80631ce22075116101cc5780631ce220751461034157806329b7b3fd146103855780632b0d8f18146103b957806330079bff146103d957600080fd5b8062d872ae146102a4578063146dfd3c146102cd57806318160ddd146102e05780631a7f5bec146102f557600080fd5b3661029f57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c6964206044820152753932b1b2b4bb32903830bcb0b136329039b2b73232b960511b60648201526084015b60405180910390fd5b005b600080fd5b3480156102b057600080fd5b506102ba60055481565b6040519081526020015b60405180910390f35b61029d6102db366004612d64565b610757565b3480156102ec57600080fd5b506102ba610784565b34801561030157600080fd5b506103297f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c4565b34801561034d57600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020016102c4565b34801561039157600080fd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c557600080fd5b5061029d6103d4366004612d9c565b61086e565b61029d6103e7366004612db9565b61096a565b3480156103f857600080fd5b506103296001600160991b0181565b34801561041357600080fd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044757600080fd5b5061029d610456366004612d9c565b61099c565b34801561046757600080fd5b50610375610a99565b34801561047c57600080fd5b5061029d61048b366004612df5565b610aaa565b34801561049c57600080fd5b5061029d6104ab366004612df5565b610dce565b3480156104bc57600080fd5b5061029d610ddf565b3480156104d157600080fd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050557600080fd5b506003546001600160a01b0316610329565b34801561052357600080fd5b50610375610532366004612d9c565b6001600160a01b031660009081526001602052604090205460ff1690565b34801561055c57600080fd5b506102ba60065481565b34801561057257600080fd5b5061032962010203600160981b0181565b34801561058f57600080fd5b506102ba62035b6081565b3480156105a657600080fd5b506103297f000000000000000000000000000000000000000000000000000000000000000081565b3480156105da57600080fd5b506102ba6105e9366004612e1c565b610df3565b3480156105fa57600080fd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062e57600080fd5b50610329600160981b81565b34801561064657600080fd5b5061029d610655366004612e4c565b610e84565b34801561066657600080fd5b506102ba60075481565b34801561067c57600080fd5b506102ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b057600080fd5b506002546102ba565b3480156106c557600080fd5b5061029d6106d4366004612d9c565b61104e565b3480156106e557600080fd5b506103297f000000000000000000000000000000000000000000000000000000000000000081565b34801561071957600080fd5b506102ba6103e881565b34801561072f57600080fd5b506103297f000000000000000000000000000000000000000000000000000000000000000081565b600554156107775760405162461bcd60e51b815260040161029490612ed5565b61078181346110c4565b50565b6040516370a0823160e01b815262010203600160981b01600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190612f29565b61082990600160981b31612f58565b905060007f000000000000000000000000000000000000000000000000000000000000000060065461085b9190612f58565b90506108678282612f6b565b9250505090565b6108766115cf565b6001600160a01b03811661089c5760405162461bcd60e51b815260040161029490612f7e565b6001600160a01b03811660009081526001602052604090205460ff161561091b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610294565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6005541561098a5760405162461bcd60e51b815260040161029490612ed5565b610781610996826130bb565b346115d7565b6109a46115cf565b6001600160a01b0381166109ca5760405162461bcd60e51b815260040161029490612f7e565b6001600160a01b03811660009081526001602052604090205460ff16610a445760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610294565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b6000610aa56005541590565b905090565b600160045414610acc5760405162461bcd60e51b815260040161029490613169565b6002600455600754600160981b31908111610b615760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610294565b600060075482610b719190612f6b565b905060006064610ba17f0000000000000000000000000000000000000000000000000000000000000000846131ad565b610bab91906131c4565b90506000610bb98284612f6b565b600785905590508115610bdb57610bd03083611b53565b610bd982611bd5565b505b6000610be8826000610df3565b905060008111610c605760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610294565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682840152865180880188527f000000000000000000000000000000000000000000000000000000000000000090911681528083018a9052818701529283018b905284518281529081019094529192610d8391906080820190815260200184604051602001610d6c919061324c565b604051602081830303815290604052815250611c01565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610db791815260200190565b60405180910390a250506001600455505050505050565b610dd66115cf565b61078181611d27565b610de7611ec7565b610df16000611f21565b565b60008115157f0000000000000000000000000000000000000000000000000000000000000000151503610e5157610e4a7f0000000000000000000000000000000000000000000000000000000000000000846131ad565b9050610e7e565b610e7b7f0000000000000000000000000000000000000000000000000000000000000000846131c4565b90505b92915050565b610e8c611f73565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f279190612f29565b1015610f8e5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610294565b610f9733610532565b15610ffd5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610294565b61103e848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fcc92505050565b6110486001600055565b50505050565b611056611ec7565b6001600160a01b0381166110bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610294565b61078181611f21565b6001600454146110e65760405162461bcd60e51b815260040161029490613169565b600260045560006110fd6060840160408501612d9c565b6001600160a01b03160361115c5760405162461bcd60e51b8152602060048201526032602482015260008051602061382d83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610294565b8160a001356000036111805760405162461bcd60e51b81526004016102949061329b565b6111a582356111956040850160208601612d9c565b8385606001358660800135612220565b90506111cc6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361133f576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166112336040860160208701612d9c565b6001600160a01b0316146112595760405162461bcd60e51b8152600401610294906132dc565b6080840135156112c65760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610294565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906112fd9190612d9c565b6001600160a01b03169052604051611326919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611471565b7f000000000000000000000000000000000000000000000000000000000000000084350361139e57306113786040860160208701612d9c565b6001600160a01b03160361139e5760405162461bcd60e51b8152600401610294906132dc565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906113df9190612d9c565b6001600160a01b031681526020016113fd6060890160408a01612d9c565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b600061157d6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561153d5761153d612fcc565b604051908082528060200260200182016040528015611566578160200160208202803683370190505b50815260200185604051602001610d6c919061324c565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b87876040516115bb929190613327565b60405180910390a350506001600455505050565b610df1611ec7565b6001600454146115f95760405162461bcd60e51b815260040161029490613169565b600260045560408201516001600160a01b031661166c5760405162461bcd60e51b815260206004820152603b602482015260008051602061382d83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610294565b60008260800151116116905760405162461bcd60e51b81526004016102949061329b565b60008260a00151116116ef5760405162461bcd60e51b8152602060048201526034602482015260008051602061382d833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610294565b81608001518260a001511061175a5760405162461bcd60e51b8152602060048201526037602482015260008051602061384d83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610294565b60c08201516001600160a01b03166117c85760405162461bcd60e51b815260206004820152603b602482015260008051602061382d83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610294565b6117e682600001518360200151838560e00151866101000151612220565b905061180d6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f00000000000000000000000000000000000000000000000000000000000000009003611915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146118905760405162461bcd60e51b8152600401610294906132dc565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016118fc919061338a565b6040516020818303038152906040528152509150611a49565b83517f0000000000000000000000000000000000000000000000000000000000000000900361197357306001600160a01b031684602001516001600160a01b0316036119735760405162461bcd60e51b8152600401610294906132dc565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a1291906133dc565b60405160208183030381529060405281525091508360600151516103e8611a3991906131ad565b611a469062035b60612f58565b90505b6000611b156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561153d5761153d612fcc565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516115bb92919061346c565b8060066000828254611b659190612f58565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015611bb957600080fd5b505af1158015611bcd573d6000803e3d6000fd5b505050505050565b6000610e7e7f00000000000000000000000000000000000000000000000000000000000000008361241a565b600080611c0c6125c9565b60408401516020015190915015611cb1576040830151516001600160a01b0316611c8e5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610294565b604083015160208101519051611cb1916001600160a01b039091169083906126dd565b604051630624488560e41b81526001600160a01b03821690636244885090611cdd908690600401613559565b6020604051808303816000875af1158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190612f29565b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab9190612f29565b60025490915081831115611e1b5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610294565b808311611e905760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610294565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b03163314610df15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610294565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260005403611fc55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610294565b6002600055565b7f000000000000000000000000000000000000000000000000000000000000000083146120425760405162461bcd60e51b8152602060048201526030602482015260008051602061384d83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610294565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146120d75760405162461bcd60e51b8152602060048201526038602482015260008051602061384d83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610294565b6000818060200190518101906120ed919061361c565b9050600061210082602001516001610df3565b9050600082516003811115612117576121176131e6565b0361218a576000826040015180602001905181019061213691906136c0565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a2805161218490836127c2565b50612219565b60018251600381111561219f5761219f6131e6565b036121ca57600082604001518060200190518101906121be919061370c565b9050612184818361287e565b60405162461bcd60e51b8152602060048201526030602482015260008051602061384d83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610294565b5050505050565b6000856122835760405162461bcd60e51b815260206004820152603a602482015260008051602061382d83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610294565b6001600160a01b0385166122ed5760405162461bcd60e51b815260206004820152603b602482015260008051602061382d83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610294565b6122f684611bd5565b93506123028284612f58565b84116123765760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610294565b6123808385612f6b565b935061238b84612a26565b6000612398856000610df3565b9050600081116124105760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610294565b9695505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015612463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124879190612f29565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124c457600080fd5b505af11580156124d8573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015612524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125489190612f29565b90508181116125b65760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b6064820152608401610294565b6125c08282612f6b565b95945050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264e91906137c3565b9050612672816001600160a01b031660009081526001602052604090205460ff1690565b156126d85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610294565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561272e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127529190612f29565b61275c9190612f58565b6040516001600160a01b03851660248201526044810182905290915061104890859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a63565b6005548190801561287457808311156128245760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a16128188183612f6b565b60006005559150612874565b60006128308483612f6b565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600555600091505b6110488483611b53565b60055415612898576128948260600151826127c2565b5050565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156128de57600080fd5b505af11580156128f2573d6000803e3d6000fd5b505050506000826020015160405160240161290d91906137e0565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b179052840151845191925060009161294e9190859085612b3a565b905080156129a25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48460405161299591815260200190565b60405180910390a2611048565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0846040516129e191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612219573d6000803e3d6000fd5b6107816001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001662010203600160981b0183612c11565b6000612ab8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c419092919063ffffffff16565b805190915015612b355780806020019051810190612ad691906137f3565b612b355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610294565b505050565b6000845a1015612b8c5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610294565b83471015612bdc5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610294565b826001600160a01b03163b600003612bf657506000612c09565b600080600084516020860188888bf19150505b949350505050565b6040516001600160a01b038316602482015260448101829052612b3590849063a9059cbb60e01b9060640161278b565b6060612c09848460008585600080866001600160a01b03168587604051612c689190613810565b60006040518083038185875af1925050503d8060008114612ca5576040519150601f19603f3d011682016040523d82523d6000602084013e612caa565b606091505b5091509150612cbb87838387612cc6565b979650505050505050565b60608315612d35578251600003612d2e576001600160a01b0385163b612d2e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610294565b5081612c09565b612c098383815115612d4a5781518083602001fd5b8060405162461bcd60e51b815260040161029491906137e0565b600060c08284031215612d7657600080fd5b50919050565b6001600160a01b038116811461078157600080fd5b80356126d881612d7c565b600060208284031215612dae57600080fd5b8135611d2081612d7c565b600060208284031215612dcb57600080fd5b813567ffffffffffffffff811115612de257600080fd5b82016101208185031215611d2057600080fd5b600060208284031215612e0757600080fd5b5035919050565b801515811461078157600080fd5b60008060408385031215612e2f57600080fd5b823591506020830135612e4181612e0e565b809150509250929050565b60008060008060608587031215612e6257600080fd5b843593506020850135612e7481612d7c565b9250604085013567ffffffffffffffff80821115612e9157600080fd5b818701915087601f830112612ea557600080fd5b813581811115612eb457600080fd5b886020828501011115612ec657600080fd5b95989497505060200194505050565b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b600060208284031215612f3b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e7e57610e7e612f42565b81810381811115610e7e57610e7e612f42565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561300657613006612fcc565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561303557613035612fcc565b604052919050565b600067ffffffffffffffff82111561305757613057612fcc565b50601f01601f191660200190565b600082601f83011261307657600080fd5b81356130896130848261303d565b61300c565b81815284602083860101111561309e57600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156130ce57600080fd5b6130d6612fe2565b823581526130e660208401612d91565b60208201526130f760408401612d91565b6040820152606083013567ffffffffffffffff81111561311657600080fd5b61312236828601613065565b6060830152506080830135608082015260a083013560a082015261314860c08401612d91565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610e7e57610e7e612f42565b6000826131e157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60005b838110156132175781810151838201526020016131ff565b50506000910152565b600081518084526132388160208601602086016131fc565b601f01601f19169290920160200192915050565b60208152600082516004811061327257634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152612c096080840182613220565b602080825260339082015260008051602061382d833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e9082015260008051602061384d83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e08101602084013561333d81612d7c565b6001600160a01b03908116602084015260408501359061335c82612d7c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526133b960a0850182613220565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613427610120850183613220565b9150608085015160a085015260a085015161344d60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161349360608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526134c4610160850183613220565b9150608086015160c085015260a086015160e085015260c08601516101006134f6818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b8381101561354e5781516001600160a01b031687529582019590820190600101613529565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526135ba610100840182613515565b905060a0840151601f198483030160e08501526125c08282613220565b600082601f8301126135e857600080fd5b81516135f66130848261303d565b81815284602083860101111561360b57600080fd5b612c098260208301602087016131fc565b60006020828403121561362e57600080fd5b815167ffffffffffffffff8082111561364657600080fd5b908301906060828603121561365a57600080fd5b60405160608101818110838211171561367557613675612fcc565b60405282516004811061368757600080fd5b8152602083810151908201526040830151828111156136a557600080fd5b6136b1878286016135d7565b60408301525095945050505050565b6000602082840312156136d257600080fd5b6040516020810181811067ffffffffffffffff821117156136f5576136f5612fcc565b604052825161370381612d7c565b81529392505050565b60006020828403121561371e57600080fd5b815167ffffffffffffffff8082111561373657600080fd5b908301906080828603121561374a57600080fd5b60405160808101818110838211171561376557613765612fcc565b604052825161377381612d7c565b815260208301518281111561378757600080fd5b613793878286016135d7565b60208301525060408301516040820152606083015192506137b383612d7c565b6060810192909252509392505050565b6000602082840312156137d557600080fd5b8151611d2081612d7c565b602081526000610e7b6020830184613220565b60006020828403121561380557600080fd5b8151611d2081612e0e565b600082516138228184602087016131fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212209c48bb0675e3e6bc186aa88e48a573a12e08a7dcdc0f53a9a81afcfa833eee7464736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b1938038062004b19833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004af983398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004af983398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004ad983398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004ad983398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613e9c62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613e9c6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b60405161029691906132d6565b3480156102cd57600080fd5b506102e16102dc366004613309565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613335565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b436600461334d565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c61040836600461338e565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ab565b610ac1565b61026c61043b3660046133c4565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e1610492366004613309565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e636600461338e565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ab565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ab565b610f93565b34801561054c57600080fd5b5061028c61055b36600461338e565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d36600461338e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c366004613309565b610fc7565b34801561066d57600080fd5b506102e161067c366004613309565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b336600461340e565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f36600461343e565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e3660046134c7565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db36600461338e565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a906134f5565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906134f5565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b815260040161093790613529565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b31613593565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109919190613593565b905061099d82826135a6565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135b9565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b815260040161093790613529565b61094a610b5d826136f6565b34611d68565b60003361090b818585610b7683836112a9565b610b809190613593565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135b9565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137a4565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135a6565b905060006064610d8a7f0000000000000000000000000000000000000000000000000000000000000000846137e8565b610d9491906137ff565b90506000610da282846135a6565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f319190613837565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a906134f5565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f0000000000000000000000000000000000000000000000000000000000000000846137e8565b9050610911565b6110d87f0000000000000000000000000000000000000000000000000000000000000000846137ff565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190613886565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b29190613593565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137a4565b60026009556000611567606084016040850161338e565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e2783398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b81526004016109379061389f565b61160f82356115ff604085016020860161338e565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d604086016020870161338e565b6001600160a01b0316146116c35760405162461bcd60e51b8152600401610937906138e0565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b604080516060810190915280600081526020018481526020016040518060200160405280876040016020810190611767919061338e565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e2604086016020870161338e565b6001600160a01b0316036118085760405162461bcd60e51b8152600401610937906138e0565b604080516060810190915280600281526020018481526020016040518060a0016040528087600001358152602001876020016020810190611849919061338e565b6001600160a01b031681526020016118676060890160408a0161338e565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561198757611987613607565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f319190613837565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061392b565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137a4565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e2783398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b81526004016109379061389f565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e27833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e4783398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e2783398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b8152600401610937906138e0565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d919061398e565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b8152600401610937906138e0565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a391906139e0565b60405160208183030381529060405281525091508360600151516103e86121ca91906137e8565b6121d79062035b60613593565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561198757611987613607565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613a70565b80600b60008282546122d69190613593565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613b5d565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190613886565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613886565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e4783398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e4783398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c29565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613821565b036128d857600082604001518060200190518101906128849190613ccd565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613821565b03612918576000826040015180602001905181019061290c9190613d19565b90506128d28183612e0c565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e4783398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e2783398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e2783398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a508284613593565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135a6565b9350612ad984612fb0565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613dd0565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf19190613886565b612cfb9190613593565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612fba565b600a5481908015612e025780831115612db25760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612da681836135a6565b6000600a559150612e02565b6000612dbe84836135a6565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e2257610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612e6857600080fd5b505af1158015612e7c573d6000803e3d6000fd5b5050505060008260200151604051602401612e9791906132d6565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ed8919085908561308c565b90508015612f2c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f1f91815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f6b91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b600061300f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131639092919063ffffffff16565b805190915015611d63578080602001905181019061302d9190613ded565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156130de5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b8347101561312e5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b6000036131485750600061315b565b600080600084516020860188888bf19150505b949350505050565b606061315b848460008585600080866001600160a01b0316858760405161318a9190613e0a565b60006040518083038185875af1925050503d80600081146131c7576040519150601f19603f3d011682016040523d82523d6000602084013e6131cc565b606091505b50915091506131dd878383876131e8565b979650505050505050565b60608315613257578251600003613250576001600160a01b0385163b6132505760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161315b565b61315b838381511561326c5781518083602001fd5b8060405162461bcd60e51b815260040161093791906132d6565b60005b838110156132a1578181015183820152602001613289565b50506000910152565b600081518084526132c2816020860160208601613286565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132aa565b6001600160a01b038116811461094a57600080fd5b8035612c77816132e9565b6000806040838503121561331c57600080fd5b8235613327816132e9565b946020939093013593505050565b600060c0828403121561334757600080fd5b50919050565b60008060006060848603121561336257600080fd5b833561336d816132e9565b9250602084013561337d816132e9565b929592945050506040919091013590565b6000602082840312156133a057600080fd5b81356110d8816132e9565b6000602082840312156133bd57600080fd5b5035919050565b6000602082840312156133d657600080fd5b813567ffffffffffffffff8111156133ed57600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561342157600080fd5b82359150602083013561343381613400565b809150509250929050565b6000806000806060858703121561345457600080fd5b843593506020850135613466816132e9565b9250604085013567ffffffffffffffff8082111561348357600080fd5b818701915087601f83011261349757600080fd5b8135818111156134a657600080fd5b8860208285010111156134b857600080fd5b95989497505060200194505050565b600080604083850312156134da57600080fd5b82356134e5816132e9565b91506020830135613433816132e9565b600181811c9082168061350957607f821691505b60208210810361334757634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109115761091161357d565b818103818111156109115761091161357d565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561364157613641613607565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561367057613670613607565b604052919050565b600067ffffffffffffffff82111561369257613692613607565b50601f01601f191660200190565b600082601f8301126136b157600080fd5b81356136c46136bf82613678565b613647565b8181528460208386010111156136d957600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561370957600080fd5b61371161361d565b82358152613721602084016132fe565b6020820152613732604084016132fe565b6040820152606083013567ffffffffffffffff81111561375157600080fd5b61375d368286016136a0565b6060830152506080830135608082015260a083013560a082015261378360c084016132fe565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b80820281158282048414176109115761091161357d565b60008261381c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061385d57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261315b60808401826132aa565b60006020828403121561389857600080fd5b5051919050565b6020808252603390820152600080516020613e27833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e4783398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613941816132e9565b6001600160a01b039081166020840152604085013590613960826132e9565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139bd60a08501826132aa565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a2b6101208501836132aa565b9150608085015160a085015260a0850151613a5160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613a9760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613ac86101608501836132aa565b9150608086015160c085015260a086015160e085015260c0860151610100613afa818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b525781516001600160a01b031687529582019590820190600101613b2d565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bbe610100840182613b19565b905060a0840151601f198483030160e0850152613bdb82826132aa565b95945050505050565b600082601f830112613bf557600080fd5b8151613c036136bf82613678565b818152846020838601011115613c1857600080fd5b61315b826020830160208701613286565b600060208284031215613c3b57600080fd5b815167ffffffffffffffff80821115613c5357600080fd5b9083019060608286031215613c6757600080fd5b604051606081018181108382111715613c8257613c82613607565b604052825160048110613c9457600080fd5b815260208381015190820152604083015182811115613cb257600080fd5b613cbe87828601613be4565b60408301525095945050505050565b600060208284031215613cdf57600080fd5b6040516020810181811067ffffffffffffffff82111715613d0257613d02613607565b6040528251613d10816132e9565b81529392505050565b600060208284031215613d2b57600080fd5b815167ffffffffffffffff80821115613d4357600080fd5b9083019060808286031215613d5757600080fd5b604051608081018181108382111715613d7257613d72613607565b6040528251613d80816132e9565b8152602083015182811115613d9457600080fd5b613da087828601613be4565b6020830152506040830151604082015260608301519250613dc0836132e9565b6060810192909252509392505050565b600060208284031215613de257600080fd5b81516110d8816132e9565b600060208284031215613dff57600080fd5b81516110d881613400565b60008251613e1c818460208701613286565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212200261b151f7c8d94b552b7e987cfbede9450d12ea5bc8709d20c0251221dd5efc64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. @@ -67,7 +80,7 @@ var NativeTokenDestinationABI = NativeTokenDestinationMetaData.ABI var NativeTokenDestinationBin = NativeTokenDestinationMetaData.Bin // DeployNativeTokenDestination deploys a new Ethereum contract, binding an instance of NativeTokenDestination to it. -func DeployNativeTokenDestination(auth *bind.TransactOpts, backend bind.ContractBackend, teleporterRegistryAddress common.Address, teleporterManager common.Address, sourceBlockchainID_ [32]byte, tokenSourceAddress_ common.Address, feeTokenAddress_ common.Address, initialReserveImbalance_ *big.Int, decimalsShift uint8, multiplyOnReceive_ bool, burnedFeesReportingRewardPercentage_ *big.Int) (common.Address, *types.Transaction, *NativeTokenDestination, error) { +func DeployNativeTokenDestination(auth *bind.TransactOpts, backend bind.ContractBackend, settings NativeTokenDestinationSettings) (common.Address, *types.Transaction, *NativeTokenDestination, error) { parsed, err := NativeTokenDestinationMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -76,7 +89,7 @@ func DeployNativeTokenDestination(auth *bind.TransactOpts, backend bind.Contract return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NativeTokenDestinationBin), backend, teleporterRegistryAddress, teleporterManager, sourceBlockchainID_, tokenSourceAddress_, feeTokenAddress_, initialReserveImbalance_, decimalsShift, multiplyOnReceive_, burnedFeesReportingRewardPercentage_) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NativeTokenDestinationBin), backend, settings) if err != nil { return common.Address{}, nil, nil, err } @@ -256,37 +269,6 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BURNEDTXFEES return _NativeTokenDestination.Contract.BURNEDTXFEESADDRESS(&_NativeTokenDestination.CallOpts) } -// BURNFORTRANSFERADDRESS is a free data retrieval call binding the contract method 0xa2a95017. -// -// Solidity: function BURN_FOR_TRANSFER_ADDRESS() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCaller) BURNFORTRANSFERADDRESS(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "BURN_FOR_TRANSFER_ADDRESS") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BURNFORTRANSFERADDRESS is a free data retrieval call binding the contract method 0xa2a95017. -// -// Solidity: function BURN_FOR_TRANSFER_ADDRESS() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationSession) BURNFORTRANSFERADDRESS() (common.Address, error) { - return _NativeTokenDestination.Contract.BURNFORTRANSFERADDRESS(&_NativeTokenDestination.CallOpts) -} - -// BURNFORTRANSFERADDRESS is a free data retrieval call binding the contract method 0xa2a95017. -// -// Solidity: function BURN_FOR_TRANSFER_ADDRESS() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BURNFORTRANSFERADDRESS() (common.Address, error) { - return _NativeTokenDestination.Contract.BURNFORTRANSFERADDRESS(&_NativeTokenDestination.CallOpts) -} - // MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. // // Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) @@ -411,6 +393,68 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) SOURCECHAINB return _NativeTokenDestination.Contract.SOURCECHAINBURNADDRESS(&_NativeTokenDestination.CallOpts) } +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _NativeTokenDestination.Contract.Allowance(&_NativeTokenDestination.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _NativeTokenDestination.Contract.Allowance(&_NativeTokenDestination.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationSession) BalanceOf(account common.Address) (*big.Int, error) { + return _NativeTokenDestination.Contract.BalanceOf(&_NativeTokenDestination.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _NativeTokenDestination.Contract.BalanceOf(&_NativeTokenDestination.CallOpts, account) +} + // BlockchainID is a free data retrieval call binding the contract method 0xd127dc9b. // // Solidity: function blockchainID() view returns(bytes32) @@ -504,35 +548,35 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) CurrentReser return _NativeTokenDestination.Contract.CurrentReserveImbalance(&_NativeTokenDestination.CallOpts) } -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. +// Decimals is a free data retrieval call binding the contract method 0x313ce567. // -// Solidity: function feeTokenAddress() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCaller) FeeTokenAddress(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function decimals() view returns(uint8) +func (_NativeTokenDestination *NativeTokenDestinationCaller) Decimals(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "feeTokenAddress") + err := _NativeTokenDestination.contract.Call(opts, &out, "decimals") if err != nil { - return *new(common.Address), err + return *new(uint8), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) return out0, err } -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. +// Decimals is a free data retrieval call binding the contract method 0x313ce567. // -// Solidity: function feeTokenAddress() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationSession) FeeTokenAddress() (common.Address, error) { - return _NativeTokenDestination.Contract.FeeTokenAddress(&_NativeTokenDestination.CallOpts) +// Solidity: function decimals() view returns(uint8) +func (_NativeTokenDestination *NativeTokenDestinationSession) Decimals() (uint8, error) { + return _NativeTokenDestination.Contract.Decimals(&_NativeTokenDestination.CallOpts) } -// FeeTokenAddress is a free data retrieval call binding the contract method 0xb8df0dea. +// Decimals is a free data retrieval call binding the contract method 0x313ce567. // -// Solidity: function feeTokenAddress() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCallerSession) FeeTokenAddress() (common.Address, error) { - return _NativeTokenDestination.Contract.FeeTokenAddress(&_NativeTokenDestination.CallOpts) +// Solidity: function decimals() view returns(uint8) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) Decimals() (uint8, error) { + return _NativeTokenDestination.Contract.Decimals(&_NativeTokenDestination.CallOpts) } // GetMinTeleporterVersion is a free data retrieval call binding the contract method 0xd2cc7a70. @@ -721,6 +765,37 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) MultiplyOnRe return _NativeTokenDestination.Contract.MultiplyOnReceive(&_NativeTokenDestination.CallOpts) } +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationSession) Name() (string, error) { + return _NativeTokenDestination.Contract.Name(&_NativeTokenDestination.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) Name() (string, error) { + return _NativeTokenDestination.Contract.Name(&_NativeTokenDestination.CallOpts) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -814,43 +889,43 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) SourceBlockc return _NativeTokenDestination.Contract.SourceBlockchainID(&_NativeTokenDestination.CallOpts) } -// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. // -// Solidity: function teleporterRegistry() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCaller) TeleporterRegistry(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function symbol() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationCaller) Symbol(opts *bind.CallOpts) (string, error) { var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "teleporterRegistry") + err := _NativeTokenDestination.contract.Call(opts, &out, "symbol") if err != nil { - return *new(common.Address), err + return *new(string), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(string)).(*string) return out0, err } -// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. // -// Solidity: function teleporterRegistry() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationSession) TeleporterRegistry() (common.Address, error) { - return _NativeTokenDestination.Contract.TeleporterRegistry(&_NativeTokenDestination.CallOpts) +// Solidity: function symbol() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationSession) Symbol() (string, error) { + return _NativeTokenDestination.Contract.Symbol(&_NativeTokenDestination.CallOpts) } -// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. // -// Solidity: function teleporterRegistry() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCallerSession) TeleporterRegistry() (common.Address, error) { - return _NativeTokenDestination.Contract.TeleporterRegistry(&_NativeTokenDestination.CallOpts) +// Solidity: function symbol() view returns(string) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) Symbol() (string, error) { + return _NativeTokenDestination.Contract.Symbol(&_NativeTokenDestination.CallOpts) } -// Token is a free data retrieval call binding the contract method 0xfc0c546a. +// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. // -// Solidity: function token() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCaller) Token(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function teleporterRegistry() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationCaller) TeleporterRegistry(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "token") + err := _NativeTokenDestination.contract.Call(opts, &out, "teleporterRegistry") if err != nil { return *new(common.Address), err @@ -862,18 +937,18 @@ func (_NativeTokenDestination *NativeTokenDestinationCaller) Token(opts *bind.Ca } -// Token is a free data retrieval call binding the contract method 0xfc0c546a. +// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. // -// Solidity: function token() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationSession) Token() (common.Address, error) { - return _NativeTokenDestination.Contract.Token(&_NativeTokenDestination.CallOpts) +// Solidity: function teleporterRegistry() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationSession) TeleporterRegistry() (common.Address, error) { + return _NativeTokenDestination.Contract.TeleporterRegistry(&_NativeTokenDestination.CallOpts) } -// Token is a free data retrieval call binding the contract method 0xfc0c546a. +// TeleporterRegistry is a free data retrieval call binding the contract method 0x1a7f5bec. // -// Solidity: function token() view returns(address) -func (_NativeTokenDestination *NativeTokenDestinationCallerSession) Token() (common.Address, error) { - return _NativeTokenDestination.Contract.Token(&_NativeTokenDestination.CallOpts) +// Solidity: function teleporterRegistry() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) TeleporterRegistry() (common.Address, error) { + return _NativeTokenDestination.Contract.TeleporterRegistry(&_NativeTokenDestination.CallOpts) } // TokenMultiplier is a free data retrieval call binding the contract method 0xba3f5a12. @@ -1000,6 +1075,90 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) TotalSupply( return _NativeTokenDestination.Contract.TotalSupply(&_NativeTokenDestination.CallOpts) } +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Approve(&_NativeTokenDestination.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Approve(&_NativeTokenDestination.TransactOpts, spender, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.DecreaseAllowance(&_NativeTokenDestination.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.DecreaseAllowance(&_NativeTokenDestination.TransactOpts, spender, subtractedValue) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "deposit") +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationSession) Deposit() (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Deposit(&_NativeTokenDestination.TransactOpts) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Deposit() (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Deposit(&_NativeTokenDestination.TransactOpts) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.IncreaseAllowance(&_NativeTokenDestination.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.IncreaseAllowance(&_NativeTokenDestination.TransactOpts, spender, addedValue) +} + // PauseTeleporterAddress is a paid mutator transaction binding the contract method 0x2b0d8f18. // // Solidity: function pauseTeleporterAddress(address teleporterAddress) returns() @@ -1126,6 +1285,48 @@ func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) SendAndC return _NativeTokenDestination.Contract.SendAndCall(&_NativeTokenDestination.TransactOpts, input) } +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Transfer(&_NativeTokenDestination.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Transfer(&_NativeTokenDestination.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.TransferFrom(&_NativeTokenDestination.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.TransferFrom(&_NativeTokenDestination.TransactOpts, from, to, amount) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1189,6 +1390,48 @@ func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) UpdateMi return _NativeTokenDestination.Contract.UpdateMinTeleporterVersion(&_NativeTokenDestination.TransactOpts, version) } +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactor) Withdraw(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.contract.Transact(opts, "withdraw", amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_NativeTokenDestination *NativeTokenDestinationSession) Withdraw(amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Withdraw(&_NativeTokenDestination.TransactOpts, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Withdraw(amount *big.Int) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Withdraw(&_NativeTokenDestination.TransactOpts, amount) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _NativeTokenDestination.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Fallback(&_NativeTokenDestination.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _NativeTokenDestination.Contract.Fallback(&_NativeTokenDestination.TransactOpts, calldata) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -1210,9 +1453,9 @@ func (_NativeTokenDestination *NativeTokenDestinationTransactorSession) Receive( return _NativeTokenDestination.Contract.Receive(&_NativeTokenDestination.TransactOpts) } -// NativeTokenDestinationCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the NativeTokenDestination contract. -type NativeTokenDestinationCallFailedIterator struct { - Event *NativeTokenDestinationCallFailed // Event containing the contract specifics and raw log +// NativeTokenDestinationApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the NativeTokenDestination contract. +type NativeTokenDestinationApprovalIterator struct { + Event *NativeTokenDestinationApproval // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1226,7 +1469,7 @@ type NativeTokenDestinationCallFailedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *NativeTokenDestinationCallFailedIterator) Next() bool { +func (it *NativeTokenDestinationApprovalIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1235,7 +1478,7 @@ func (it *NativeTokenDestinationCallFailedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenDestinationCallFailed) + it.Event = new(NativeTokenDestinationApproval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1250,7 +1493,7 @@ func (it *NativeTokenDestinationCallFailedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenDestinationCallFailed) + it.Event = new(NativeTokenDestinationApproval) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1266,52 +1509,61 @@ func (it *NativeTokenDestinationCallFailedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenDestinationCallFailedIterator) Error() error { +func (it *NativeTokenDestinationApprovalIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenDestinationCallFailedIterator) Close() error { +func (it *NativeTokenDestinationApprovalIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenDestinationCallFailed represents a CallFailed event raised by the NativeTokenDestination contract. -type NativeTokenDestinationCallFailed struct { - RecipientContract common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos +// NativeTokenDestinationApproval represents a Approval event raised by the NativeTokenDestination contract. +type NativeTokenDestinationApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterCallFailed is a free log retrieval operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. // -// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterCallFailed(opts *bind.FilterOpts, recipientContract []common.Address) (*NativeTokenDestinationCallFailedIterator, error) { +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*NativeTokenDestinationApprovalIterator, error) { - var recipientContractRule []interface{} - for _, recipientContractItem := range recipientContract { - recipientContractRule = append(recipientContractRule, recipientContractItem) + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) } - logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "CallFailed", recipientContractRule) + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) if err != nil { return nil, err } - return &NativeTokenDestinationCallFailedIterator{contract: _NativeTokenDestination.contract, event: "CallFailed", logs: logs, sub: sub}, nil + return &NativeTokenDestinationApprovalIterator{contract: _NativeTokenDestination.contract, event: "Approval", logs: logs, sub: sub}, nil } -// WatchCallFailed is a free log subscription operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. // -// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationCallFailed, recipientContract []common.Address) (event.Subscription, error) { +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { - var recipientContractRule []interface{} - for _, recipientContractItem := range recipientContract { - recipientContractRule = append(recipientContractRule, recipientContractItem) + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) } - logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "CallFailed", recipientContractRule) + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) if err != nil { return nil, err } @@ -1321,8 +1573,8 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallFailed(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenDestinationCallFailed) - if err := _NativeTokenDestination.contract.UnpackLog(event, "CallFailed", log); err != nil { + event := new(NativeTokenDestinationApproval) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Approval", log); err != nil { return err } event.Raw = log @@ -1343,21 +1595,21 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallFailed(o }), nil } -// ParseCallFailed is a log parse operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. // -// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseCallFailed(log types.Log) (*NativeTokenDestinationCallFailed, error) { - event := new(NativeTokenDestinationCallFailed) - if err := _NativeTokenDestination.contract.UnpackLog(event, "CallFailed", log); err != nil { +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseApproval(log types.Log) (*NativeTokenDestinationApproval, error) { + event := new(NativeTokenDestinationApproval) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Approval", log); err != nil { return nil, err } event.Raw = log return event, nil } -// NativeTokenDestinationCallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the NativeTokenDestination contract. -type NativeTokenDestinationCallSucceededIterator struct { - Event *NativeTokenDestinationCallSucceeded // Event containing the contract specifics and raw log +// NativeTokenDestinationCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the NativeTokenDestination contract. +type NativeTokenDestinationCallFailedIterator struct { + Event *NativeTokenDestinationCallFailed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1371,7 +1623,7 @@ type NativeTokenDestinationCallSucceededIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *NativeTokenDestinationCallSucceededIterator) Next() bool { +func (it *NativeTokenDestinationCallFailedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1380,7 +1632,7 @@ func (it *NativeTokenDestinationCallSucceededIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(NativeTokenDestinationCallSucceeded) + it.Event = new(NativeTokenDestinationCallFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1395,7 +1647,7 @@ func (it *NativeTokenDestinationCallSucceededIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(NativeTokenDestinationCallSucceeded) + it.Event = new(NativeTokenDestinationCallFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1411,52 +1663,52 @@ func (it *NativeTokenDestinationCallSucceededIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *NativeTokenDestinationCallSucceededIterator) Error() error { +func (it *NativeTokenDestinationCallFailedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *NativeTokenDestinationCallSucceededIterator) Close() error { +func (it *NativeTokenDestinationCallFailedIterator) Close() error { it.sub.Unsubscribe() return nil } -// NativeTokenDestinationCallSucceeded represents a CallSucceeded event raised by the NativeTokenDestination contract. -type NativeTokenDestinationCallSucceeded struct { +// NativeTokenDestinationCallFailed represents a CallFailed event raised by the NativeTokenDestination contract. +type NativeTokenDestinationCallFailed struct { RecipientContract common.Address Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. +// FilterCallFailed is a free log retrieval operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. // -// Solidity: event CallSucceeded(address indexed recipientContract, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterCallSucceeded(opts *bind.FilterOpts, recipientContract []common.Address) (*NativeTokenDestinationCallSucceededIterator, error) { +// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterCallFailed(opts *bind.FilterOpts, recipientContract []common.Address) (*NativeTokenDestinationCallFailedIterator, error) { var recipientContractRule []interface{} for _, recipientContractItem := range recipientContract { recipientContractRule = append(recipientContractRule, recipientContractItem) } - logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "CallSucceeded", recipientContractRule) + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "CallFailed", recipientContractRule) if err != nil { return nil, err } - return &NativeTokenDestinationCallSucceededIterator{contract: _NativeTokenDestination.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil + return &NativeTokenDestinationCallFailedIterator{contract: _NativeTokenDestination.contract, event: "CallFailed", logs: logs, sub: sub}, nil } -// WatchCallSucceeded is a free log subscription operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. +// WatchCallFailed is a free log subscription operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. // -// Solidity: event CallSucceeded(address indexed recipientContract, uint256 amount) -func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationCallSucceeded, recipientContract []common.Address) (event.Subscription, error) { +// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationCallFailed, recipientContract []common.Address) (event.Subscription, error) { var recipientContractRule []interface{} for _, recipientContractItem := range recipientContract { recipientContractRule = append(recipientContractRule, recipientContractItem) } - logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "CallSucceeded", recipientContractRule) + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "CallFailed", recipientContractRule) if err != nil { return nil, err } @@ -1466,8 +1718,8 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallSucceede select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(NativeTokenDestinationCallSucceeded) - if err := _NativeTokenDestination.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + event := new(NativeTokenDestinationCallFailed) + if err := _NativeTokenDestination.contract.UnpackLog(event, "CallFailed", log); err != nil { return err } event.Raw = log @@ -1488,7 +1740,152 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallSucceede }), nil } -// ParseCallSucceeded is a log parse operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. +// ParseCallFailed is a log parse operation binding the contract event 0xb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0. +// +// Solidity: event CallFailed(address indexed recipientContract, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseCallFailed(log types.Log) (*NativeTokenDestinationCallFailed, error) { + event := new(NativeTokenDestinationCallFailed) + if err := _NativeTokenDestination.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// NativeTokenDestinationCallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the NativeTokenDestination contract. +type NativeTokenDestinationCallSucceededIterator struct { + Event *NativeTokenDestinationCallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenDestinationCallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenDestinationCallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenDestinationCallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenDestinationCallSucceeded represents a CallSucceeded event raised by the NativeTokenDestination contract. +type NativeTokenDestinationCallSucceeded struct { + RecipientContract common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. +// +// Solidity: event CallSucceeded(address indexed recipientContract, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterCallSucceeded(opts *bind.FilterOpts, recipientContract []common.Address) (*NativeTokenDestinationCallSucceededIterator, error) { + + var recipientContractRule []interface{} + for _, recipientContractItem := range recipientContract { + recipientContractRule = append(recipientContractRule, recipientContractItem) + } + + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "CallSucceeded", recipientContractRule) + if err != nil { + return nil, err + } + return &NativeTokenDestinationCallSucceededIterator{contract: _NativeTokenDestination.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. +// +// Solidity: event CallSucceeded(address indexed recipientContract, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationCallSucceeded, recipientContract []common.Address) (event.Subscription, error) { + + var recipientContractRule []interface{} + for _, recipientContractItem := range recipientContract { + recipientContractRule = append(recipientContractRule, recipientContractItem) + } + + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "CallSucceeded", recipientContractRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenDestinationCallSucceeded) + if err := _NativeTokenDestination.contract.UnpackLog(event, "CallSucceeded", 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 +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4. // // Solidity: event CallSucceeded(address indexed recipientContract, uint256 amount) func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseCallSucceeded(log types.Log) (*NativeTokenDestinationCallSucceeded, error) { @@ -1635,6 +2032,151 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseCollateralAd return event, nil } +// NativeTokenDestinationDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the NativeTokenDestination contract. +type NativeTokenDestinationDepositIterator struct { + Event *NativeTokenDestinationDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenDestinationDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenDestinationDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenDestinationDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenDestinationDeposit represents a Deposit event raised by the NativeTokenDestination contract. +type NativeTokenDestinationDeposit struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterDeposit(opts *bind.FilterOpts, sender []common.Address) (*NativeTokenDestinationDepositIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "Deposit", senderRule) + if err != nil { + return nil, err + } + return &NativeTokenDestinationDepositIterator{contract: _NativeTokenDestination.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationDeposit, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "Deposit", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenDestinationDeposit) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Deposit", 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 +} + +// ParseDeposit is a log parse operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseDeposit(log types.Log) (*NativeTokenDestinationDeposit, error) { + event := new(NativeTokenDestinationDeposit) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // NativeTokenDestinationMinTeleporterVersionUpdatedIterator is returned from FilterMinTeleporterVersionUpdated and is used to iterate over the raw logs and unpacked data for MinTeleporterVersionUpdated events raised by the NativeTokenDestination contract. type NativeTokenDestinationMinTeleporterVersionUpdatedIterator struct { Event *NativeTokenDestinationMinTeleporterVersionUpdated // Event containing the contract specifics and raw log @@ -2828,3 +3370,302 @@ func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseTokensWithdr event.Raw = log return event, nil } + +// NativeTokenDestinationTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the NativeTokenDestination contract. +type NativeTokenDestinationTransferIterator struct { + Event *NativeTokenDestinationTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenDestinationTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenDestinationTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenDestinationTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenDestinationTransfer represents a Transfer event raised by the NativeTokenDestination contract. +type NativeTokenDestinationTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*NativeTokenDestinationTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &NativeTokenDestinationTransferIterator{contract: _NativeTokenDestination.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenDestinationTransfer) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseTransfer(log types.Log) (*NativeTokenDestinationTransfer, error) { + event := new(NativeTokenDestinationTransfer) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// NativeTokenDestinationWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the NativeTokenDestination contract. +type NativeTokenDestinationWithdrawalIterator struct { + Event *NativeTokenDestinationWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenDestinationWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenDestinationWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenDestinationWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenDestinationWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenDestinationWithdrawal represents a Withdrawal event raised by the NativeTokenDestination contract. +type NativeTokenDestinationWithdrawal struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) FilterWithdrawal(opts *bind.FilterOpts, sender []common.Address) (*NativeTokenDestinationWithdrawalIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _NativeTokenDestination.contract.FilterLogs(opts, "Withdrawal", senderRule) + if err != nil { + return nil, err + } + return &NativeTokenDestinationWithdrawalIterator{contract: _NativeTokenDestination.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *NativeTokenDestinationWithdrawal, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _NativeTokenDestination.contract.WatchLogs(opts, "Withdrawal", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenDestinationWithdrawal) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Withdrawal", 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 +} + +// ParseWithdrawal is a log parse operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed sender, uint256 amount) +func (_NativeTokenDestination *NativeTokenDestinationFilterer) ParseWithdrawal(log types.Log) (*NativeTokenDestinationWithdrawal, error) { + event := new(NativeTokenDestinationWithdrawal) + if err := _NativeTokenDestination.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/src/ERC20Destination.sol b/contracts/src/ERC20Destination.sol index 56b4d39c1..7774e0377 100644 --- a/contracts/src/ERC20Destination.sol +++ b/contracts/src/ERC20Destination.sol @@ -8,7 +8,6 @@ pragma solidity 0.8.18; import {TeleporterTokenDestination} from "./TeleporterTokenDestination.sol"; import {IERC20Bridge} from "./interfaces/IERC20Bridge.sol"; import {IERC20SendAndCallReceiver} from "./interfaces/IERC20SendAndCallReceiver.sol"; -import {SafeERC20TransferFrom} from "@teleporter/SafeERC20TransferFrom.sol"; import {IERC20, ERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/ERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/utils/SafeERC20.sol"; import { @@ -54,7 +53,6 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { teleporterManager, sourceBlockchainID_, tokenSourceAddress_, - address(this), 0, false ) @@ -90,9 +88,15 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { /** * @dev See {TeleporterTokenDestination-_deposit} + * + * Note: The amount returned must be the amount credited as a result of the transfer. + * For a standard ERC20 implementation such as this contract, that is equal to the full amount given. + * For fee/burn on transfer tokens, that amount could be less. */ function _deposit(uint256 amount) internal override returns (uint256) { - return SafeERC20TransferFrom.safeTransferFrom(this, amount); + _spendAllowance(msg.sender, address(this), amount); + _transfer(msg.sender, address(this), amount); + return amount; } /** diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index 79b23f804..ba42f1dfe 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -27,8 +27,8 @@ import { SingleHopSendMessage, SingleHopCallMessage } from "./interfaces/ITeleporterTokenBridge.sol"; -import {SafeWrappedNativeTokenDeposit} from "./utils/SafeWrappedNativeTokenDeposit.sol"; -import {SafeERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/utils/SafeERC20.sol"; +import {ERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/ERC20.sol"; +import {IERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/IERC20.sol"; import {SendReentrancyGuard} from "./utils/SendReentrancyGuard.sol"; import {CallUtils} from "./utils/CallUtils.sol"; @@ -37,6 +37,18 @@ import {CallUtils} from "./utils/CallUtils.sol"; * DO NOT USE THIS CODE IN PRODUCTION. */ +struct NativeTokenDestinationSettings { + string symbol; + address teleporterRegistryAddress; + address teleporterManager; + bytes32 sourceBlockchainID; + address tokenSourceAddress; + uint256 initialReserveImbalance; + uint8 decimalsShift; + bool multiplyOnReceive; + uint256 burnedFeesReportingRewardPercentage; +} + /** * @notice Implementation of the {INativeTokenDestination} interface. * @@ -45,13 +57,13 @@ import {CallUtils} from "./utils/CallUtils.sol"; * It mints and burns native tokens on the destination chain corresponding to locks and unlocks on the source chain. */ contract NativeTokenDestination is + ERC20, TeleporterOwnerUpgradeable, INativeTokenDestination, SendReentrancyGuard, - TeleporterTokenDestination + TeleporterTokenDestination, + IWrappedNativeToken { - using SafeERC20 for IWrappedNativeToken; - /** * @notice The address where the burned transaction fees are credited. * @@ -62,16 +74,6 @@ contract NativeTokenDestination is */ address public constant BURNED_TX_FEES_ADDRESS = 0x0100000000000000000000000000000000000000; - /** - * @notice Address used by this contract to blackhole funds, effectively burning them. - * - * @dev Native tokens are burned by this contract by sending them to this address when transferring tokens back to - * the source chain. Different from BURNED_TX_FEES_ADDRESS so that the total amount burned in transaction fees and - * the total amount burned to be sent back to the source chain can be tracked separately. - * This address was chosen arbitrarily. - */ - address public constant BURN_FOR_TRANSFER_ADDRESS = 0x0100000000000000000000000000000000010203; - /** * @notice Address used by the source chain to blackhole funds, effectively burning them. * @@ -117,62 +119,43 @@ contract NativeTokenDestination is */ uint256 public lastestBurnedFeesReported; - /** - * @notice The wrapped native token contract that represents the native tokens on this chain. - */ - IWrappedNativeToken public immutable token; - modifier onlyWhenCollateralized() { require(_isCollateralized(), "NativeTokenDestination: contract undercollateralized"); _; } - constructor( - address teleporterRegistryAddress, - address teleporterManager, - bytes32 sourceBlockchainID_, - address tokenSourceAddress_, - address feeTokenAddress_, - uint256 initialReserveImbalance_, - uint8 decimalsShift, - bool multiplyOnReceive_, - uint256 burnedFeesReportingRewardPercentage_ - ) + constructor(NativeTokenDestinationSettings memory settings) + ERC20(string.concat("Wrapped ", settings.symbol), settings.symbol) TeleporterTokenDestination( - teleporterRegistryAddress, - teleporterManager, - sourceBlockchainID_, - tokenSourceAddress_, - feeTokenAddress_, - decimalsShift, - multiplyOnReceive_ + settings.teleporterRegistryAddress, + settings.teleporterManager, + settings.sourceBlockchainID, + settings.tokenSourceAddress, + settings.decimalsShift, + settings.multiplyOnReceive ) { - token = IWrappedNativeToken(feeTokenAddress); - require( - initialReserveImbalance_ != 0, "NativeTokenDestination: zero initial reserve imbalance" + settings.initialReserveImbalance != 0, + "NativeTokenDestination: zero initial reserve imbalance" ); - initialReserveImbalance = initialReserveImbalance_; - currentReserveImbalance = initialReserveImbalance_; + initialReserveImbalance = settings.initialReserveImbalance; + currentReserveImbalance = settings.initialReserveImbalance; require( - burnedFeesReportingRewardPercentage_ < 100, "NativeTokenDestination: invalid percentage" + settings.burnedFeesReportingRewardPercentage < 100, + "NativeTokenDestination: invalid percentage" ); - burnedFeesReportingRewardPercentage = burnedFeesReportingRewardPercentage_; + burnedFeesReportingRewardPercentage = settings.burnedFeesReportingRewardPercentage; } - /** - * @notice Receives native tokens transferred to this contract without calldata. - * @dev This function is called when the token bridge is withdrawing native tokens to - * transfer to the recipient. Only the wrapped native token contract is allowed to call - * this function to prevent accidental loss of funds from other accounts. - */ receive() external payable { - require( - msg.sender == feeTokenAddress, "NativeTokenDestination: invalid receive payable sender" - ); + deposit(); + } + + fallback() external payable { + deposit(); } /** @@ -205,7 +188,7 @@ contract NativeTokenDestination is lastestBurnedFeesReported = burnAddressBalance; if (reward > 0) { - _mint(address(this), reward); + _mintNativeCoin(address(this), reward); _deposit(reward); } @@ -222,7 +205,7 @@ contract NativeTokenDestination is TeleporterMessageInput({ destinationBlockchainID: sourceBlockchainID, destinationAddress: tokenSourceAddress, - feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: reward}), + feeInfo: TeleporterFeeInfo({feeTokenAddress: address(this), amount: reward}), requiredGasLimit: requiredGasLimit, allowedRelayerAddresses: new address[](0), message: abi.encode(message) @@ -239,21 +222,51 @@ contract NativeTokenDestination is return _isCollateralized(); } + /** + * @dev See {IWrappedNativeToken-deposit}. + */ + function deposit() public payable { + _mint(msg.sender, msg.value); + emit Deposit(msg.sender, msg.value); + } + + /** + * @dev See {IWrappedNativeToken-withdraw}. + */ + function withdraw(uint256 amount) public { + _burn(msg.sender, amount); + emit Withdrawal(msg.sender, amount); + payable(msg.sender).transfer(amount); + } + /** * @dev See {INativeTokenDestination-totalSupply}. + * This implementation overrides the default ERC20 implementation. It provides the total + * supply of the native token, accounting for burned fees and tokens burnt to be transfered + * out to other chains. Native tokens transfered out to other chains are left locked in this + * contract forever, as the native minter precompile does not offer a "burnNativeCoin" interface. */ - function totalSupply() external view returns (uint256) { - uint256 burned = BURNED_TX_FEES_ADDRESS.balance + token.balanceOf(BURN_FOR_TRANSFER_ADDRESS); + function totalSupply() + public + view + override (ERC20, IERC20, INativeTokenDestination) + returns (uint256) + { + uint256 burned = BURNED_TX_FEES_ADDRESS.balance + address(this).balance; uint256 created = totalMinted + initialReserveImbalance; - return created - burned; } /** * @dev See {TeleporterTokenDestination-_deposit} + * + * Native tokens to be deposited are sent via the payable {send} and {sendAndCall} functions, and + * remained locked in this contract. The full amount is credited as an ERC20 balance to this contract + * such that it can be used to pay for message fees if needed. */ function _deposit(uint256 amount) internal override returns (uint256) { - return SafeWrappedNativeTokenDeposit.safeDeposit(token, amount); + _mint(address(this), amount); + return amount; } /** @@ -278,16 +291,18 @@ contract NativeTokenDestination is } } - // Call {_mint} even if the adjustedAmount is 0 to improve traceability. - _mint(recipient, adjustedAmount); + // Call {_mintNativeCoin} even if the adjustedAmount is 0 to improve traceability. + _mintNativeCoin(recipient, adjustedAmount); } /** * @dev See {TeleporterTokenDestination-_burn} + * + * The ERC20 representation of the native token is burnt by reducing the balance of this contract. + * */ function _burn(uint256 amount) internal override { - // Burn native token by transferring to BURN_FOR_TRANSFER_ADDRESS - token.safeTransfer(BURN_FOR_TRANSFER_ADDRESS, amount); + _burn(address(this), amount); } /** @@ -346,7 +361,7 @@ contract NativeTokenDestination is /** * @dev Mints coins to the recipient through the NativeMinter precompile. */ - function _mint(address recipient, uint256 amount) private { + function _mintNativeCoin(address recipient, uint256 amount) private { totalMinted += amount; // Calls NativeMinter precompile through INativeMinter interface. NATIVE_MINTER.mintNativeCoin(recipient, amount); diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index 864f3bc31..eb0a91ec4 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -45,8 +45,6 @@ abstract contract TeleporterTokenDestination is bytes32 public immutable sourceBlockchainID; /// @notice The address of the source token bridge instance this contract receives tokens from. address public immutable tokenSourceAddress; - /// @notice The ERC20 token this contract uses to pay for Teleporter fees. - address public immutable feeTokenAddress; /** * @notice tokenMultiplier allows this contract to scale the number of tokens it sends/receives to/from @@ -89,7 +87,6 @@ abstract contract TeleporterTokenDestination is address teleporterManager, bytes32 sourceBlockchainID_, address tokenSourceAddress_, - address feeTokenAddress_, uint8 decimalsShift, bool multiplyOnReceive_ ) TeleporterOwnerUpgradeable(teleporterRegistryAddress, teleporterManager) { @@ -106,13 +103,9 @@ abstract contract TeleporterTokenDestination is tokenSourceAddress_ != address(0), "TeleporterTokenDestination: zero token source address" ); - require( - feeTokenAddress_ != address(0), "TeleporterTokenDestination: zero fee token address" - ); require(decimalsShift <= 18, "NativeTokenDestination: invalid decimalsShift"); sourceBlockchainID = sourceBlockchainID_; tokenSourceAddress = tokenSourceAddress_; - feeTokenAddress = feeTokenAddress_; tokenMultiplier = 10 ** decimalsShift; multiplyOnReceive = multiplyOnReceive_; } @@ -206,7 +199,7 @@ abstract contract TeleporterTokenDestination is TeleporterMessageInput({ destinationBlockchainID: sourceBlockchainID, destinationAddress: tokenSourceAddress, - feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), + feeInfo: TeleporterFeeInfo({feeTokenAddress: address(this), amount: input.primaryFee}), requiredGasLimit: messageRequiredGasLimit, allowedRelayerAddresses: new address[](0), message: abi.encode(message) @@ -308,7 +301,7 @@ abstract contract TeleporterTokenDestination is TeleporterMessageInput({ destinationBlockchainID: sourceBlockchainID, destinationAddress: tokenSourceAddress, - feeInfo: TeleporterFeeInfo({feeTokenAddress: feeTokenAddress, amount: input.primaryFee}), + feeInfo: TeleporterFeeInfo({feeTokenAddress: address(this), amount: input.primaryFee}), requiredGasLimit: messageRequiredGasLimit, allowedRelayerAddresses: new address[](0), message: abi.encode(message) diff --git a/contracts/test/ERC20BridgeTests.t.sol b/contracts/test/ERC20BridgeTests.t.sol index 35ab73cc0..bb7f5037b 100644 --- a/contracts/test/ERC20BridgeTests.t.sol +++ b/contracts/test/ERC20BridgeTests.t.sol @@ -16,11 +16,6 @@ abstract contract ERC20BridgeTest is TeleporterTokenBridgeTest { IERC20Bridge public erc20Bridge; - function testZeroSendAmount() public { - vm.expectRevert("SafeERC20TransferFrom: balance not increased"); - _send(_createDefaultSendTokensInput(), 0); - } - function _send(SendTokensInput memory input, uint256 amount) internal virtual override { erc20Bridge.send(input, amount); } @@ -35,11 +30,15 @@ abstract contract ERC20BridgeTest is TeleporterTokenBridgeTest { function _setUpExpectedDeposit(uint256 amount) internal virtual override { // Increase the allowance of the bridge to transfer the funds from the user feeToken.safeIncreaseAllowance(address(tokenBridge), amount); + // Check that transferFrom is called to deposit the funds sent from the user to the bridge - vm.expectCall( - address(feeToken), - abi.encodeCall(IERC20.transferFrom, (address(this), address(tokenBridge), amount)) - ); + // This is only the case if the bridge is not the fee token itself, in which case this is an internal call. + if (address(feeToken) != address(tokenBridge)) { + vm.expectCall( + address(feeToken), + abi.encodeCall(IERC20.transferFrom, (address(this), address(tokenBridge), amount)) + ); + } vm.expectEmit(true, true, true, true, address(feeToken)); emit Transfer(address(this), address(tokenBridge), amount); } diff --git a/contracts/test/ERC20DestinationTests.t.sol b/contracts/test/ERC20DestinationTests.t.sol index d1f8ab9e5..5285313ee 100644 --- a/contracts/test/ERC20DestinationTests.t.sol +++ b/contracts/test/ERC20DestinationTests.t.sol @@ -92,6 +92,11 @@ contract ERC20DestinationTest is ERC20BridgeTest, TeleporterTokenDestinationTest }); } + function testZeroSendAmount() public { + vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); + _send(_createDefaultSendTokensInput(), 0); + } + function testDecimals() public { uint8 res = app.decimals(); assertEq(MOCK_TOKEN_DECIMALS, res); diff --git a/contracts/test/ERC20SourceTests.t.sol b/contracts/test/ERC20SourceTests.t.sol index 8c950d70f..1c09bd6fb 100644 --- a/contracts/test/ERC20SourceTests.t.sol +++ b/contracts/test/ERC20SourceTests.t.sol @@ -61,6 +61,11 @@ contract ERC20SourceTest is ERC20BridgeTest, TeleporterTokenSourceTest { ); } + function testZeroSendAmount() public { + vm.expectRevert("SafeERC20TransferFrom: balance not increased"); + _send(_createDefaultSendTokensInput(), 0); + } + function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { vm.expectCall( address(mockERC20), abi.encodeCall(IERC20.transfer, (address(recipient), amount)) diff --git a/contracts/test/NativeTokenBridgeTests.t.sol b/contracts/test/NativeTokenBridgeTests.t.sol index 776b6396a..51f2e1a4f 100644 --- a/contracts/test/NativeTokenBridgeTests.t.sol +++ b/contracts/test/NativeTokenBridgeTests.t.sol @@ -8,7 +8,6 @@ pragma solidity 0.8.18; import {TeleporterTokenBridgeTest} from "./TeleporterTokenBridgeTests.t.sol"; import {INativeTokenBridge} from "../src/interfaces/INativeTokenBridge.sol"; import {SendTokensInput, SendAndCallInput} from "../src/interfaces/ITeleporterTokenBridge.sol"; -import {IWrappedNativeToken} from "../src/interfaces/IWrappedNativeToken.sol"; abstract contract NativeTokenBridgeTest is TeleporterTokenBridgeTest { INativeTokenBridge public nativeTokenBridge; @@ -16,11 +15,6 @@ abstract contract NativeTokenBridgeTest is TeleporterTokenBridgeTest { event Deposit(address indexed sender, uint256 amount); event Withdrawal(address indexed sender, uint256 amount); - function testZeroSendAmount() public { - vm.expectRevert("SafeWrappedNativeTokenDeposit: balance not increased"); - _send(_createDefaultSendTokensInput(), 0); - } - function _send(SendTokensInput memory input, uint256 amount) internal virtual override { nativeTokenBridge.send{value: amount}(input); } @@ -31,10 +25,4 @@ abstract contract NativeTokenBridgeTest is TeleporterTokenBridgeTest { ) internal virtual override { nativeTokenBridge.sendAndCall{value: amount}(input); } - - function _setUpExpectedDeposit(uint256 amount) internal virtual override { - vm.expectCall(address(feeToken), abi.encodeCall(IWrappedNativeToken.deposit, ())); - vm.expectEmit(true, true, true, true, address(feeToken)); - emit Deposit(address(nativeTokenBridge), amount); - } } diff --git a/contracts/test/NativeTokenDestinationTests.t.sol b/contracts/test/NativeTokenDestinationTests.t.sol index bfcc89461..5d0941adb 100644 --- a/contracts/test/NativeTokenDestinationTests.t.sol +++ b/contracts/test/NativeTokenDestinationTests.t.sol @@ -8,16 +8,21 @@ pragma solidity 0.8.18; import {TeleporterTokenDestinationTest} from "./TeleporterTokenDestinationTests.t.sol"; import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import {INativeSendAndCallReceiver} from "../src/interfaces/INativeSendAndCallReceiver.sol"; -import {NativeTokenDestination, TeleporterMessageInput, TeleporterFeeInfo} from "../src/NativeTokenDestination.sol"; -import {IWrappedNativeToken} from "../src/interfaces/IWrappedNativeToken.sol"; -import {ExampleWAVAX} from "../src/mocks/ExampleWAVAX.sol"; -import {INativeMinter} from "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; +import { + NativeTokenDestinationSettings, + NativeTokenDestination, + TeleporterMessageInput, + TeleporterFeeInfo +} from "../src/NativeTokenDestination.sol"; +import {INativeMinter} from + "@avalabs/subnet-evm-contracts@1.2.0/contracts/interfaces/INativeMinter.sol"; import {ITeleporterMessenger, TeleporterMessageInput} from "@teleporter/ITeleporterMessenger.sol"; import {SendTokensInput} from "../src/interfaces/ITeleporterTokenBridge.sol"; contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDestinationTest { + string public constant DEFAULT_NAME = "Wrapped XYZ"; + string public constant DEFAULT_SYMBOL = "XYZ"; NativeTokenDestination public app; - IWrappedNativeToken public mockWrappedToken; event CollateralAdded(uint256 amount, uint256 remaining); event ReportBurnedTxFees(bytes32 indexed teleporterMessageID, uint256 feesBurned); @@ -25,22 +30,21 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function setUp() public override { TeleporterTokenDestinationTest.setUp(); - mockWrappedToken = new ExampleWAVAX(); - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: _DEFAULT_DECIMALS_SHIFT, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); tokenDestination = app; nativeTokenBridge = app; tokenBridge = app; - feeToken = mockWrappedToken; + feeToken = app; assertEq(app.totalSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); _collateralizeBridge(); } @@ -49,17 +53,17 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes uint256 initialImbalance = 100; // Need a new instance since the default set up pre-collateralizes the contract. - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: initialImbalance, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: initialImbalance, decimalsShift: 0, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); // Starts off under collateralized. assertFalse(app.isCollateralized()); @@ -96,62 +100,62 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testZeroInitialReserveImbalance() public { vm.expectRevert("NativeTokenDestination: zero initial reserve imbalance"); - new NativeTokenDestination({ + new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: 0, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: 0, decimalsShift: _DEFAULT_DECIMALS_SHIFT, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); } function testInvalidBurnedRewardPercentage() public { vm.expectRevert("NativeTokenDestination: invalid percentage"); - new NativeTokenDestination({ + new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: _DEFAULT_DECIMALS_SHIFT, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: 100 - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: 100 + })); } function testZeroSourceBlockchainID() public { vm.expectRevert(_formatErrorMessage("zero source blockchain ID")); - new NativeTokenDestination({ + new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: address(this), - sourceBlockchainID_: bytes32(0), - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: 1_000, + sourceBlockchainID: bytes32(0), + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: 1_000, decimalsShift: 0, - multiplyOnReceive_: false, - burnedFeesReportingRewardPercentage_: 1 - }); + multiplyOnReceive: false, + burnedFeesReportingRewardPercentage: 1 + })); } function testSendBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: 0, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); vm.expectRevert("NativeTokenDestination: contract undercollateralized"); app.send{value: 100_000}(_createDefaultSendTokensInput()); @@ -159,17 +163,17 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testSendAndCallBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: 0, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); vm.expectRevert("NativeTokenDestination: contract undercollateralized"); app.sendAndCall{value: 100_000}(_createDefaultSendAndCallInput()); @@ -186,12 +190,16 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes vm.deal(app.BURNED_TX_FEES_ADDRESS(), 0); assertEq(app.totalSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); - // Create wrapped native tokens and transfer them to burned address. - mockWrappedToken.deposit{value: _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1}(); - mockWrappedToken.transfer(app.BURN_FOR_TRANSFER_ADDRESS(), _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1); + // Mock tokens being bridged out by crediting them to the native token destination contract + vm.deal(address(app), _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1); assertEq(app.totalSupply(), 1); } + function testZeroSendAmount() public { + vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); + _send(_createDefaultSendTokensInput(), 0); + } + function testTransferToSource() public { vm.expectEmit(true, true, true, true, address(app)); SendTokensInput memory input = _createDefaultSendTokensInput(); @@ -207,7 +215,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes TeleporterMessageInput memory expectedMessageInput = TeleporterMessageInput({ destinationBlockchainID: input.destinationBlockchainID, destinationAddress: input.destinationBridgeAddress, - feeInfo: TeleporterFeeInfo({feeTokenAddress: app.feeTokenAddress(), amount: input.primaryFee}), + feeInfo: TeleporterFeeInfo({feeTokenAddress: address(app), amount: input.primaryFee}), requiredGasLimit: input.requiredGasLimit, allowedRelayerAddresses: new address[](0), message: _encodeSingleHopSendMessage(scaledAmount, input.recipient) @@ -223,34 +231,34 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testScaleTokensMultiplyOnSend() public { uint8 decimalShift = 3; - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: decimalShift, - multiplyOnReceive_: false, - burnedFeesReportingRewardPercentage_: 1 - }); + multiplyOnReceive: false, + burnedFeesReportingRewardPercentage: 1 + })); assertEq(app.scaleTokens(100, false), 100_000); assertEq(app.scaleTokens(100_000, true), 100); } function testScaleTokensMultiplyOnReceive() public { uint8 decimalShift = 3; - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: decimalShift, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: 1 - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: 1 + })); assertEq(app.scaleTokens(100, true), 100_000); assertEq(app.scaleTokens(100_000, false), 100); } @@ -271,7 +279,9 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes vm.deal(address(app), scaledAmount - 1); vm.expectRevert("CallUtils: insufficient value"); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); - tokenDestination.receiveTeleporterMessage(DEFAULT_SOURCE_BLOCKCHAIN_ID, TOKEN_SOURCE_ADDRESS, message); + tokenDestination.receiveTeleporterMessage( + DEFAULT_SOURCE_BLOCKCHAIN_ID, TOKEN_SOURCE_ADDRESS, message + ); } function testReportBurnFeesNoNewAmount() public { @@ -289,7 +299,8 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes // First difference is 100,000 uint256 initialBurnedTxFeeAmount = 100_003; uint256 expectedReward = 1_000; // 1%, rounded down due to integer division. - uint256 expectedReportedAmount = _scaleTokens(initialBurnedTxFeeAmount - expectedReward, false); + uint256 expectedReportedAmount = + _scaleTokens(initialBurnedTxFeeAmount - expectedReward, false); vm.deal(app.BURNED_TX_FEES_ADDRESS(), initialBurnedTxFeeAmount); _setUpMockMint(address(app), expectedReward); @@ -335,20 +346,21 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testReportBurnFeesNoRewardSuccess() public { // Create a new destination instance with no rewards for reporting burned fees. - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: 0, - multiplyOnReceive_: false, - burnedFeesReportingRewardPercentage_: 0 - }); + multiplyOnReceive: false, + burnedFeesReportingRewardPercentage: 0 + })); tokenDestination = app; nativeTokenBridge = app; tokenBridge = app; + feeToken = app; _collateralizeBridge(); uint256 burnedTxFeeAmount = 100_000; @@ -370,17 +382,17 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testReceiveSendAndCallBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. - app = new NativeTokenDestination({ + app = new NativeTokenDestination(NativeTokenDestinationSettings({ + symbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, - sourceBlockchainID_: DEFAULT_SOURCE_BLOCKCHAIN_ID, - tokenSourceAddress_: TOKEN_SOURCE_ADDRESS, - feeTokenAddress_: address(mockWrappedToken), - initialReserveImbalance_: _DEFAULT_INITIAL_RESERVE_IMBALANCE, + sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + tokenSourceAddress: TOKEN_SOURCE_ADDRESS, + initialReserveImbalance: _DEFAULT_INITIAL_RESERVE_IMBALANCE, decimalsShift: 0, - multiplyOnReceive_: true, - burnedFeesReportingRewardPercentage_: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE - }); + multiplyOnReceive: true, + burnedFeesReportingRewardPercentage: _DEFAULT_BURN_FEE_REWARDS_PERCENTAGE + })); // Add more than the full amount of required collateral. vm.expectEmit(true, true, true, true, address(app)); @@ -401,17 +413,6 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes ); } - function testReceive() public { - // Only the wrapped native token contract can transfer native tokens to the bridge contract without any calldata - vm.expectRevert("NativeTokenDestination: invalid receive payable sender"); - payable(address(app)).transfer(1); - - vm.deal(address(mockWrappedToken), 1); - vm.prank(address(mockWrappedToken)); - payable(address(app)).transfer(1); - assertEq(address(app).balance, 1); - } - function _collateralizeBridge() internal { vm.expectEmit(true, true, true, true, address(app)); emit CollateralAdded({amount: app.currentReserveImbalance(), remaining: 0}); @@ -439,7 +440,8 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes new bytes(0) ); vm.expectCall( - NATIVE_MINTER_PRECOMPILE_ADDRESS, abi.encodeCall(INativeMinter.mintNativeCoin, (addr, scaledAmount)) + NATIVE_MINTER_PRECOMPILE_ADDRESS, + abi.encodeCall(INativeMinter.mintNativeCoin, (addr, scaledAmount)) ); vm.deal(addr, scaledAmount); } @@ -451,7 +453,8 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes new bytes(0) ); vm.expectCall( - NATIVE_MINTER_PRECOMPILE_ADDRESS, abi.encodeCall(INativeMinter.mintNativeCoin, (recipient, amount)) + NATIVE_MINTER_PRECOMPILE_ADDRESS, + abi.encodeCall(INativeMinter.mintNativeCoin, (recipient, amount)) ); vm.deal(recipient, amount); } @@ -471,7 +474,8 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes new bytes(0) ); vm.expectCall( - NATIVE_MINTER_PRECOMPILE_ADDRESS, abi.encodeCall(INativeMinter.mintNativeCoin, (address(app), scaledAmount)) + NATIVE_MINTER_PRECOMPILE_ADDRESS, + abi.encodeCall(INativeMinter.mintNativeCoin, (address(app), scaledAmount)) ); // Mock the native minter precompile crediting native balance to the contract. @@ -481,7 +485,8 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes // Non-zero code length vm.etch(recipient, new bytes(1)); - bytes memory expectedCalldata = abi.encodeCall(INativeSendAndCallReceiver.receiveTokens, (payload)); + bytes memory expectedCalldata = + abi.encodeCall(INativeSendAndCallReceiver.receiveTokens, (payload)); if (expectSuccess) { vm.mockCall(recipient, scaledAmount, expectedCalldata, new bytes(0)); } else { @@ -502,7 +507,15 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes } } - function _scaleTokens(uint256 amount, bool isReceive) internal view override returns (uint256) { + function _setUpExpectedDeposit(uint256 amount) internal override { + vm.expectEmit(true, true, true, true, address(app)); + emit Transfer(address(0), address(app), amount); + } + + function _scaleTokens( + uint256 amount, + bool isReceive + ) internal view override returns (uint256) { if (app.multiplyOnReceive() == isReceive) { return amount * app.tokenMultiplier(); } diff --git a/contracts/test/NativeTokenSourceTests.t.sol b/contracts/test/NativeTokenSourceTests.t.sol index 9fa0b7d61..c34651842 100644 --- a/contracts/test/NativeTokenSourceTests.t.sol +++ b/contracts/test/NativeTokenSourceTests.t.sol @@ -49,6 +49,11 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest, TeleporterTokenSourceTe new NativeTokenSource(MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(0)); } + function testZeroSendAmount() public { + vm.expectRevert("SafeWrappedNativeTokenDeposit: balance not increased"); + _send(_createDefaultSendTokensInput(), 0); + } + function _checkExpectedWithdrawal(address, uint256 amount) internal override { vm.expectCall( address(mockWrappedToken), abi.encodeCall(IWrappedNativeToken.withdraw, (amount)) @@ -90,4 +95,10 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest, TeleporterTokenSourceTe emit CallFailed(DEFAULT_RECIPIENT_CONTRACT_ADDRESS, amount); } } + + function _setUpExpectedDeposit(uint256 amount) internal override { + vm.expectCall(address(feeToken), abi.encodeCall(IWrappedNativeToken.deposit, ())); + vm.expectEmit(true, true, true, true, address(feeToken)); + emit Deposit(address(nativeTokenBridge), amount); + } } diff --git a/tests/flows/er20_source_erc20_destination.go b/tests/flows/er20_source_erc20_destination.go index 0152bad85..898d6ea27 100644 --- a/tests/flows/er20_source_erc20_destination.go +++ b/tests/flows/er20_source_erc20_destination.go @@ -78,7 +78,7 @@ func ERC20SourceERC20Destination(network interfaces.Network) { SecondaryFee: big.NewInt(0), RequiredGasLimit: utils.DefaultERC20RequiredGasLimit, } - amount := big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(13)) + amount := new(big.Int).Mul(big.NewInt(1e18), big.NewInt(13)) receipt, bridgedAmount := utils.SendERC20Source( ctx, From d71d2e1d2d537e8b6c5a8df9af3e0a4f504117d0 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 10:21:13 -0400 Subject: [PATCH 02/26] Fix E2E tests --- contracts/test/ERC20BridgeTests.t.sol | 7 ++++ contracts/test/ERC20DestinationTests.t.sol | 9 +++-- contracts/test/ERC20SourceTests.t.sol | 9 +++-- contracts/test/NativeTokenBridgeTests.t.sol | 8 +++++ .../test/NativeTokenDestinationTests.t.sol | 35 +++++++++++++++---- contracts/test/NativeTokenSourceTests.t.sol | 15 ++++---- .../flows/erc20_source_native_destination.go | 9 +---- ...rc20_source_native_destination_multihop.go | 18 ++-------- .../flows/native_source_native_destination.go | 13 ++----- ...tive_source_native_destination_multihop.go | 18 ++-------- tests/utils/utils.go | 22 ++++++------ 11 files changed, 80 insertions(+), 83 deletions(-) diff --git a/contracts/test/ERC20BridgeTests.t.sol b/contracts/test/ERC20BridgeTests.t.sol index bb7f5037b..322870073 100644 --- a/contracts/test/ERC20BridgeTests.t.sol +++ b/contracts/test/ERC20BridgeTests.t.sol @@ -16,6 +16,11 @@ abstract contract ERC20BridgeTest is TeleporterTokenBridgeTest { IERC20Bridge public erc20Bridge; + function testZeroSendAmount() public { + _setUpExpectedZeroAmountRevert(); + _send(_createDefaultSendTokensInput(), 0); + } + function _send(SendTokensInput memory input, uint256 amount) internal virtual override { erc20Bridge.send(input, amount); } @@ -42,4 +47,6 @@ abstract contract ERC20BridgeTest is TeleporterTokenBridgeTest { vm.expectEmit(true, true, true, true, address(feeToken)); emit Transfer(address(this), address(tokenBridge), amount); } + + function _setUpExpectedZeroAmountRevert() internal virtual; } diff --git a/contracts/test/ERC20DestinationTests.t.sol b/contracts/test/ERC20DestinationTests.t.sol index 5285313ee..ff3440cb5 100644 --- a/contracts/test/ERC20DestinationTests.t.sol +++ b/contracts/test/ERC20DestinationTests.t.sol @@ -92,11 +92,6 @@ contract ERC20DestinationTest is ERC20BridgeTest, TeleporterTokenDestinationTest }); } - function testZeroSendAmount() public { - vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); - _send(_createDefaultSendTokensInput(), 0); - } - function testDecimals() public { uint8 res = app.decimals(); assertEq(MOCK_TOKEN_DECIMALS, res); @@ -184,6 +179,10 @@ contract ERC20DestinationTest is ERC20BridgeTest, TeleporterTokenDestinationTest } } + function _setUpExpectedZeroAmountRevert() internal override { + vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); + } + function _setUpMockMint(address, uint256) internal pure override { // Don't need to mock the minting of an ERC20 destination since it is an internal call // on the destination contract. diff --git a/contracts/test/ERC20SourceTests.t.sol b/contracts/test/ERC20SourceTests.t.sol index 1c09bd6fb..769812de3 100644 --- a/contracts/test/ERC20SourceTests.t.sol +++ b/contracts/test/ERC20SourceTests.t.sol @@ -61,11 +61,6 @@ contract ERC20SourceTest is ERC20BridgeTest, TeleporterTokenSourceTest { ); } - function testZeroSendAmount() public { - vm.expectRevert("SafeERC20TransferFrom: balance not increased"); - _send(_createDefaultSendTokensInput(), 0); - } - function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { vm.expectCall( address(mockERC20), abi.encodeCall(IERC20.transfer, (address(recipient), amount)) @@ -120,4 +115,8 @@ contract ERC20SourceTest is ERC20BridgeTest, TeleporterTokenSourceTest { emit Transfer(address(app), address(DEFAULT_FALLBACK_RECIPIENT_ADDRESS), amount); } } + + function _setUpExpectedZeroAmountRevert() internal override { + vm.expectRevert("SafeERC20TransferFrom: balance not increased"); + } } diff --git a/contracts/test/NativeTokenBridgeTests.t.sol b/contracts/test/NativeTokenBridgeTests.t.sol index 51f2e1a4f..c35e4f0ac 100644 --- a/contracts/test/NativeTokenBridgeTests.t.sol +++ b/contracts/test/NativeTokenBridgeTests.t.sol @@ -15,6 +15,11 @@ abstract contract NativeTokenBridgeTest is TeleporterTokenBridgeTest { event Deposit(address indexed sender, uint256 amount); event Withdrawal(address indexed sender, uint256 amount); + function testZeroSendAmount() public { + _setUpExpectedZeroAmountRevert(); + _send(_createDefaultSendTokensInput(), 0); + } + function _send(SendTokensInput memory input, uint256 amount) internal virtual override { nativeTokenBridge.send{value: amount}(input); } @@ -25,4 +30,7 @@ abstract contract NativeTokenBridgeTest is TeleporterTokenBridgeTest { ) internal virtual override { nativeTokenBridge.sendAndCall{value: amount}(input); } + + function _setUpExpectedDeposit(uint256 amount) internal virtual override; + function _setUpExpectedZeroAmountRevert() internal virtual; } diff --git a/contracts/test/NativeTokenDestinationTests.t.sol b/contracts/test/NativeTokenDestinationTests.t.sol index 5d0941adb..843334cd3 100644 --- a/contracts/test/NativeTokenDestinationTests.t.sol +++ b/contracts/test/NativeTokenDestinationTests.t.sol @@ -5,6 +5,7 @@ pragma solidity 0.8.18; +import {TeleporterTokenBridgeTest} from "./TeleporterTokenBridgeTests.t.sol"; import {TeleporterTokenDestinationTest} from "./TeleporterTokenDestinationTests.t.sol"; import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import {INativeSendAndCallReceiver} from "../src/interfaces/INativeSendAndCallReceiver.sol"; @@ -20,7 +21,7 @@ import {ITeleporterMessenger, TeleporterMessageInput} from "@teleporter/ITelepor import {SendTokensInput} from "../src/interfaces/ITeleporterTokenBridge.sol"; contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDestinationTest { - string public constant DEFAULT_NAME = "Wrapped XYZ"; + address public constant TEST_ACCOUNT = 0xd4E96eF8eee8678dBFf4d535E033Ed1a4F7605b7; string public constant DEFAULT_SYMBOL = "XYZ"; NativeTokenDestination public app; @@ -195,11 +196,6 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes assertEq(app.totalSupply(), 1); } - function testZeroSendAmount() public { - vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); - _send(_createDefaultSendTokensInput(), 0); - } - function testTransferToSource() public { vm.expectEmit(true, true, true, true, address(app)); SendTokensInput memory input = _createDefaultSendTokensInput(); @@ -413,6 +409,24 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes ); } + function testFallback() public { + (bool success,) = address(app).call{value: 1}("1234567812345678"); + assertTrue(success); + assertEq(app.balanceOf(address(this)), 1); + } + + function testDepositWithdrawWrappedNativeToken() public { + uint256 depositAmount = 500; + uint256 withdrawAmount = 100; + vm.deal(TEST_ACCOUNT, depositAmount); + vm.startPrank(TEST_ACCOUNT); + app.deposit{value: depositAmount}(); + assertEq(app.balanceOf(TEST_ACCOUNT), depositAmount); + app.withdraw(withdrawAmount); + assertEq(app.balanceOf(TEST_ACCOUNT), depositAmount - withdrawAmount); + assertEq(TEST_ACCOUNT.balance, withdrawAmount); + } + function _collateralizeBridge() internal { vm.expectEmit(true, true, true, true, address(app)); emit CollateralAdded({amount: app.currentReserveImbalance(), remaining: 0}); @@ -507,11 +521,18 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes } } - function _setUpExpectedDeposit(uint256 amount) internal override { + function _setUpExpectedDeposit(uint256 amount) + internal + override (NativeTokenBridgeTest, TeleporterTokenBridgeTest) + { vm.expectEmit(true, true, true, true, address(app)); emit Transfer(address(0), address(app), amount); } + function _setUpExpectedZeroAmountRevert() internal override { + vm.expectRevert(_formatErrorMessage("insufficient amount to cover fees")); + } + function _scaleTokens( uint256 amount, bool isReceive diff --git a/contracts/test/NativeTokenSourceTests.t.sol b/contracts/test/NativeTokenSourceTests.t.sol index c34651842..adeedd104 100644 --- a/contracts/test/NativeTokenSourceTests.t.sol +++ b/contracts/test/NativeTokenSourceTests.t.sol @@ -5,6 +5,7 @@ pragma solidity 0.8.18; +import {TeleporterTokenBridgeTest} from "./TeleporterTokenBridgeTests.t.sol"; import {TeleporterTokenSourceTest} from "./TeleporterTokenSourceTests.t.sol"; import {NativeTokenBridgeTest} from "./NativeTokenBridgeTests.t.sol"; import {NativeTokenSource} from "../src/NativeTokenSource.sol"; @@ -49,11 +50,6 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest, TeleporterTokenSourceTe new NativeTokenSource(MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(0)); } - function testZeroSendAmount() public { - vm.expectRevert("SafeWrappedNativeTokenDeposit: balance not increased"); - _send(_createDefaultSendTokensInput(), 0); - } - function _checkExpectedWithdrawal(address, uint256 amount) internal override { vm.expectCall( address(mockWrappedToken), abi.encodeCall(IWrappedNativeToken.withdraw, (amount)) @@ -96,9 +92,16 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest, TeleporterTokenSourceTe } } - function _setUpExpectedDeposit(uint256 amount) internal override { + function _setUpExpectedDeposit(uint256 amount) + internal + override (NativeTokenBridgeTest, TeleporterTokenBridgeTest) + { vm.expectCall(address(feeToken), abi.encodeCall(IWrappedNativeToken.deposit, ())); vm.expectEmit(true, true, true, true, address(feeToken)); emit Deposit(address(nativeTokenBridge), amount); } + + function _setUpExpectedZeroAmountRevert() internal override { + vm.expectRevert("SafeWrappedNativeTokenDeposit: balance not increased"); + } } diff --git a/tests/flows/erc20_source_native_destination.go b/tests/flows/erc20_source_native_destination.go index e48a322fa..a940accbb 100644 --- a/tests/flows/erc20_source_native_destination.go +++ b/tests/flows/erc20_source_native_destination.go @@ -44,21 +44,14 @@ func ERC20SourceNativeDestination(network interfaces.Network) { sourceTokenAddress, ) - // Deploy an example WAVAX on Subnet A - wavaxAddressA, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetAInfo, - ) - // Deploy a NativeTokenDestination to Subnet A nativeTokenDestinationAddressA, nativeTokenDestinationA := utils.DeployNativeTokenDestination( ctx, subnetAInfo, + "SUBA", fundedAddress, cChainInfo.BlockchainID, erc20SourceAddress, - wavaxAddressA, initialReserveImbalance, decimalsShift, multiplyOnReceive, diff --git a/tests/flows/erc20_source_native_destination_multihop.go b/tests/flows/erc20_source_native_destination_multihop.go index 37962f62f..415e64706 100644 --- a/tests/flows/erc20_source_native_destination_multihop.go +++ b/tests/flows/erc20_source_native_destination_multihop.go @@ -43,28 +43,14 @@ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { sourceTokenAddress, ) - // Deploy an example WAVAX on Subnet A - wavaxAddressA, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetAInfo, - ) - - // Deploy an example WAVAX on Subnet B - wavaxAddressB, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetBInfo, - ) - // Deploy a NativeTokenDestination to Subnet A nativeTokenDestinationAddressA, nativeTokenDestinationA := utils.DeployNativeTokenDestination( ctx, subnetAInfo, + "SUBA", fundedAddress, cChainInfo.BlockchainID, erc20SourceAddress, - wavaxAddressA, initialReserveImbalance, decimalsShift, multiplyOnReceive, @@ -75,10 +61,10 @@ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { nativeTokenDestinationAddressB, nativeTokenDestinationB := utils.DeployNativeTokenDestination( ctx, subnetBInfo, + "SUBB", fundedAddress, cChainInfo.BlockchainID, erc20SourceAddress, - wavaxAddressB, initialReserveImbalance, decimalsShift, multiplyOnReceive, diff --git a/tests/flows/native_source_native_destination.go b/tests/flows/native_source_native_destination.go index 03bfd7015..4394b21ef 100644 --- a/tests/flows/native_source_native_destination.go +++ b/tests/flows/native_source_native_destination.go @@ -40,36 +40,29 @@ func NativeSourceNativeDestination(network interfaces.Network) { ctx := context.Background() // Deploy an example WAVAX on the primary network - wavaxAddressA, wavaxA := utils.DeployExampleWAVAX( + cChainWAVAXAddress, wavaxA := utils.DeployExampleWAVAX( ctx, fundedKey, cChainInfo, ) - // Deploy an example WAVAX on the subnet - wavaxAddressB, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetAInfo, - ) - // Create a NativeTokenSource on the primary network nativeTokenSourceAddress, nativeTokenSource := utils.DeployNativeTokenSource( ctx, fundedKey, cChainInfo, fundedAddress, - wavaxAddressA, + cChainWAVAXAddress, ) // Deploy an NativeTokenDestination to Subnet A nativeTokenDestinationAddress, nativeTokenDestination := utils.DeployNativeTokenDestination( ctx, subnetAInfo, + "SUBA", fundedAddress, cChainInfo.BlockchainID, nativeTokenSourceAddress, - wavaxAddressB, initialReserveImbalance, decimalsShift, multiplyOnReceive, diff --git a/tests/flows/native_source_native_destination_multihop.go b/tests/flows/native_source_native_destination_multihop.go index 0357412fa..aafb11fda 100644 --- a/tests/flows/native_source_native_destination_multihop.go +++ b/tests/flows/native_source_native_destination_multihop.go @@ -43,28 +43,14 @@ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { wavaxAddressPrimary, ) - // Deploy an example WAVAX on Subnet A - wavaxAddressA, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetAInfo, - ) - - // Deploy an example WAVAX on Subnet B - wavaxAddressB, _ := utils.DeployExampleWAVAX( - ctx, - fundedKey, - subnetBInfo, - ) - // Deploy a NativeTokenDestination to Subnet A nativeTokenDestinationAddressA, nativeTokenDestinationA := utils.DeployNativeTokenDestination( ctx, subnetAInfo, + "SUBA", fundedAddress, cChainInfo.BlockchainID, nativeTokenSourceAddress, - wavaxAddressA, initialReserveImbalance, decimalsShift, multiplyOnReceive, @@ -75,10 +61,10 @@ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { nativeTokenDestinationAddressB, nativeTokenDestinationB := utils.DeployNativeTokenDestination( ctx, subnetBInfo, + "SUBB", fundedAddress, cChainInfo.BlockchainID, nativeTokenSourceAddress, - wavaxAddressB, initialReserveImbalance, decimalsShift, multiplyOnReceive, diff --git a/tests/utils/utils.go b/tests/utils/utils.go index 20ddcbc2f..60a1959be 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -122,10 +122,10 @@ func DeployERC20Destination( func DeployNativeTokenDestination( ctx context.Context, subnet interfaces.SubnetTestInfo, + symbol string, teleporterManager common.Address, sourceBlockchainID ids.ID, tokenSourceAddress common.Address, - feeTokenAddress common.Address, initialReserveImbalance *big.Int, decimalsShift uint8, multiplyOnReceive bool, @@ -148,15 +148,17 @@ func DeployNativeTokenDestination( address, tx, nativeTokenDestination, err := nativetokendestination.DeployNativeTokenDestination( opts, subnet.RPCClient, - subnet.TeleporterRegistryAddress, - teleporterManager, - sourceBlockchainID, - tokenSourceAddress, - feeTokenAddress, - initialReserveImbalance, - decimalsShift, - multiplyOnReceive, - burnedFeesReportingRewardPercentage, + nativetokendestination.NativeTokenDestinationSettings{ + Symbol: symbol, + TeleporterRegistryAddress: subnet.TeleporterRegistryAddress, + TeleporterManager: teleporterManager, + SourceBlockchainID: sourceBlockchainID, + TokenSourceAddress: tokenSourceAddress, + InitialReserveImbalance: initialReserveImbalance, + DecimalsShift: decimalsShift, + MultiplyOnReceive: multiplyOnReceive, + BurnedFeesReportingRewardPercentage: burnedFeesReportingRewardPercentage, + }, ) Expect(err).Should(BeNil()) From 9c10430ed8aff3da4df66d7dbaebb0a5c94800a3 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 11:55:57 -0400 Subject: [PATCH 03/26] Additional documentation --- README.md | 16 ++--- .../go/ERC20Destination/ERC20Destination.go | 2 +- abi-bindings/go/ERC20Source/ERC20Source.go | 2 +- .../NativeTokenDestination.go | 2 +- .../go/NativeTokenSource/NativeTokenSource.go | 2 +- contracts/README.md | 48 ++++++++++++++ contracts/src/ERC20Destination.sol | 2 +- contracts/src/TeleporterTokenDestination.sol | 8 +-- contracts/src/TeleporterTokenSource.sol | 8 +-- .../src/interfaces/ITeleporterTokenBridge.sol | 4 +- contracts/test/ERC20SourceTests.t.sol | 3 - .../test/MockSendAndCallReceiverTest.t.sol | 63 +++++++++++++++++++ ...erc20_source_erc20_destination_multihop.go | 8 +-- .../flows/erc20_source_native_destination.go | 4 +- ...rc20_source_native_destination_multihop.go | 10 +-- ...ative_source_erc20_destination_multihop.go | 6 +- ...tive_source_native_destination_multihop.go | 10 +-- tests/local/e2e_test.go | 8 +-- tests/utils/utils.go | 14 ++--- 19 files changed, 165 insertions(+), 55 deletions(-) create mode 100644 contracts/README.md create mode 100644 contracts/test/MockSendAndCallReceiverTest.t.sol diff --git a/README.md b/README.md index a7232ca55..10aef488f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Teleporter-token-bridge +# Teleporter Token Bridge ## Status @@ -6,21 +6,23 @@ Please note that `teleporter-token-bridge` is still under active development and ## Overview -Teleporter token bridge is an application that allows users to transfer tokens between subnets. The bridge is a set of smart contracts that are deployed on both the source and destination subnets, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication. The token bridges are designed to be permissionless, as long as there is a compatible token bridge instance on a destination chain, users can transfer tokens from a home chain to that destination chain. The token bridge source on the home chain keeps track of token balances bridged to each destination token bridge instance, and handles returning the original tokens back to the user when bridged back to the home chain. +Teleporter token bridge is an application that allows users to transfer tokens between subnets. The bridge is a set of smart contracts that are deployed on both the source and destination subnets, and leverages [Teleporter](https://github.com/ava-labs/teleporter) for cross-chain communication. The token bridges are designed to be permissionless: as long as there is a compatible token bridge instance on a destination chain, users can transfer tokens from a home chain to that destination chain. The token bridge source on the home chain keeps track of token balances bridged to each destination token bridge instance, and handles returning the original tokens back to the user when bridged back to the home chain. The token bridge contracts take in either an ERC20 or native token to be bridged from a source chain, which can be referred to as the "home chain", and transfers the token to a destination chain to be represented as a new token. The new token representation on the destination chain can also either be an ERC20 or native token, allowing users to have any combination of ERC20 and native tokens between source and destination chains: -- ERC20 -> ERC20 -- ERC20 -> Native -- Native -> ERC20 -- Native -> Native +- `ERC20` -> `ERC20` +- `ERC20` -> `Native` +- `Native` -> `ERC20` +- `Native` -> `Native` The destination tokens are designed to by default have compatibility with the token bridges on the source chain, and allow any custom logic to be implemented in addition. For example, developers can inherit and extend the destination ERC20 token contract to add additional functionality, such as a custom minting, burning, or transfer logic. -The token bridge also supports "multihop" transfers, where tokens can be transferred between destination chains. The multihop transfer first transfers the token from the origin destination chain to the home chain, where token balances are updated, and then triggers a second transfer to the final destination chain. +The token bridge also supports "multi-hop" transfers, where tokens can be transferred between destination chains. The multi-hop transfer first transfers the token from the origin destination chain to the home chain, where token balances are updated, and then triggers a second transfer to the final destination chain. In addition to supporting basic token transfers, the token bridge contracts offer a `sendAndCall` interface for atomically bridging tokens and using them to interact with a smart contract on the destination chain. If the call to the recipient smart contract fails, the bridged tokens are sent to a fallback recipient address. The `sendAndCall` interfaces enables the direct use of bridged tokens in dApps on other chains, such as performing swaps, using the tokens to pay for fees when invoking services, etc. +A breakdown of the structure of the contracts that implement this function can be found under `./contracts` [here](./contracts/README.md). + ## Setup ### Initialize the repository diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index de41fb5a7..78e7bf171 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212200ec696dab658d97cc5df1696d16e2d72e8ee7fd0f698d3e9e01d3400f89ff0d664736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220d9599c7648afe6de453797e99690457306302d1c01584bdb8b17a3b7014021d764736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index 9ada9db78..b1db942d2 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162003207380380620032078339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d61620004a6600039600081816102b901528181611775015281816117a1015281816117cf01528181611873015281816118e7015281816119c501526119f301526000818161023d0152818161095a0152610fee015260008181610277015261146f0152600081816101480152818161054c01528181610aa40152611a230152612d616000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b610130610113366004612202565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b610195610190366004612232565b6102db565b005b6101956101a536600461224f565b6103e0565b6101956101b8366004612232565b6103fe565b6101956101cb366004612280565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f7366004612232565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612299565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122e3565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af366004612232565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b81526004016103099061236b565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f23684900384018461244b565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b81526004016103099061236b565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f83612553565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190612600565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b81526004016103099061265d565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb8360000151846020015184866060015185611400565b915060006040518060600160405280600060038111156108dd576108dd6126ab565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b9565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612711565b604051602081830303815290604052815250611642565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190612600565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b81526004016103099061265d565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e0015185611400565b91506000604051806060016040528060016003811115610f4257610f426126ab565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612760565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b9565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127b2565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f891906128a0565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612959565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126ab565b0361125b57600082604001518060200190518101906111f49190612977565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161123991815260200190565b60405180910390a261125381600001518460200151611768565b505050505050565b600182516003811115611270576112706126ab565b0361129f576000826040015180602001905181019061128f91906129c2565b905061125381846020015161179c565b6002825160038111156112b4576112b46126ab565b0361133857600082604001518060200190518101906112d39190612a78565b90506112536040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b60038251600381111561134d5761134d6126ab565b036113f9576000826040015180602001905181019061136c9190612af6565b90506112536040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b60008561146d5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114f75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b03851661156c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b8161157d5761157a846119ec565b93505b8284116115f25760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115fc8385612959565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611633908490612bc1565b90915550939695505050505050565b60008061164d611a1e565b604084015160200151909150156116f2576040830151516001600160a01b03166116cf5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116f2916001600160a01b03909116908390611b32565b604051630624488560e41b81526001600160a01b0382169063624488509061171e908690600401612c18565b6020604051808303816000875af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612600565b9392505050565b6103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c17565b6117cb7f0000000000000000000000000000000000000000000000000000000000000000836000015183611b32565b60007f000000000000000000000000000000000000000000000000000000000000000082846020015160405160240161180693929190612c96565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b1790528401518451919250600091611846919084611c4c565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612600565b90506119127f000000000000000000000000000000000000000000000000000000000000000086600001516000611c63565b81156119645784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161195791815260200190565b60405180910390a26119ac565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516119a391815260200190565b60405180910390a25b80156113f95760608501516113f9906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c17565b6000611a187f000000000000000000000000000000000000000000000000000000000000000083611d78565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612cbd565b9050611ac7816001600160a01b031660009081526001602052604090205460ff1690565b15611b2d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190612600565b611bb19190612bc1565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ee0565b6040516001600160a01b038316602482015260448101829052611c4790849063a9059cbb60e01b90606401611be0565b505050565b6000611c5b8460008585611fb2565b949350505050565b801580611cdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612600565b155b611d485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c4790849063095ea7b360e01b90606401611be0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190612600565b9050611dfc6001600160a01b038516333086612087565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612600565b9050818111611ecd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ed78282612959565b95945050505050565b6000611f35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120bf9092919063ffffffff16565b805190915015611c475780806020019051810190611f539190612cda565b611c475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a10156120045760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b834710156120545760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206e57506000611c5b565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611be0565b6060611c5b848460008585600080866001600160a01b031685876040516120e69190612cfc565b60006040518083038185875af1925050503d8060008114612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b509150915061213987838387612144565b979650505050505050565b606083156121b35782516000036121ac576001600160a01b0385163b6121ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c5b565b611c5b83838151156121c85781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d18565b6001600160a01b038116811461050c57600080fd5b8035611b2d816121e2565b6000806040838503121561221557600080fd5b823591506020830135612227816121e2565b809150509250929050565b60006020828403121561224457600080fd5b8135611761816121e2565b60008082840360e081121561226357600080fd5b60c081121561227157600080fd5b50919360c08501359350915050565b60006020828403121561229257600080fd5b5035919050565b600080604083850312156122ac57600080fd5b82356001600160401b038111156122c257600080fd5b830161012081860312156122d557600080fd5b946020939093013593505050565b600080600080606085870312156122f957600080fd5b84359350602085013561230b816121e2565b925060408501356001600160401b038082111561232757600080fd5b818701915087601f83011261233b57600080fd5b81358181111561234a57600080fd5b88602082850101111561235c57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123f2576123f26123b9565b60405290565b60405161010081016001600160401b03811182821017156123f2576123f26123b9565b604051601f8201601f191681016001600160401b0381118282101715612443576124436123b9565b604052919050565b600060c0828403121561245d57600080fd5b60405160c081018181106001600160401b038211171561247f5761247f6123b9565b604052823581526020830135612494816121e2565b602082015260408301356124a7816121e2565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124ef576124ef6123b9565b50601f01601f191660200190565b600082601f83011261250e57600080fd5b813561252161251c826124d6565b61241b565b81815284602083860101111561253657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561256657600080fd5b61256e6123cf565b8235815261257e602084016121f7565b602082015261258f604084016121f7565b604082015260608301356001600160401b038111156125ad57600080fd5b6125b9368286016124fd565b6060830152506080830135608082015260a083013560a08201526125df60c084016121f7565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561261257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126dc5781810151838201526020016126c4565b50506000910152565b600081518084526126fd8160208601602086016126c1565b601f01601f19169290920160200192915050565b60208152600082516004811061273757634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5b60808401826126e5565b60208152600060018060a01b0380845116602084015260208401516080604085015261278f60a08501826126e5565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d960608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261280a6101608501836126e5565b9150608086015160c085015260a086015160e085015260c086015161010061283c818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286c57600080fd5b815161287a61251c826124d6565b81815284602083860101111561288f57600080fd5b611c5b8260208301602087016126c1565b6000602082840312156128b257600080fd5b81516001600160401b03808211156128c957600080fd5b90830190606082860312156128dd57600080fd5b6040516060810181811083821117156128f8576128f86123b9565b60405282516004811061290a57600080fd5b81526020838101519082015260408301518281111561292857600080fd5b6129348782860161285b565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1857611a18612943565b8051611b2d816121e2565b60006020828403121561298957600080fd5b604051602081018181106001600160401b03821117156129ab576129ab6123b9565b60405282516129b9816121e2565b81529392505050565b6000602082840312156129d457600080fd5b81516001600160401b03808211156129eb57600080fd5b90830190608082860312156129ff57600080fd5b604051608081018181108382111715612a1a57612a1a6123b9565b6040528251612a28816121e2565b8152602083015182811115612a3c57600080fd5b612a488782860161285b565b6020830152506040830151604082015260608301519250612a68836121e2565b6060810192909252509392505050565b600060a08284031215612a8a57600080fd5b60405160a081018181106001600160401b0382111715612aac57612aac6123b9565b604052825181526020830151612ac1816121e2565b60208201526040830151612ad4816121e2565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0857600080fd5b81516001600160401b0380821115612b1f57600080fd5b908301906101008286031215612b3457600080fd5b612b3c6123f8565b82518152612b4c6020840161296c565b6020820152612b5d6040840161296c565b6040820152606083015182811115612b7457600080fd5b612b808782860161285b565b60608301525060808301516080820152612b9c60a0840161296c565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1857611a18612943565b600081518084526020808501945080840160005b83811015612c0d5781516001600160a01b031687529582019590820190600101612be8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c79610100840182612bd4565b905060a0840151601f198483030160e0850152611ed782826126e5565b60018060a01b0384168152826020820152606060408201526000611ed760608301846126e5565b600060208284031215612ccf57600080fd5b8151611761816121e2565b600060208284031215612cec57600080fd5b8151801515811461176157600080fd5b60008251612d0e8184602087016126c1565b9190910192915050565b60208152600061176160208301846126e556fea2646970667358221220d8173095e7ef2fdd6b968ce6c59b5f226607babd914068e01f54c76f49cdf75464736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162003207380380620032078339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d61620004a6600039600081816102b901528181611775015281816117a1015281816117cf01528181611873015281816118e7015281816119c501526119f301526000818161023d0152818161095a0152610fee015260008181610277015261146f0152600081816101480152818161054c01528181610aa40152611a230152612d616000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b610130610113366004612202565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b610195610190366004612232565b6102db565b005b6101956101a536600461224f565b6103e0565b6101956101b8366004612232565b6103fe565b6101956101cb366004612280565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f7366004612232565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612299565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122e3565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af366004612232565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b81526004016103099061236b565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f23684900384018461244b565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b81526004016103099061236b565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f83612553565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190612600565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b81526004016103099061265d565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb8360000151846020015184866060015185611400565b915060006040518060600160405280600060038111156108dd576108dd6126ab565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b9565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612711565b604051602081830303815290604052815250611642565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190612600565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b81526004016103099061265d565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e0015185611400565b91506000604051806060016040528060016003811115610f4257610f426126ab565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612760565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b9565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127b2565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f891906128a0565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612959565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126ab565b0361125b57600082604001518060200190518101906111f49190612977565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161123991815260200190565b60405180910390a261125381600001518460200151611768565b505050505050565b600182516003811115611270576112706126ab565b0361129f576000826040015180602001905181019061128f91906129c2565b905061125381846020015161179c565b6002825160038111156112b4576112b46126ab565b0361133857600082604001518060200190518101906112d39190612a78565b90506112536040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b60038251600381111561134d5761134d6126ab565b036113f9576000826040015180602001905181019061136c9190612af6565b90506112536040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b60008561146d5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114f75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b03851661156c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b8161157d5761157a846119ec565b93505b8284116115f25760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115fc8385612959565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611633908490612bc1565b90915550939695505050505050565b60008061164d611a1e565b604084015160200151909150156116f2576040830151516001600160a01b03166116cf5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116f2916001600160a01b03909116908390611b32565b604051630624488560e41b81526001600160a01b0382169063624488509061171e908690600401612c18565b6020604051808303816000875af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612600565b9392505050565b6103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c17565b6117cb7f0000000000000000000000000000000000000000000000000000000000000000836000015183611b32565b60007f000000000000000000000000000000000000000000000000000000000000000082846020015160405160240161180693929190612c96565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b1790528401518451919250600091611846919084611c4c565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612600565b90506119127f000000000000000000000000000000000000000000000000000000000000000086600001516000611c63565b81156119645784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161195791815260200190565b60405180910390a26119ac565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516119a391815260200190565b60405180910390a25b80156113f95760608501516113f9906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c17565b6000611a187f000000000000000000000000000000000000000000000000000000000000000083611d78565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612cbd565b9050611ac7816001600160a01b031660009081526001602052604090205460ff1690565b15611b2d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190612600565b611bb19190612bc1565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ee0565b6040516001600160a01b038316602482015260448101829052611c4790849063a9059cbb60e01b90606401611be0565b505050565b6000611c5b8460008585611fb2565b949350505050565b801580611cdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612600565b155b611d485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c4790849063095ea7b360e01b90606401611be0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190612600565b9050611dfc6001600160a01b038516333086612087565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612600565b9050818111611ecd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ed78282612959565b95945050505050565b6000611f35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120bf9092919063ffffffff16565b805190915015611c475780806020019051810190611f539190612cda565b611c475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a10156120045760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b834710156120545760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206e57506000611c5b565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611be0565b6060611c5b848460008585600080866001600160a01b031685876040516120e69190612cfc565b60006040518083038185875af1925050503d8060008114612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b509150915061213987838387612144565b979650505050505050565b606083156121b35782516000036121ac576001600160a01b0385163b6121ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c5b565b611c5b83838151156121c85781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d18565b6001600160a01b038116811461050c57600080fd5b8035611b2d816121e2565b6000806040838503121561221557600080fd5b823591506020830135612227816121e2565b809150509250929050565b60006020828403121561224457600080fd5b8135611761816121e2565b60008082840360e081121561226357600080fd5b60c081121561227157600080fd5b50919360c08501359350915050565b60006020828403121561229257600080fd5b5035919050565b600080604083850312156122ac57600080fd5b82356001600160401b038111156122c257600080fd5b830161012081860312156122d557600080fd5b946020939093013593505050565b600080600080606085870312156122f957600080fd5b84359350602085013561230b816121e2565b925060408501356001600160401b038082111561232757600080fd5b818701915087601f83011261233b57600080fd5b81358181111561234a57600080fd5b88602082850101111561235c57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123f2576123f26123b9565b60405290565b60405161010081016001600160401b03811182821017156123f2576123f26123b9565b604051601f8201601f191681016001600160401b0381118282101715612443576124436123b9565b604052919050565b600060c0828403121561245d57600080fd5b60405160c081018181106001600160401b038211171561247f5761247f6123b9565b604052823581526020830135612494816121e2565b602082015260408301356124a7816121e2565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124ef576124ef6123b9565b50601f01601f191660200190565b600082601f83011261250e57600080fd5b813561252161251c826124d6565b61241b565b81815284602083860101111561253657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561256657600080fd5b61256e6123cf565b8235815261257e602084016121f7565b602082015261258f604084016121f7565b604082015260608301356001600160401b038111156125ad57600080fd5b6125b9368286016124fd565b6060830152506080830135608082015260a083013560a08201526125df60c084016121f7565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561261257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126dc5781810151838201526020016126c4565b50506000910152565b600081518084526126fd8160208601602086016126c1565b601f01601f19169290920160200192915050565b60208152600082516004811061273757634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5b60808401826126e5565b60208152600060018060a01b0380845116602084015260208401516080604085015261278f60a08501826126e5565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d960608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261280a6101608501836126e5565b9150608086015160c085015260a086015160e085015260c086015161010061283c818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286c57600080fd5b815161287a61251c826124d6565b81815284602083860101111561288f57600080fd5b611c5b8260208301602087016126c1565b6000602082840312156128b257600080fd5b81516001600160401b03808211156128c957600080fd5b90830190606082860312156128dd57600080fd5b6040516060810181811083821117156128f8576128f86123b9565b60405282516004811061290a57600080fd5b81526020838101519082015260408301518281111561292857600080fd5b6129348782860161285b565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1857611a18612943565b8051611b2d816121e2565b60006020828403121561298957600080fd5b604051602081018181106001600160401b03821117156129ab576129ab6123b9565b60405282516129b9816121e2565b81529392505050565b6000602082840312156129d457600080fd5b81516001600160401b03808211156129eb57600080fd5b90830190608082860312156129ff57600080fd5b604051608081018181108382111715612a1a57612a1a6123b9565b6040528251612a28816121e2565b8152602083015182811115612a3c57600080fd5b612a488782860161285b565b6020830152506040830151604082015260608301519250612a68836121e2565b6060810192909252509392505050565b600060a08284031215612a8a57600080fd5b60405160a081018181106001600160401b0382111715612aac57612aac6123b9565b604052825181526020830151612ac1816121e2565b60208201526040830151612ad4816121e2565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0857600080fd5b81516001600160401b0380821115612b1f57600080fd5b908301906101008286031215612b3457600080fd5b612b3c6123f8565b82518152612b4c6020840161296c565b6020820152612b5d6040840161296c565b6040820152606083015182811115612b7457600080fd5b612b808782860161285b565b60608301525060808301516080820152612b9c60a0840161296c565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1857611a18612943565b600081518084526020808501945080840160005b83811015612c0d5781516001600160a01b031687529582019590820190600101612be8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c79610100840182612bd4565b905060a0840151601f198483030160e0850152611ed782826126e5565b60018060a01b0384168152826020820152606060408201526000611ed760608301846126e5565b600060208284031215612ccf57600080fd5b8151611761816121e2565b600060208284031215612cec57600080fd5b8151801515811461176157600080fd5b60008251612d0e8184602087016126c1565b9190910192915050565b60208152600061176160208301846126e556fea26469706673582212208f17ecf10fbd04370933c1ed158f194a905ed796aa954615fd19208ec026cc8e64736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 5cd145a06..d3df37f35 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212201db3c2ae78db298f6632f236117ac7e280bbcb4d4f9465423f06fbe99461084b64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122099ddecdf01db3f5f4877f7c41b12f241c1de003486e0ca8912bea84c70a7743b64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index a6b0e965c..ac6e6bf06 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200319c3803806200319c8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d0b6200049160003960008181610402015281816118fd015281816119b20152611b4d0152600081816101070152818161034501528181610a8e0152610ede01526000818161039901526115ab01526000818161020a0152818161068801528181610f7d0152611b7d0152612d0b6000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121fb565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f336600461222b565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f366004612243565b610441565b610193610272366004612260565b61053d565b34801561028357600080fd5b50610193610292366004612243565b610551565b3480156102a357600080fd5b506101936102b236600461229b565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b50610323610305366004612243565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b506101936103823660046122b4565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb366004612243565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e610436368390038301836123ce565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e61054982612524565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906125d1565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a9061262e565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef836000015184602001518486606001518561153c565b91506000604051806060016040528060006003811115610a1157610a1161267c565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb61233c565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b91906126e2565b60405160208183030381529060405281525061177e565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a9061262e565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e001518561153c565b91506000604051806060016040528060016003811115610e3257610e3261267c565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e909190612731565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb61233c565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612783565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906125d1565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612871565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d8908261292a565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156113115761131161267c565b0361139757600082604001518060200190518101906113309190612948565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161137591815260200190565b60405180910390a261138f816000015184602001516118a4565b505050505050565b6001825160038111156113ac576113ac61267c565b036113db57600082604001518060200190518101906113cb9190612993565b905061138f81846020015161199c565b6002825160038111156113f0576113f061267c565b03611474576000826040015180602001905181019061140f9190612a49565b905061138f6040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b6003825160038111156114895761148961267c565b0361153557600082604001518060200190518101906114a89190612ac7565b905061138f6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b6000856115a95760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036116335760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b0385166116a85760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b816116b9576116b684611b46565b93505b82841161172e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b611738838561292a565b60008781526005602090815260408083206001600160a01b038a16845290915281208054929650869290919061176f908490612b92565b90915550939695505050505050565b600080611789611b78565b6040840151602001519091501561182e576040830151516001600160a01b031661180b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b60408301516020810151905161182e916001600160a01b03909116908390611c8c565b604051630624488560e41b81526001600160a01b0382169063624488509061185a908690600401612be9565b6020604051808303816000875af1158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d91906125d1565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516118df91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611997573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b5050505060008260200151604051602401611a2d9190612c67565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a6e9190859085611d60565b90508015611ac25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611ab591815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611b0191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611535573d6000803e3d6000fd5b6000611b727f000000000000000000000000000000000000000000000000000000000000000083611e37565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd9190612c7a565b9050611c21816001600160a01b031660009081526001602052604090205460ff1690565b15611c875760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906125d1565b611d0b9190612b92565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611fe6565b6000845a1015611db25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611e025760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611e1c57506000611e2f565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea491906125d1565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6591906125d1565b9050818111611fd35760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611fdd828261292a565b95945050505050565b600061203b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b89092919063ffffffff16565b80519091501561199757808060200190518101906120599190612c97565b6119975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611e2f848460008585600080866001600160a01b031685876040516120df9190612cb9565b60006040518083038185875af1925050503d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50915091506121328783838761213d565b979650505050505050565b606083156121ac5782516000036121a5576001600160a01b0385163b6121a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611e2f565b611e2f83838151156121c15781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c67565b6001600160a01b038116811461043e57600080fd5b8035611c87816121db565b6000806040838503121561220e57600080fd5b823591506020830135612220816121db565b809150509250929050565b600060c0828403121561223d57600080fd5b50919050565b60006020828403121561225557600080fd5b813561189d816121db565b60006020828403121561227257600080fd5b81356001600160401b0381111561228857600080fd5b8201610120818503121561189d57600080fd5b6000602082840312156122ad57600080fd5b5035919050565b600080600080606085870312156122ca57600080fd5b8435935060208501356122dc816121db565b925060408501356001600160401b03808211156122f857600080fd5b818701915087601f83011261230c57600080fd5b81358181111561231b57600080fd5b88602082850101111561232d57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123755761237561233c565b60405290565b60405161010081016001600160401b03811182821017156123755761237561233c565b604051601f8201601f191681016001600160401b03811182821017156123c6576123c661233c565b604052919050565b600060c082840312156123e057600080fd5b60405160c081018181106001600160401b03821117156124025761240261233c565b604052823581526020830135612417816121db565b6020820152604083013561242a816121db565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b038211156124c0576124c061233c565b50601f01601f191660200190565b600082601f8301126124df57600080fd5b81356124f26124ed826124a7565b61239e565b81815284602083860101111561250757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561253757600080fd5b61253f612352565b8235815261254f602084016121f0565b6020820152612560604084016121f0565b604082015260608301356001600160401b0381111561257e57600080fd5b61258a368286016124ce565b6060830152506080830135608082015260a083013560a08201526125b060c084016121f0565b60c082015260e0838101359082015261010092830135928101929092525090565b6000602082840312156125e357600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126ad578181015183820152602001612695565b50506000910152565b600081518084526126ce816020860160208601612692565b601f01601f19169290920160200192915050565b60208152600082516004811061270857634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611e2f60808401826126b6565b60208152600060018060a01b0380845116602084015260208401516080604085015261276060a08501826126b6565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127aa60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526127db6101608501836126b6565b9150608086015160c085015260a086015160e085015260c086015161010061280d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261283d57600080fd5b815161284b6124ed826124a7565b81815284602083860101111561286057600080fd5b611e2f826020830160208701612692565b60006020828403121561288357600080fd5b81516001600160401b038082111561289a57600080fd5b90830190606082860312156128ae57600080fd5b6040516060810181811083821117156128c9576128c961233c565b6040528251600481106128db57600080fd5b8152602083810151908201526040830151828111156128f957600080fd5b6129058782860161282c565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b7257611b72612914565b8051611c87816121db565b60006020828403121561295a57600080fd5b604051602081018181106001600160401b038211171561297c5761297c61233c565b604052825161298a816121db565b81529392505050565b6000602082840312156129a557600080fd5b81516001600160401b03808211156129bc57600080fd5b90830190608082860312156129d057600080fd5b6040516080810181811083821117156129eb576129eb61233c565b60405282516129f9816121db565b8152602083015182811115612a0d57600080fd5b612a198782860161282c565b6020830152506040830151604082015260608301519250612a39836121db565b6060810192909252509392505050565b600060a08284031215612a5b57600080fd5b60405160a081018181106001600160401b0382111715612a7d57612a7d61233c565b604052825181526020830151612a92816121db565b60208201526040830151612aa5816121db565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612ad957600080fd5b81516001600160401b0380821115612af057600080fd5b908301906101008286031215612b0557600080fd5b612b0d61237b565b82518152612b1d6020840161293d565b6020820152612b2e6040840161293d565b6040820152606083015182811115612b4557600080fd5b612b518782860161282c565b60608301525060808301516080820152612b6d60a0840161293d565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b7257611b72612914565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c4a610100840182612ba5565b905060a0840151601f198483030160e0850152611fdd82826126b6565b60208152600061189d60208301846126b6565b600060208284031215612c8c57600080fd5b815161189d816121db565b600060208284031215612ca957600080fd5b8151801515811461189d57600080fd5b60008251612ccb818460208701612692565b919091019291505056fea2646970667358221220b8d8fff97e3cc92a64c16b0f9e33e645727e5cfe86b67af8c3c610b0e411296e64736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b506040516200319c3803806200319c8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d0b6200049160003960008181610402015281816118fd015281816119b20152611b4d0152600081816101070152818161034501528181610a8e0152610ede01526000818161039901526115ab01526000818161020a0152818161068801528181610f7d0152611b7d0152612d0b6000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121fb565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f336600461222b565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f366004612243565b610441565b610193610272366004612260565b61053d565b34801561028357600080fd5b50610193610292366004612243565b610551565b3480156102a357600080fd5b506101936102b236600461229b565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b50610323610305366004612243565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b506101936103823660046122b4565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb366004612243565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e610436368390038301836123ce565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e61054982612524565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906125d1565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a9061262e565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef836000015184602001518486606001518561153c565b91506000604051806060016040528060006003811115610a1157610a1161267c565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb61233c565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b91906126e2565b60405160208183030381529060405281525061177e565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a9061262e565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e001518561153c565b91506000604051806060016040528060016003811115610e3257610e3261267c565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e909190612731565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb61233c565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612783565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906125d1565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612871565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d8908261292a565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156113115761131161267c565b0361139757600082604001518060200190518101906113309190612948565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161137591815260200190565b60405180910390a261138f816000015184602001516118a4565b505050505050565b6001825160038111156113ac576113ac61267c565b036113db57600082604001518060200190518101906113cb9190612993565b905061138f81846020015161199c565b6002825160038111156113f0576113f061267c565b03611474576000826040015180602001905181019061140f9190612a49565b905061138f6040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b6003825160038111156114895761148961267c565b0361153557600082604001518060200190518101906114a89190612ac7565b905061138f6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b6000856115a95760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036116335760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b0385166116a85760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b816116b9576116b684611b46565b93505b82841161172e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b611738838561292a565b60008781526005602090815260408083206001600160a01b038a16845290915281208054929650869290919061176f908490612b92565b90915550939695505050505050565b600080611789611b78565b6040840151602001519091501561182e576040830151516001600160a01b031661180b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b60408301516020810151905161182e916001600160a01b03909116908390611c8c565b604051630624488560e41b81526001600160a01b0382169063624488509061185a908690600401612be9565b6020604051808303816000875af1158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d91906125d1565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516118df91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611997573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b5050505060008260200151604051602401611a2d9190612c67565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a6e9190859085611d60565b90508015611ac25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611ab591815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611b0191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611535573d6000803e3d6000fd5b6000611b727f000000000000000000000000000000000000000000000000000000000000000083611e37565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd9190612c7a565b9050611c21816001600160a01b031660009081526001602052604090205460ff1690565b15611c875760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906125d1565b611d0b9190612b92565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611fe6565b6000845a1015611db25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611e025760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611e1c57506000611e2f565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea491906125d1565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6591906125d1565b9050818111611fd35760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611fdd828261292a565b95945050505050565b600061203b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b89092919063ffffffff16565b80519091501561199757808060200190518101906120599190612c97565b6119975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611e2f848460008585600080866001600160a01b031685876040516120df9190612cb9565b60006040518083038185875af1925050503d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50915091506121328783838761213d565b979650505050505050565b606083156121ac5782516000036121a5576001600160a01b0385163b6121a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611e2f565b611e2f83838151156121c15781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c67565b6001600160a01b038116811461043e57600080fd5b8035611c87816121db565b6000806040838503121561220e57600080fd5b823591506020830135612220816121db565b809150509250929050565b600060c0828403121561223d57600080fd5b50919050565b60006020828403121561225557600080fd5b813561189d816121db565b60006020828403121561227257600080fd5b81356001600160401b0381111561228857600080fd5b8201610120818503121561189d57600080fd5b6000602082840312156122ad57600080fd5b5035919050565b600080600080606085870312156122ca57600080fd5b8435935060208501356122dc816121db565b925060408501356001600160401b03808211156122f857600080fd5b818701915087601f83011261230c57600080fd5b81358181111561231b57600080fd5b88602082850101111561232d57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123755761237561233c565b60405290565b60405161010081016001600160401b03811182821017156123755761237561233c565b604051601f8201601f191681016001600160401b03811182821017156123c6576123c661233c565b604052919050565b600060c082840312156123e057600080fd5b60405160c081018181106001600160401b03821117156124025761240261233c565b604052823581526020830135612417816121db565b6020820152604083013561242a816121db565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b038211156124c0576124c061233c565b50601f01601f191660200190565b600082601f8301126124df57600080fd5b81356124f26124ed826124a7565b61239e565b81815284602083860101111561250757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561253757600080fd5b61253f612352565b8235815261254f602084016121f0565b6020820152612560604084016121f0565b604082015260608301356001600160401b0381111561257e57600080fd5b61258a368286016124ce565b6060830152506080830135608082015260a083013560a08201526125b060c084016121f0565b60c082015260e0838101359082015261010092830135928101929092525090565b6000602082840312156125e357600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126ad578181015183820152602001612695565b50506000910152565b600081518084526126ce816020860160208601612692565b601f01601f19169290920160200192915050565b60208152600082516004811061270857634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611e2f60808401826126b6565b60208152600060018060a01b0380845116602084015260208401516080604085015261276060a08501826126b6565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127aa60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526127db6101608501836126b6565b9150608086015160c085015260a086015160e085015260c086015161010061280d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261283d57600080fd5b815161284b6124ed826124a7565b81815284602083860101111561286057600080fd5b611e2f826020830160208701612692565b60006020828403121561288357600080fd5b81516001600160401b038082111561289a57600080fd5b90830190606082860312156128ae57600080fd5b6040516060810181811083821117156128c9576128c961233c565b6040528251600481106128db57600080fd5b8152602083810151908201526040830151828111156128f957600080fd5b6129058782860161282c565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b7257611b72612914565b8051611c87816121db565b60006020828403121561295a57600080fd5b604051602081018181106001600160401b038211171561297c5761297c61233c565b604052825161298a816121db565b81529392505050565b6000602082840312156129a557600080fd5b81516001600160401b03808211156129bc57600080fd5b90830190608082860312156129d057600080fd5b6040516080810181811083821117156129eb576129eb61233c565b60405282516129f9816121db565b8152602083015182811115612a0d57600080fd5b612a198782860161282c565b6020830152506040830151604082015260608301519250612a39836121db565b6060810192909252509392505050565b600060a08284031215612a5b57600080fd5b60405160a081018181106001600160401b0382111715612a7d57612a7d61233c565b604052825181526020830151612a92816121db565b60208201526040830151612aa5816121db565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612ad957600080fd5b81516001600160401b0380821115612af057600080fd5b908301906101008286031215612b0557600080fd5b612b0d61237b565b82518152612b1d6020840161293d565b6020820152612b2e6040840161293d565b6040820152606083015182811115612b4557600080fd5b612b518782860161282c565b60608301525060808301516080820152612b6d60a0840161293d565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b7257611b72612914565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c4a610100840182612ba5565b905060a0840151601f198483030160e0850152611fdd82826126b6565b60208152600061189d60208301846126b6565b600060208284031215612c8c57600080fd5b815161189d816121db565b600060208284031215612ca957600080fd5b8151801515811461189d57600080fd5b60008251612ccb818460208701612692565b919091019291505056fea26469706673582212203253ac29536549a67c5007b33d908084e98ce7132d1362687e292e69774350b164736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/contracts/README.md b/contracts/README.md new file mode 100644 index 000000000..7826d4b0f --- /dev/null +++ b/contracts/README.md @@ -0,0 +1,48 @@ + +# Contract Structure + +The ERC20 and native token bridges built on top of Teleporter are composed of interfaces and abstract contracts that make them extendable to new implementations in the future. + +### `ITeleporterTokenBridge` +Interface that defines the events bridge contract implementations must emit. Also defines the message types and formats of messages between all implementations. + +### `IERC20Bridge` and `INativeTokenBridge` +Interfaces that define the external functions for interacting with bridge contract implementations of each type. ERC20 and native token bridge interfaces vary from each other in that the native token bridge functions are `payable` and do not take an explicit amount parameter (it is implied by `msg.value`), while the ERC20 token bridge functions are not `payable` and require the explicit amount parameter. Otherwise, they include the same functions. + +### `TeleporterTokenSource` +An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to br bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, but its accounting balances of how many tokens have been bridged to each respecitve destination gets updated. + +### `ERC20Source` +A concrete implementation of `TeleporterTokenSource` and `IERC20Bridge` that handles the locking and releasing of an ERC20 asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in the source ERC20 asset that it facilitates the bridging of. + +### `NativeTokenSource` +A concrete implementation of `TeleporterTokenSource` and `INativeTokenBridge` that handles the locking and release of the native EVM asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in a "wrapped native token" asset (i.e. WAVAX). The contract address of the wrapped native token contract to be used must be provided in its constructor. + +### `TeleporterTokenDestination` +An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on a destination chain that receives bridged assets from a `TeleporterTokenSource` instance. Handles receiving bridge messages from the specified token source contract to process token imports from the home chain (i.e mints), as well as burning tokens and sending messages to route them back to other chains. + +All messages sent by `TeleporterTokenDestination` instances are sent to the specified token source contract, whether they are to redeem the collateral on the home or chain or route the tokens to another destination chain. Routing tokens from one destination chain to another is referred to as a "multi-hop", where the tokens are first sent back to their token source contract to update its accounting, and then automatically routed on to their intended destination. + +`TeleporterTokenDestination` contracts allow for scaling token amounts, if the representative "wrapped" token is not a 1-to-1 equivalent of the backing asset. This token scaling can be used when the destination chain asset has a higher or lower denomincation than the source asset, such as allowing for a ERC20 source asset with a denomination of 6 to be used as the native EVM asset on a destination chain (with a denomination of 18). + +### `ERC20Destination` +A concrete implementation of `TeleporterTokenDestination`, `IERC20Bridge`, and `IERC20` that handles the minting and burning of a destination chain asset. Note that the `ERC20Destination` contract _is_ the "wrapped" ERC20 implementation itself, which is why it takes the `tokenName`, `tokenSymbol`, and `tokenDecimals` in its constructor. All of the ERC20 interface implementations are inherited from the standard OpenZeppelin ERC20 implementation, and can be overriden in other implementations if desired. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in kind, since the contract is an ERC20 token itself. + +### `NativeTokenDestination` +A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, and `IWrappedNativeToken` that handles the minting and burning the native EVM on the destination chain using the native minter precompile. Deployments of this contract must be given the permission mint native coins in the chains configuration. Note that the `NativeTokenDestination` is also an implementation of `IWrappedNativeToken` itself, which is why the `symbol` must be provided in its constructor. The optional Teleporter message fees used to incentives a relayer for messages sent by this contract are all paid using wrapped native token that the contract implements. + +Since the native minter precompile does not provide an interface for burning the native EVM asset, the "burn" functionality is implemented by locking the native asset in the contract itself in an un-redeemable manner. The contract also provides a `reportBurnedTxFees` interface in order to burn the home chain collateral that should also be made un-redeemable to account for tokens burnt on the destination chain to pay for transaction fees. + +To account for the need to bootstrap the chain using a bridged asset as its native token, the `NativeTokenDestination` takes the `intitialReserveImbalance` in its constructor, and does not mint that first amount of tokens that it recevies. To demonstrate this, the intended initialization flow is: + +1. Create a new blockchain with 100 native tokens allocated in its genesis block, and the pre-derived `NativeTokenDestination` contract address (based on the deployer nonce) set with the permission to mint native tokens using the native minter precompile. Note that the deployer account will need to be funded in order to deploy the `NativeTokenDestination` contract, and an account used to relay messages into this chain must also be funded to relay the first messages. +2. Deploy the `NativeTokenDestination` contract to the pre-derived address set in the blockchain configuration of step 1. The `initialReserveImbalance` should be 100, matching the number of tokens allocated in the genesis block that were not initially backed by collateral on the home chain. +3. Bridge 100 source tokens from the home chain to the new blockchain. These tokens will not be minted on the destination since they were pre-allocated in the genesis file. Instead, a `CollateralAdded` event will be emitted by the `NativeTokenDestination` contract. +4. Now that the `NativeTokenDestination` contract is fully collateralized, tokens can be moved normally in both directions across the bridge contracts. + +The `totalSupply` implementation of `NativeTokenDestination` takes into account: +- the initial reserve imbalance +- the number of native tokens that it has minted +- the number of native tokens that have been burned to pay for transaction fees +- the number of native tokens "burned" to be bridge back to the home chain, which are locked in it in perpetuity. + diff --git a/contracts/src/ERC20Destination.sol b/contracts/src/ERC20Destination.sol index 92f038a9a..71fea60c9 100644 --- a/contracts/src/ERC20Destination.sol +++ b/contracts/src/ERC20Destination.sol @@ -63,7 +63,7 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { /** * @notice For transfers to an `input.destinationBlockchainID` that is not the `sourceBlockchainID`, - * a multihop transfer is performed, where the tokens are sent back to the token source chain + * a multi-hop transfer is performed, where the tokens are sent back to the token source chain * first to check for bridge balance, and then forwarded to the final destination chain. * * @dev See {IERC20Bridge-send} diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index eb0a91ec4..be44a6841 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -67,13 +67,13 @@ abstract contract TeleporterTokenDestination is bool public immutable multiplyOnReceive; /** - * @notice Fixed gas cost for performing a multihop transfer on the `sourceBlockchainID`, + * @notice Fixed gas cost for performing a multi-hop transfer on the `sourceBlockchainID`, * before forwarding to the final destination bridge instance. */ uint256 public constant MULTIHOP_REQUIRED_GAS = 220_000; /** - * @notice The amount gas added to the required gas limit for a multihop call message + * @notice The amount gas added to the required gas limit for a multi-hop call message * for each byte of the recipient payload. */ uint256 public constant MULTIHOP_CALL_GAS_PER_BYTE = 1_000; @@ -148,9 +148,9 @@ abstract contract TeleporterTokenDestination is ); // If the destination blockchain is the source blockchain, - // no multihop is needed. Only the required gas limit for the Teleporter message back to + // no multi-hop is needed. Only the required gas limit for the Teleporter message back to // `sourceBlockchainID` is needed, which is provided by `input.requiredGasLimit`. - // Else, there will be a multihop transfer to the final destination. + // Else, there will be a multi-hop transfer to the final destination. // The first hop back to `sourceBlockchainID` requires `MULTIHOP_REQUIRED_GAS`, // and the second hop to the final destination requires `input.requiredGasLimit`. BridgeMessage memory message; diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index 05885b4b8..0728b6d0e 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -31,7 +31,7 @@ import {IWarpMessenger} from * @title TeleporterTokenSource * @dev Abstract contract for a Teleporter token bridge that sends tokens to {TeleporterTokenDestination} instances. * - * This contract also handles multihop transfers, where tokens sent from a {TeleporterTokenDestination} + * This contract also handles multi-hop transfers, where tokens sent from a {TeleporterTokenDestination} * instance are forwarded to another {TeleporterTokenDestination} instance. * * @custom:security-contact https://github.com/ava-labs/teleporter-token-bridge/blob/main/SECURITY.md @@ -182,7 +182,7 @@ abstract contract TeleporterTokenSource is * Verifies the Teleporter token bridge sending back tokens has enough balance, * and adjusts the bridge balance accordingly. If the final destination for this token * is this contract, the tokens are withdrawn and sent to the recipient. Otherwise, - * a multihop is performed, and the tokens are forwarded to the destination token bridge. + * a multi-hop is performed, and the tokens are forwarded to the destination token bridge. * Requirements: * * - `sourceBlockchainID` and `originSenderAddress` have enough bridge balance to send back. @@ -305,8 +305,8 @@ abstract contract TeleporterTokenSource is "TeleporterTokenSource: zero destination bridge address" ); - // If this send is not a multihop, deposit the funds sent from the user to the bridge, - // and set to adjusted amount after deposit. If it is a multihop, the amount is already + // If this send is not a multi-hop, deposit the funds sent from the user to the bridge, + // and set to adjusted amount after deposit. If it is a multi-hop, the amount is already // deposited. if (!isMultihop) { amount = _deposit(amount); diff --git a/contracts/src/interfaces/ITeleporterTokenBridge.sol b/contracts/src/interfaces/ITeleporterTokenBridge.sol index 2a704d926..5bdd56a01 100644 --- a/contracts/src/interfaces/ITeleporterTokenBridge.sol +++ b/contracts/src/interfaces/ITeleporterTokenBridge.sol @@ -18,7 +18,7 @@ import {ITeleporterReceiver} from "@teleporter/ITeleporterReceiver.sol"; * @param destinationBridgeAddress address of the destination token bridge instance * @param recipient address of the recipient on the destination chain * @param primaryFee amount of tokens to pay for Teleporter fee on the source chain - * @param secondaryFee amount of tokens to pay for Teleporter fee if a multihop is needed + * @param secondaryFee amount of tokens to pay for Teleporter fee if a multi-hop is needed * @param requiredGasLimit gas limit requirement for sending to a token bridge. * This is required because the gas requirement varies based on the token bridge instance * specified by `destinationBlockchainID` and `destinationBridgeAddress`. @@ -44,7 +44,7 @@ struct SendTokensInput { * which must be less than the requiredGasLimit of the message as a whole. * @param fallbackRecipient address where the bridged tokens are sent if the call to the recipient contract fails. * @param primaryFee amount of tokens to pay for Teleporter fee on the source chain - * @param secondaryFee amount of tokens to pay for Teleporter fee if a multihop is needed + * @param secondaryFee amount of tokens to pay for Teleporter fee if a multi-hop is needed */ struct SendAndCallInput { bytes32 destinationBlockchainID; diff --git a/contracts/test/ERC20SourceTests.t.sol b/contracts/test/ERC20SourceTests.t.sol index 769812de3..ced843f75 100644 --- a/contracts/test/ERC20SourceTests.t.sol +++ b/contracts/test/ERC20SourceTests.t.sol @@ -10,12 +10,9 @@ import {TeleporterTokenSourceTest} from "./TeleporterTokenSourceTests.t.sol"; import {IERC20SendAndCallReceiver} from "../src/interfaces/IERC20SendAndCallReceiver.sol"; import {ERC20Source} from "../src/ERC20Source.sol"; import {IERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/IERC20.sol"; -import {SafeERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/utils/SafeERC20.sol"; import {ExampleERC20} from "../lib/teleporter/contracts/src/Mocks/ExampleERC20.sol"; contract ERC20SourceTest is ERC20BridgeTest, TeleporterTokenSourceTest { - using SafeERC20 for IERC20; - ERC20Source public app; IERC20 public mockERC20; diff --git a/contracts/test/MockSendAndCallReceiverTest.t.sol b/contracts/test/MockSendAndCallReceiverTest.t.sol new file mode 100644 index 000000000..353241fdb --- /dev/null +++ b/contracts/test/MockSendAndCallReceiverTest.t.sol @@ -0,0 +1,63 @@ +// (c) 2024, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +// SPDX-License-Identifier: Ecosystem + +pragma solidity 0.8.18; + +import {Test} from "forge-std/Test.sol"; +import {MockERC20SendAndCallReceiver} from "../src/mocks/MockERC20SendAndCallReceiver.sol"; +import {MockNativeSendAndCallReceiver} from "../src/mocks/MockNativeSendAndCallReceiver.sol"; +import {IERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/IERC20.sol"; +import {ExampleERC20} from "../lib/teleporter/contracts/src/Mocks/ExampleERC20.sol"; + +contract MockERC20SendAndCallReceiverTest is Test { + IERC20 public erc20; + MockERC20SendAndCallReceiver public erc20SendAndCallReceiver; + + event TokensReceived(address token, uint256 amount, bytes payload); + + function setUp() public virtual { + erc20 = new ExampleERC20(); + erc20SendAndCallReceiver = new MockERC20SendAndCallReceiver(); + } + + function testRevert() public { + vm.expectRevert("MockERC20SendAndCallReceiver: empty payload"); + erc20SendAndCallReceiver.receiveTokens(address(erc20), 10, new bytes(0)); + } + + function testSuccess() public { + uint256 amount = 100; + bytes memory payload = hex"9876543210"; + erc20.approve(address(erc20SendAndCallReceiver), amount); + vm.expectEmit(true, true, true, true, address(erc20SendAndCallReceiver)); + emit TokensReceived(address(erc20), amount, payload); + erc20SendAndCallReceiver.receiveTokens(address(erc20), amount, payload); + assertEq(erc20.balanceOf(address(erc20SendAndCallReceiver)), amount); + } +} + +contract MockNativeSendAndCallReceiverTest is Test { + MockNativeSendAndCallReceiver public nativeSendAndCallReceiver; + + event TokensReceived(uint256 amount, bytes payload); + + function setUp() public virtual { + nativeSendAndCallReceiver = new MockNativeSendAndCallReceiver(); + } + + function testRevert() public { + vm.expectRevert("MockNativeSendAndCallReceiver: empty payload"); + nativeSendAndCallReceiver.receiveTokens(new bytes(0)); + } + + function testSuccess() public { + uint256 amount = 10; + bytes memory payload = hex"1234567890"; + vm.expectEmit(true, true, true, true, address(nativeSendAndCallReceiver)); + emit TokensReceived(amount, payload); + nativeSendAndCallReceiver.receiveTokens{value: 10}(payload); + assertEq(address(nativeSendAndCallReceiver).balance, amount); + } +} diff --git a/tests/flows/erc20_source_erc20_destination_multihop.go b/tests/flows/erc20_source_erc20_destination_multihop.go index ccb38fa42..e7e1bc752 100644 --- a/tests/flows/erc20_source_erc20_destination_multihop.go +++ b/tests/flows/erc20_source_erc20_destination_multihop.go @@ -17,8 +17,8 @@ import ( * Deploy a ERC20 token source on the primary network * Deploys ERC20Destination to Subnet A and Subnet B * Bridges C-Chain example ERC20 tokens to Subnet A - * Bridge tokens from Subnet A to Subnet B through multihop - * Bridge back tokens from Subnet B to Subnet A through multihop + * Bridge tokens from Subnet A to Subnet B through multi-hop + * Bridge back tokens from Subnet B to Subnet A through multi-hop */ func ERC20SourceERC20DestinationMultihop(network interfaces.Network) { cChainInfo := network.GetPrimaryNetworkInfo() @@ -126,7 +126,7 @@ func ERC20SourceERC20DestinationMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(balance).Should(Equal(bridgedAmount)) - // Multihop transfer to Subnet B + // Multi-hop transfer to Subnet B utils.SendERC20MultihopAndVerify( ctx, network, @@ -143,7 +143,7 @@ func ERC20SourceERC20DestinationMultihop(network interfaces.Network) { bridgedAmount, ) - // Multihop transfer back to Subnet A + // Multi-hop transfer back to Subnet A utils.SendERC20MultihopAndVerify( ctx, network, diff --git a/tests/flows/erc20_source_native_destination.go b/tests/flows/erc20_source_native_destination.go index a940accbb..ba4bb9ca6 100644 --- a/tests/flows/erc20_source_native_destination.go +++ b/tests/flows/erc20_source_native_destination.go @@ -18,8 +18,8 @@ import ( * Deploy a ERC20 token source on the primary network * Deploys NativeDestination to Subnet A and Subnet B * Bridges C-Chain example ERC20 tokens to Subnet A as Subnet A's native token - * Bridge tokens from Subnet A to Subnet B through multihop - * Bridge back tokens from Subnet B to Subnet A through multihop + * Bridge tokens from Subnet A to Subnet B through multi-hop + * Bridge back tokens from Subnet B to Subnet A through multi-hop */ func ERC20SourceNativeDestination(network interfaces.Network) { cChainInfo := network.GetPrimaryNetworkInfo() diff --git a/tests/flows/erc20_source_native_destination_multihop.go b/tests/flows/erc20_source_native_destination_multihop.go index 415e64706..e06fc41ba 100644 --- a/tests/flows/erc20_source_native_destination_multihop.go +++ b/tests/flows/erc20_source_native_destination_multihop.go @@ -17,8 +17,8 @@ import ( * Deploys NativeDestination to Subnet A and Subnet B * Bridges C-Chain example ERC20 tokens to Subnet A as Subnet A's native token * Bridges C-Chain example ERC20 tokens to Subnet B as Subnet B's native token to collateralize the bridge on Subnet B - * Bridge tokens from Subnet A to Subnet B through multihop - * Bridge back tokens from Subnet B to Subnet A through multihop + * Bridge tokens from Subnet A to Subnet B through multi-hop + * Bridge back tokens from Subnet B to Subnet A through multi-hop */ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { cChainInfo := network.GetPrimaryNetworkInfo() @@ -76,7 +76,7 @@ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey) - // These are set during the initial bridging, and used in the multihop transfers + // These are set during the initial bridging, and used in the multi-hop transfers var receivedAmountA, receivedAmountB *big.Int // Send tokens from C-Chain to Subnet A @@ -157,7 +157,7 @@ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { teleporterUtils.CheckBalance(ctx, recipientAddress, receivedAmountB, subnetBInfo.RPCClient) } - // Multihop transfer to Subnet B + // Multi-hop transfer to Subnet B // Send half of the received amount to account for gas expenses amountToSendA := new(big.Int).Div(receivedAmountA, big.NewInt(2)) @@ -180,7 +180,7 @@ func ERC20SourceNativeDestinationMultihop(network interfaces.Network) { // Again, send half of the received amount to account for gas expenses amountToSendB := new(big.Int).Div(amountToSendA, big.NewInt(2)) - // Multihop transfer back to Subnet A + // Multi-hop transfer back to Subnet A utils.SendNativeMultihopAndVerify( ctx, network, diff --git a/tests/flows/native_source_erc20_destination_multihop.go b/tests/flows/native_source_erc20_destination_multihop.go index 4007b424a..dcff94325 100644 --- a/tests/flows/native_source_erc20_destination_multihop.go +++ b/tests/flows/native_source_erc20_destination_multihop.go @@ -18,8 +18,8 @@ import ( * Deploy a native token source on the primary network * Deploys ERC20Destination to Subnet A and Subnet B * Bridges C-Chain native tokens to Subnet A - * Bridge tokens from Subnet A to Subnet B through multihop - * Brige back tokens from Subnet B to Subnet A through multihop + * Bridge tokens from Subnet A to Subnet B through multi-hop + * Brige back tokens from Subnet B to Subnet A through multi-hop */ func NativeSourceERC20DestinationMultihop(network interfaces.Network) { cChainInfo := network.GetPrimaryNetworkInfo() @@ -125,7 +125,7 @@ func NativeSourceERC20DestinationMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) Expect(balance).Should(Equal(bridgedAmount)) - // Send tokens from subnet A to recipient on subnet B through a multihop + // Send tokens from subnet A to recipient on subnet B through a multi-hop utils.SendERC20MultihopAndVerify( ctx, network, diff --git a/tests/flows/native_source_native_destination_multihop.go b/tests/flows/native_source_native_destination_multihop.go index aafb11fda..fe1c76d32 100644 --- a/tests/flows/native_source_native_destination_multihop.go +++ b/tests/flows/native_source_native_destination_multihop.go @@ -17,8 +17,8 @@ import ( * Deploys NativeDestination to Subnet A and Subnet B * Bridges native tokens from the C-Chain to Subnet A as Subnet A's native token * Bridges native tokens from the C-Chain to Subnet B as Subnet B's native token to collateralize the Subnet B bridge - * Bridge tokens from Subnet A to Subnet B through multihop - * Bridge back tokens from Subnet B to Subnet A through multihop + * Bridge tokens from Subnet A to Subnet B through multi-hop + * Bridge back tokens from Subnet B to Subnet A through multi-hop */ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { cChainInfo := network.GetPrimaryNetworkInfo() @@ -76,7 +76,7 @@ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { Expect(err).Should(BeNil()) recipientAddress := crypto.PubkeyToAddress(recipientKey.PublicKey) - // These are set during the initial bridging, and used in the multihop transfers + // These are set during the initial bridging, and used in the multi-hop transfers var receivedAmountA, receivedAmountB *big.Int // Send tokens from C-Chain to Subnet A @@ -153,7 +153,7 @@ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { teleporterUtils.CheckBalance(ctx, recipientAddress, receivedAmountB, subnetBInfo.RPCClient) } - // Multihop transfer to Subnet B + // Multi-hop transfer to Subnet B // Send half of the received amount to account for gas expenses amountToSendA := new(big.Int).Div(receivedAmountA, big.NewInt(2)) @@ -176,7 +176,7 @@ func NativeSourceNativeDestinationMultihop(network interfaces.Network) { // Again, send half of the received amount to account for gas expenses amountToSendB := new(big.Int).Div(amountToSendA, big.NewInt(2)) - // Multihop transfer back to Subnet A + // Multi-hop transfer back to Subnet A utils.SendNativeMultihopAndVerify( ctx, network, diff --git a/tests/local/e2e_test.go b/tests/local/e2e_test.go index 710936e72..c9a2f7014 100644 --- a/tests/local/e2e_test.go +++ b/tests/local/e2e_test.go @@ -85,12 +85,12 @@ var _ = ginkgo.Describe("[Teleporter Token Bridge integration tests]", func() { func() { flows.NativeSourceNativeDestination(LocalNetworkInstance) }) - ginkgo.It("Bridge an ERC20 token with ERC20Source multihop", + ginkgo.It("Bridge an ERC20 token with ERC20Source multi-hop", ginkgo.Label(erc20SourceLabel, erc20DestinationLabel, multiHopLabel), func() { flows.ERC20SourceERC20DestinationMultihop(LocalNetworkInstance) }) - ginkgo.It("Bridge an ERC20 token with NativeTokenSource multihop", + ginkgo.It("Bridge an ERC20 token with NativeTokenSource multi-hop", ginkgo.Label(nativeTokenSourceLabel, erc20DestinationLabel, multiHopLabel), func() { flows.NativeSourceERC20DestinationMultihop(LocalNetworkInstance) @@ -100,12 +100,12 @@ var _ = ginkgo.Describe("[Teleporter Token Bridge integration tests]", func() { func() { flows.ERC20SourceNativeDestination(LocalNetworkInstance) }) - ginkgo.It("Bridge a Native token with ERC20Source multihop", + ginkgo.It("Bridge a Native token with ERC20Source multi-hop", ginkgo.Label(erc20SourceLabel, nativeTokenDestinationLabel, multiHopLabel), func() { flows.ERC20SourceNativeDestinationMultihop(LocalNetworkInstance) }) - ginkgo.It("Bridge a native token to a native token multihop", + ginkgo.It("Bridge a native token to a native token multi-hop", ginkgo.Label(nativeTokenSourceLabel, nativeTokenDestinationLabel, multiHopLabel), func() { flows.NativeSourceNativeDestinationMultihop(LocalNetworkInstance) diff --git a/tests/utils/utils.go b/tests/utils/utils.go index 60a1959be..38502895c 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -538,7 +538,7 @@ func SendAndCallERC20Destination( return receipt, event.Amount } -// Send a native token from fromBridge to toBridge via multihop through the C-Chain +// Send a native token from fromBridge to toBridge via multi-hop through the C-Chain // Requires that both fromBridge and toBridge are fully collateralized // Requires that both fromBridge and toBridge have the same tokenMultiplier and multiplyOnReceive // with respect to the original asset on the C-Chain @@ -568,7 +568,7 @@ func SendNativeMultihopAndVerify( // Find the amount sent by fromBridge. This is before any scaling/unscaling is applied. bridgedAmount = new(big.Int).Sub(bridgedAmount, input.PrimaryFee) - // Send tokens through a multihop transfer + // Send tokens through a multi-hop transfer originReceipt, _ := SendNativeTokenDestination( ctx, fromSubnet, @@ -581,7 +581,7 @@ func SendNativeMultihopAndVerify( ) // Relay the first message back to the home-chain, in this case C-Chain, - // which then performs the multihop transfer to the destination chain + // which then performs the multi-hop transfer to the destination chain intermediateReceipt := network.RelayMessage( ctx, originReceipt, @@ -593,7 +593,7 @@ func SendNativeMultihopAndVerify( initialBalance, err := toSubnet.RPCClient.BalanceAt(ctx, recipientAddress, nil) Expect(err).Should(BeNil()) - // When we relay the above message to the home-chain, a multihop transfer + // When we relay the above message to the home-chain, a multi-hop transfer // is performed to the destination chain. Parse for the send tokens event // and relay to final destination. network.RelayMessage( @@ -643,7 +643,7 @@ func SendERC20MultihopAndVerify( RequiredGasLimit: DefaultERC20RequiredGasLimit, } - // Send tokens through a multihop transfer + // Send tokens through a multi-hop transfer originReceipt, bridgedAmount := SendERC20Destination( ctx, fromSubnet, @@ -655,7 +655,7 @@ func SendERC20MultihopAndVerify( ) // Relay the first message back to the home-chain, in this case C-Chain, - // which then performs the multihop transfer to the destination chain + // which then performs the multi-hop transfer to the destination chain intermediateReceipt := network.RelayMessage( ctx, originReceipt, @@ -664,7 +664,7 @@ func SendERC20MultihopAndVerify( true, ) - // When we relay the above message to the home-chain, a multihop transfer + // When we relay the above message to the home-chain, a multi-hop transfer // is performed to the destination chain. Parse for the send tokens event // and relay to final destination. destinationReceipt := network.RelayMessage( From 809d1ae6ff8811f6d032c5f2724a84b107bb961f Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 11:58:33 -0400 Subject: [PATCH 04/26] Update ABI Bindings --- abi-bindings/go/ERC20Destination/ERC20Destination.go | 2 +- abi-bindings/go/ERC20Source/ERC20Source.go | 2 +- .../go/NativeTokenDestination/NativeTokenDestination.go | 2 +- abi-bindings/go/NativeTokenSource/NativeTokenSource.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 78e7bf171..b2475aff5 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220d9599c7648afe6de453797e99690457306302d1c01584bdb8b17a3b7014021d764736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122050ec8e62a568ff5e1e8e9e357556ae67049417991f0d8850d5b5b721e59d961b64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index b1db942d2..9c13d09b8 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162003207380380620032078339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d61620004a6600039600081816102b901528181611775015281816117a1015281816117cf01528181611873015281816118e7015281816119c501526119f301526000818161023d0152818161095a0152610fee015260008181610277015261146f0152600081816101480152818161054c01528181610aa40152611a230152612d616000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b610130610113366004612202565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b610195610190366004612232565b6102db565b005b6101956101a536600461224f565b6103e0565b6101956101b8366004612232565b6103fe565b6101956101cb366004612280565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f7366004612232565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612299565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122e3565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af366004612232565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b81526004016103099061236b565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f23684900384018461244b565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b81526004016103099061236b565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f83612553565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190612600565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b81526004016103099061265d565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb8360000151846020015184866060015185611400565b915060006040518060600160405280600060038111156108dd576108dd6126ab565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b9565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612711565b604051602081830303815290604052815250611642565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190612600565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b81526004016103099061265d565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e0015185611400565b91506000604051806060016040528060016003811115610f4257610f426126ab565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612760565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b9565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127b2565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f891906128a0565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612959565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126ab565b0361125b57600082604001518060200190518101906111f49190612977565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161123991815260200190565b60405180910390a261125381600001518460200151611768565b505050505050565b600182516003811115611270576112706126ab565b0361129f576000826040015180602001905181019061128f91906129c2565b905061125381846020015161179c565b6002825160038111156112b4576112b46126ab565b0361133857600082604001518060200190518101906112d39190612a78565b90506112536040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b60038251600381111561134d5761134d6126ab565b036113f9576000826040015180602001905181019061136c9190612af6565b90506112536040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b60008561146d5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114f75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b03851661156c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b8161157d5761157a846119ec565b93505b8284116115f25760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115fc8385612959565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611633908490612bc1565b90915550939695505050505050565b60008061164d611a1e565b604084015160200151909150156116f2576040830151516001600160a01b03166116cf5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116f2916001600160a01b03909116908390611b32565b604051630624488560e41b81526001600160a01b0382169063624488509061171e908690600401612c18565b6020604051808303816000875af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612600565b9392505050565b6103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c17565b6117cb7f0000000000000000000000000000000000000000000000000000000000000000836000015183611b32565b60007f000000000000000000000000000000000000000000000000000000000000000082846020015160405160240161180693929190612c96565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b1790528401518451919250600091611846919084611c4c565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612600565b90506119127f000000000000000000000000000000000000000000000000000000000000000086600001516000611c63565b81156119645784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161195791815260200190565b60405180910390a26119ac565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516119a391815260200190565b60405180910390a25b80156113f95760608501516113f9906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c17565b6000611a187f000000000000000000000000000000000000000000000000000000000000000083611d78565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612cbd565b9050611ac7816001600160a01b031660009081526001602052604090205460ff1690565b15611b2d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190612600565b611bb19190612bc1565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ee0565b6040516001600160a01b038316602482015260448101829052611c4790849063a9059cbb60e01b90606401611be0565b505050565b6000611c5b8460008585611fb2565b949350505050565b801580611cdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612600565b155b611d485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c4790849063095ea7b360e01b90606401611be0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190612600565b9050611dfc6001600160a01b038516333086612087565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612600565b9050818111611ecd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ed78282612959565b95945050505050565b6000611f35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120bf9092919063ffffffff16565b805190915015611c475780806020019051810190611f539190612cda565b611c475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a10156120045760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b834710156120545760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206e57506000611c5b565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611be0565b6060611c5b848460008585600080866001600160a01b031685876040516120e69190612cfc565b60006040518083038185875af1925050503d8060008114612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b509150915061213987838387612144565b979650505050505050565b606083156121b35782516000036121ac576001600160a01b0385163b6121ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c5b565b611c5b83838151156121c85781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d18565b6001600160a01b038116811461050c57600080fd5b8035611b2d816121e2565b6000806040838503121561221557600080fd5b823591506020830135612227816121e2565b809150509250929050565b60006020828403121561224457600080fd5b8135611761816121e2565b60008082840360e081121561226357600080fd5b60c081121561227157600080fd5b50919360c08501359350915050565b60006020828403121561229257600080fd5b5035919050565b600080604083850312156122ac57600080fd5b82356001600160401b038111156122c257600080fd5b830161012081860312156122d557600080fd5b946020939093013593505050565b600080600080606085870312156122f957600080fd5b84359350602085013561230b816121e2565b925060408501356001600160401b038082111561232757600080fd5b818701915087601f83011261233b57600080fd5b81358181111561234a57600080fd5b88602082850101111561235c57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123f2576123f26123b9565b60405290565b60405161010081016001600160401b03811182821017156123f2576123f26123b9565b604051601f8201601f191681016001600160401b0381118282101715612443576124436123b9565b604052919050565b600060c0828403121561245d57600080fd5b60405160c081018181106001600160401b038211171561247f5761247f6123b9565b604052823581526020830135612494816121e2565b602082015260408301356124a7816121e2565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124ef576124ef6123b9565b50601f01601f191660200190565b600082601f83011261250e57600080fd5b813561252161251c826124d6565b61241b565b81815284602083860101111561253657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561256657600080fd5b61256e6123cf565b8235815261257e602084016121f7565b602082015261258f604084016121f7565b604082015260608301356001600160401b038111156125ad57600080fd5b6125b9368286016124fd565b6060830152506080830135608082015260a083013560a08201526125df60c084016121f7565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561261257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126dc5781810151838201526020016126c4565b50506000910152565b600081518084526126fd8160208601602086016126c1565b601f01601f19169290920160200192915050565b60208152600082516004811061273757634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5b60808401826126e5565b60208152600060018060a01b0380845116602084015260208401516080604085015261278f60a08501826126e5565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d960608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261280a6101608501836126e5565b9150608086015160c085015260a086015160e085015260c086015161010061283c818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286c57600080fd5b815161287a61251c826124d6565b81815284602083860101111561288f57600080fd5b611c5b8260208301602087016126c1565b6000602082840312156128b257600080fd5b81516001600160401b03808211156128c957600080fd5b90830190606082860312156128dd57600080fd5b6040516060810181811083821117156128f8576128f86123b9565b60405282516004811061290a57600080fd5b81526020838101519082015260408301518281111561292857600080fd5b6129348782860161285b565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1857611a18612943565b8051611b2d816121e2565b60006020828403121561298957600080fd5b604051602081018181106001600160401b03821117156129ab576129ab6123b9565b60405282516129b9816121e2565b81529392505050565b6000602082840312156129d457600080fd5b81516001600160401b03808211156129eb57600080fd5b90830190608082860312156129ff57600080fd5b604051608081018181108382111715612a1a57612a1a6123b9565b6040528251612a28816121e2565b8152602083015182811115612a3c57600080fd5b612a488782860161285b565b6020830152506040830151604082015260608301519250612a68836121e2565b6060810192909252509392505050565b600060a08284031215612a8a57600080fd5b60405160a081018181106001600160401b0382111715612aac57612aac6123b9565b604052825181526020830151612ac1816121e2565b60208201526040830151612ad4816121e2565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0857600080fd5b81516001600160401b0380821115612b1f57600080fd5b908301906101008286031215612b3457600080fd5b612b3c6123f8565b82518152612b4c6020840161296c565b6020820152612b5d6040840161296c565b6040820152606083015182811115612b7457600080fd5b612b808782860161285b565b60608301525060808301516080820152612b9c60a0840161296c565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1857611a18612943565b600081518084526020808501945080840160005b83811015612c0d5781516001600160a01b031687529582019590820190600101612be8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c79610100840182612bd4565b905060a0840151601f198483030160e0850152611ed782826126e5565b60018060a01b0384168152826020820152606060408201526000611ed760608301846126e5565b600060208284031215612ccf57600080fd5b8151611761816121e2565b600060208284031215612cec57600080fd5b8151801515811461176157600080fd5b60008251612d0e8184602087016126c1565b9190910192915050565b60208152600061176160208301846126e556fea26469706673582212208f17ecf10fbd04370933c1ed158f194a905ed796aa954615fd19208ec026cc8e64736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162003207380380620032078339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d61620004a6600039600081816102b901528181611775015281816117a1015281816117cf01528181611873015281816118e7015281816119c501526119f301526000818161023d0152818161095a0152610fee015260008181610277015261146f0152600081816101480152818161054c01528181610aa40152611a230152612d616000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b610130610113366004612202565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b610195610190366004612232565b6102db565b005b6101956101a536600461224f565b6103e0565b6101956101b8366004612232565b6103fe565b6101956101cb366004612280565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f7366004612232565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612299565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122e3565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af366004612232565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b81526004016103099061236b565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f23684900384018461244b565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b81526004016103099061236b565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f83612553565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190612600565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b81526004016103099061265d565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb8360000151846020015184866060015185611400565b915060006040518060600160405280600060038111156108dd576108dd6126ab565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b9565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612711565b604051602081830303815290604052815250611642565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190612600565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b81526004016103099061265d565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e0015185611400565b91506000604051806060016040528060016003811115610f4257610f426126ab565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612760565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b9565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127b2565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f891906128a0565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612959565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126ab565b0361125b57600082604001518060200190518101906111f49190612977565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161123991815260200190565b60405180910390a261125381600001518460200151611768565b505050505050565b600182516003811115611270576112706126ab565b0361129f576000826040015180602001905181019061128f91906129c2565b905061125381846020015161179c565b6002825160038111156112b4576112b46126ab565b0361133857600082604001518060200190518101906112d39190612a78565b90506112536040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b60038251600381111561134d5761134d6126ab565b036113f9576000826040015180602001905181019061136c9190612af6565b90506112536040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b60008561146d5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114f75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b03851661156c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b8161157d5761157a846119ec565b93505b8284116115f25760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115fc8385612959565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611633908490612bc1565b90915550939695505050505050565b60008061164d611a1e565b604084015160200151909150156116f2576040830151516001600160a01b03166116cf5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116f2916001600160a01b03909116908390611b32565b604051630624488560e41b81526001600160a01b0382169063624488509061171e908690600401612c18565b6020604051808303816000875af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612600565b9392505050565b6103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c17565b6117cb7f0000000000000000000000000000000000000000000000000000000000000000836000015183611b32565b60007f000000000000000000000000000000000000000000000000000000000000000082846020015160405160240161180693929190612c96565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b1790528401518451919250600091611846919084611c4c565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612600565b90506119127f000000000000000000000000000000000000000000000000000000000000000086600001516000611c63565b81156119645784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161195791815260200190565b60405180910390a26119ac565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516119a391815260200190565b60405180910390a25b80156113f95760608501516113f9906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c17565b6000611a187f000000000000000000000000000000000000000000000000000000000000000083611d78565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612cbd565b9050611ac7816001600160a01b031660009081526001602052604090205460ff1690565b15611b2d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190612600565b611bb19190612bc1565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ee0565b6040516001600160a01b038316602482015260448101829052611c4790849063a9059cbb60e01b90606401611be0565b505050565b6000611c5b8460008585611fb2565b949350505050565b801580611cdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612600565b155b611d485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c4790849063095ea7b360e01b90606401611be0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190612600565b9050611dfc6001600160a01b038516333086612087565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612600565b9050818111611ecd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ed78282612959565b95945050505050565b6000611f35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120bf9092919063ffffffff16565b805190915015611c475780806020019051810190611f539190612cda565b611c475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a10156120045760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b834710156120545760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206e57506000611c5b565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611be0565b6060611c5b848460008585600080866001600160a01b031685876040516120e69190612cfc565b60006040518083038185875af1925050503d8060008114612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b509150915061213987838387612144565b979650505050505050565b606083156121b35782516000036121ac576001600160a01b0385163b6121ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c5b565b611c5b83838151156121c85781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d18565b6001600160a01b038116811461050c57600080fd5b8035611b2d816121e2565b6000806040838503121561221557600080fd5b823591506020830135612227816121e2565b809150509250929050565b60006020828403121561224457600080fd5b8135611761816121e2565b60008082840360e081121561226357600080fd5b60c081121561227157600080fd5b50919360c08501359350915050565b60006020828403121561229257600080fd5b5035919050565b600080604083850312156122ac57600080fd5b82356001600160401b038111156122c257600080fd5b830161012081860312156122d557600080fd5b946020939093013593505050565b600080600080606085870312156122f957600080fd5b84359350602085013561230b816121e2565b925060408501356001600160401b038082111561232757600080fd5b818701915087601f83011261233b57600080fd5b81358181111561234a57600080fd5b88602082850101111561235c57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123f2576123f26123b9565b60405290565b60405161010081016001600160401b03811182821017156123f2576123f26123b9565b604051601f8201601f191681016001600160401b0381118282101715612443576124436123b9565b604052919050565b600060c0828403121561245d57600080fd5b60405160c081018181106001600160401b038211171561247f5761247f6123b9565b604052823581526020830135612494816121e2565b602082015260408301356124a7816121e2565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124ef576124ef6123b9565b50601f01601f191660200190565b600082601f83011261250e57600080fd5b813561252161251c826124d6565b61241b565b81815284602083860101111561253657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561256657600080fd5b61256e6123cf565b8235815261257e602084016121f7565b602082015261258f604084016121f7565b604082015260608301356001600160401b038111156125ad57600080fd5b6125b9368286016124fd565b6060830152506080830135608082015260a083013560a08201526125df60c084016121f7565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561261257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126dc5781810151838201526020016126c4565b50506000910152565b600081518084526126fd8160208601602086016126c1565b601f01601f19169290920160200192915050565b60208152600082516004811061273757634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5b60808401826126e5565b60208152600060018060a01b0380845116602084015260208401516080604085015261278f60a08501826126e5565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d960608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261280a6101608501836126e5565b9150608086015160c085015260a086015160e085015260c086015161010061283c818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286c57600080fd5b815161287a61251c826124d6565b81815284602083860101111561288f57600080fd5b611c5b8260208301602087016126c1565b6000602082840312156128b257600080fd5b81516001600160401b03808211156128c957600080fd5b90830190606082860312156128dd57600080fd5b6040516060810181811083821117156128f8576128f86123b9565b60405282516004811061290a57600080fd5b81526020838101519082015260408301518281111561292857600080fd5b6129348782860161285b565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1857611a18612943565b8051611b2d816121e2565b60006020828403121561298957600080fd5b604051602081018181106001600160401b03821117156129ab576129ab6123b9565b60405282516129b9816121e2565b81529392505050565b6000602082840312156129d457600080fd5b81516001600160401b03808211156129eb57600080fd5b90830190608082860312156129ff57600080fd5b604051608081018181108382111715612a1a57612a1a6123b9565b6040528251612a28816121e2565b8152602083015182811115612a3c57600080fd5b612a488782860161285b565b6020830152506040830151604082015260608301519250612a68836121e2565b6060810192909252509392505050565b600060a08284031215612a8a57600080fd5b60405160a081018181106001600160401b0382111715612aac57612aac6123b9565b604052825181526020830151612ac1816121e2565b60208201526040830151612ad4816121e2565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0857600080fd5b81516001600160401b0380821115612b1f57600080fd5b908301906101008286031215612b3457600080fd5b612b3c6123f8565b82518152612b4c6020840161296c565b6020820152612b5d6040840161296c565b6040820152606083015182811115612b7457600080fd5b612b808782860161285b565b60608301525060808301516080820152612b9c60a0840161296c565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1857611a18612943565b600081518084526020808501945080840160005b83811015612c0d5781516001600160a01b031687529582019590820190600101612be8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c79610100840182612bd4565b905060a0840151601f198483030160e0850152611ed782826126e5565b60018060a01b0384168152826020820152606060408201526000611ed760608301846126e5565b600060208284031215612ccf57600080fd5b8151611761816121e2565b600060208284031215612cec57600080fd5b8151801515811461176157600080fd5b60008251612d0e8184602087016126c1565b9190910192915050565b60208152600061176160208301846126e556fea26469706673582212200dc4eea22029fc24b6752faf885065fdc124453938bf9bac8d24288b6e8212be64736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index d3df37f35..4e38bdb95 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122099ddecdf01db3f5f4877f7c41b12f241c1de003486e0ca8912bea84c70a7743b64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220005675e8dd006ac2b80d10c69d8a1d6dead670ab3380a2ef19dc197e018aeb2e64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index ac6e6bf06..e9b58f7a6 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200319c3803806200319c8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d0b6200049160003960008181610402015281816118fd015281816119b20152611b4d0152600081816101070152818161034501528181610a8e0152610ede01526000818161039901526115ab01526000818161020a0152818161068801528181610f7d0152611b7d0152612d0b6000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121fb565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f336600461222b565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f366004612243565b610441565b610193610272366004612260565b61053d565b34801561028357600080fd5b50610193610292366004612243565b610551565b3480156102a357600080fd5b506101936102b236600461229b565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b50610323610305366004612243565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b506101936103823660046122b4565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb366004612243565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e610436368390038301836123ce565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e61054982612524565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906125d1565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a9061262e565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef836000015184602001518486606001518561153c565b91506000604051806060016040528060006003811115610a1157610a1161267c565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb61233c565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b91906126e2565b60405160208183030381529060405281525061177e565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a9061262e565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e001518561153c565b91506000604051806060016040528060016003811115610e3257610e3261267c565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e909190612731565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb61233c565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612783565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906125d1565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612871565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d8908261292a565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156113115761131161267c565b0361139757600082604001518060200190518101906113309190612948565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161137591815260200190565b60405180910390a261138f816000015184602001516118a4565b505050505050565b6001825160038111156113ac576113ac61267c565b036113db57600082604001518060200190518101906113cb9190612993565b905061138f81846020015161199c565b6002825160038111156113f0576113f061267c565b03611474576000826040015180602001905181019061140f9190612a49565b905061138f6040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b6003825160038111156114895761148961267c565b0361153557600082604001518060200190518101906114a89190612ac7565b905061138f6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b6000856115a95760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036116335760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b0385166116a85760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b816116b9576116b684611b46565b93505b82841161172e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b611738838561292a565b60008781526005602090815260408083206001600160a01b038a16845290915281208054929650869290919061176f908490612b92565b90915550939695505050505050565b600080611789611b78565b6040840151602001519091501561182e576040830151516001600160a01b031661180b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b60408301516020810151905161182e916001600160a01b03909116908390611c8c565b604051630624488560e41b81526001600160a01b0382169063624488509061185a908690600401612be9565b6020604051808303816000875af1158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d91906125d1565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516118df91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611997573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b5050505060008260200151604051602401611a2d9190612c67565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a6e9190859085611d60565b90508015611ac25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611ab591815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611b0191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611535573d6000803e3d6000fd5b6000611b727f000000000000000000000000000000000000000000000000000000000000000083611e37565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd9190612c7a565b9050611c21816001600160a01b031660009081526001602052604090205460ff1690565b15611c875760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906125d1565b611d0b9190612b92565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611fe6565b6000845a1015611db25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611e025760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611e1c57506000611e2f565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea491906125d1565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6591906125d1565b9050818111611fd35760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611fdd828261292a565b95945050505050565b600061203b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b89092919063ffffffff16565b80519091501561199757808060200190518101906120599190612c97565b6119975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611e2f848460008585600080866001600160a01b031685876040516120df9190612cb9565b60006040518083038185875af1925050503d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50915091506121328783838761213d565b979650505050505050565b606083156121ac5782516000036121a5576001600160a01b0385163b6121a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611e2f565b611e2f83838151156121c15781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c67565b6001600160a01b038116811461043e57600080fd5b8035611c87816121db565b6000806040838503121561220e57600080fd5b823591506020830135612220816121db565b809150509250929050565b600060c0828403121561223d57600080fd5b50919050565b60006020828403121561225557600080fd5b813561189d816121db565b60006020828403121561227257600080fd5b81356001600160401b0381111561228857600080fd5b8201610120818503121561189d57600080fd5b6000602082840312156122ad57600080fd5b5035919050565b600080600080606085870312156122ca57600080fd5b8435935060208501356122dc816121db565b925060408501356001600160401b03808211156122f857600080fd5b818701915087601f83011261230c57600080fd5b81358181111561231b57600080fd5b88602082850101111561232d57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123755761237561233c565b60405290565b60405161010081016001600160401b03811182821017156123755761237561233c565b604051601f8201601f191681016001600160401b03811182821017156123c6576123c661233c565b604052919050565b600060c082840312156123e057600080fd5b60405160c081018181106001600160401b03821117156124025761240261233c565b604052823581526020830135612417816121db565b6020820152604083013561242a816121db565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b038211156124c0576124c061233c565b50601f01601f191660200190565b600082601f8301126124df57600080fd5b81356124f26124ed826124a7565b61239e565b81815284602083860101111561250757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561253757600080fd5b61253f612352565b8235815261254f602084016121f0565b6020820152612560604084016121f0565b604082015260608301356001600160401b0381111561257e57600080fd5b61258a368286016124ce565b6060830152506080830135608082015260a083013560a08201526125b060c084016121f0565b60c082015260e0838101359082015261010092830135928101929092525090565b6000602082840312156125e357600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126ad578181015183820152602001612695565b50506000910152565b600081518084526126ce816020860160208601612692565b601f01601f19169290920160200192915050565b60208152600082516004811061270857634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611e2f60808401826126b6565b60208152600060018060a01b0380845116602084015260208401516080604085015261276060a08501826126b6565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127aa60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526127db6101608501836126b6565b9150608086015160c085015260a086015160e085015260c086015161010061280d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261283d57600080fd5b815161284b6124ed826124a7565b81815284602083860101111561286057600080fd5b611e2f826020830160208701612692565b60006020828403121561288357600080fd5b81516001600160401b038082111561289a57600080fd5b90830190606082860312156128ae57600080fd5b6040516060810181811083821117156128c9576128c961233c565b6040528251600481106128db57600080fd5b8152602083810151908201526040830151828111156128f957600080fd5b6129058782860161282c565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b7257611b72612914565b8051611c87816121db565b60006020828403121561295a57600080fd5b604051602081018181106001600160401b038211171561297c5761297c61233c565b604052825161298a816121db565b81529392505050565b6000602082840312156129a557600080fd5b81516001600160401b03808211156129bc57600080fd5b90830190608082860312156129d057600080fd5b6040516080810181811083821117156129eb576129eb61233c565b60405282516129f9816121db565b8152602083015182811115612a0d57600080fd5b612a198782860161282c565b6020830152506040830151604082015260608301519250612a39836121db565b6060810192909252509392505050565b600060a08284031215612a5b57600080fd5b60405160a081018181106001600160401b0382111715612a7d57612a7d61233c565b604052825181526020830151612a92816121db565b60208201526040830151612aa5816121db565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612ad957600080fd5b81516001600160401b0380821115612af057600080fd5b908301906101008286031215612b0557600080fd5b612b0d61237b565b82518152612b1d6020840161293d565b6020820152612b2e6040840161293d565b6040820152606083015182811115612b4557600080fd5b612b518782860161282c565b60608301525060808301516080820152612b6d60a0840161293d565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b7257611b72612914565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c4a610100840182612ba5565b905060a0840151601f198483030160e0850152611fdd82826126b6565b60208152600061189d60208301846126b6565b600060208284031215612c8c57600080fd5b815161189d816121db565b600060208284031215612ca957600080fd5b8151801515811461189d57600080fd5b60008251612ccb818460208701612692565b919091019291505056fea26469706673582212203253ac29536549a67c5007b33d908084e98ce7132d1362687e292e69774350b164736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b506040516200319c3803806200319c8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d0b6200049160003960008181610402015281816118fd015281816119b20152611b4d0152600081816101070152818161034501528181610a8e0152610ede01526000818161039901526115ab01526000818161020a0152818161068801528181610f7d0152611b7d0152612d0b6000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121fb565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f336600461222b565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f366004612243565b610441565b610193610272366004612260565b61053d565b34801561028357600080fd5b50610193610292366004612243565b610551565b3480156102a357600080fd5b506101936102b236600461229b565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b50610323610305366004612243565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b506101936103823660046122b4565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb366004612243565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e610436368390038301836123ce565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e61054982612524565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906125d1565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a9061262e565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef836000015184602001518486606001518561153c565b91506000604051806060016040528060006003811115610a1157610a1161267c565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb61233c565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b91906126e2565b60405160208183030381529060405281525061177e565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a9061262e565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e001518561153c565b91506000604051806060016040528060016003811115610e3257610e3261267c565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e909190612731565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb61233c565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612783565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906125d1565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612871565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d8908261292a565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156113115761131161267c565b0361139757600082604001518060200190518101906113309190612948565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161137591815260200190565b60405180910390a261138f816000015184602001516118a4565b505050505050565b6001825160038111156113ac576113ac61267c565b036113db57600082604001518060200190518101906113cb9190612993565b905061138f81846020015161199c565b6002825160038111156113f0576113f061267c565b03611474576000826040015180602001905181019061140f9190612a49565b905061138f6040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b6003825160038111156114895761148961267c565b0361153557600082604001518060200190518101906114a89190612ac7565b905061138f6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b6000856115a95760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036116335760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b0385166116a85760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b816116b9576116b684611b46565b93505b82841161172e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b611738838561292a565b60008781526005602090815260408083206001600160a01b038a16845290915281208054929650869290919061176f908490612b92565b90915550939695505050505050565b600080611789611b78565b6040840151602001519091501561182e576040830151516001600160a01b031661180b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b60408301516020810151905161182e916001600160a01b03909116908390611c8c565b604051630624488560e41b81526001600160a01b0382169063624488509061185a908690600401612be9565b6020604051808303816000875af1158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d91906125d1565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516118df91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611997573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b5050505060008260200151604051602401611a2d9190612c67565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a6e9190859085611d60565b90508015611ac25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611ab591815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611b0191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611535573d6000803e3d6000fd5b6000611b727f000000000000000000000000000000000000000000000000000000000000000083611e37565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd9190612c7a565b9050611c21816001600160a01b031660009081526001602052604090205460ff1690565b15611c875760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906125d1565b611d0b9190612b92565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611fe6565b6000845a1015611db25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611e025760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611e1c57506000611e2f565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea491906125d1565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6591906125d1565b9050818111611fd35760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611fdd828261292a565b95945050505050565b600061203b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b89092919063ffffffff16565b80519091501561199757808060200190518101906120599190612c97565b6119975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611e2f848460008585600080866001600160a01b031685876040516120df9190612cb9565b60006040518083038185875af1925050503d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50915091506121328783838761213d565b979650505050505050565b606083156121ac5782516000036121a5576001600160a01b0385163b6121a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611e2f565b611e2f83838151156121c15781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c67565b6001600160a01b038116811461043e57600080fd5b8035611c87816121db565b6000806040838503121561220e57600080fd5b823591506020830135612220816121db565b809150509250929050565b600060c0828403121561223d57600080fd5b50919050565b60006020828403121561225557600080fd5b813561189d816121db565b60006020828403121561227257600080fd5b81356001600160401b0381111561228857600080fd5b8201610120818503121561189d57600080fd5b6000602082840312156122ad57600080fd5b5035919050565b600080600080606085870312156122ca57600080fd5b8435935060208501356122dc816121db565b925060408501356001600160401b03808211156122f857600080fd5b818701915087601f83011261230c57600080fd5b81358181111561231b57600080fd5b88602082850101111561232d57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123755761237561233c565b60405290565b60405161010081016001600160401b03811182821017156123755761237561233c565b604051601f8201601f191681016001600160401b03811182821017156123c6576123c661233c565b604052919050565b600060c082840312156123e057600080fd5b60405160c081018181106001600160401b03821117156124025761240261233c565b604052823581526020830135612417816121db565b6020820152604083013561242a816121db565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b038211156124c0576124c061233c565b50601f01601f191660200190565b600082601f8301126124df57600080fd5b81356124f26124ed826124a7565b61239e565b81815284602083860101111561250757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561253757600080fd5b61253f612352565b8235815261254f602084016121f0565b6020820152612560604084016121f0565b604082015260608301356001600160401b0381111561257e57600080fd5b61258a368286016124ce565b6060830152506080830135608082015260a083013560a08201526125b060c084016121f0565b60c082015260e0838101359082015261010092830135928101929092525090565b6000602082840312156125e357600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126ad578181015183820152602001612695565b50506000910152565b600081518084526126ce816020860160208601612692565b601f01601f19169290920160200192915050565b60208152600082516004811061270857634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611e2f60808401826126b6565b60208152600060018060a01b0380845116602084015260208401516080604085015261276060a08501826126b6565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127aa60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526127db6101608501836126b6565b9150608086015160c085015260a086015160e085015260c086015161010061280d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261283d57600080fd5b815161284b6124ed826124a7565b81815284602083860101111561286057600080fd5b611e2f826020830160208701612692565b60006020828403121561288357600080fd5b81516001600160401b038082111561289a57600080fd5b90830190606082860312156128ae57600080fd5b6040516060810181811083821117156128c9576128c961233c565b6040528251600481106128db57600080fd5b8152602083810151908201526040830151828111156128f957600080fd5b6129058782860161282c565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b7257611b72612914565b8051611c87816121db565b60006020828403121561295a57600080fd5b604051602081018181106001600160401b038211171561297c5761297c61233c565b604052825161298a816121db565b81529392505050565b6000602082840312156129a557600080fd5b81516001600160401b03808211156129bc57600080fd5b90830190608082860312156129d057600080fd5b6040516080810181811083821117156129eb576129eb61233c565b60405282516129f9816121db565b8152602083015182811115612a0d57600080fd5b612a198782860161282c565b6020830152506040830151604082015260608301519250612a39836121db565b6060810192909252509392505050565b600060a08284031215612a5b57600080fd5b60405160a081018181106001600160401b0382111715612a7d57612a7d61233c565b604052825181526020830151612a92816121db565b60208201526040830151612aa5816121db565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612ad957600080fd5b81516001600160401b0380821115612af057600080fd5b908301906101008286031215612b0557600080fd5b612b0d61237b565b82518152612b1d6020840161293d565b6020820152612b2e6040840161293d565b6040820152606083015182811115612b4557600080fd5b612b518782860161282c565b60608301525060808301516080820152612b6d60a0840161293d565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b7257611b72612914565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c4a610100840182612ba5565b905060a0840151601f198483030160e0850152611fdd82826126b6565b60208152600061189d60208301846126b6565b600060208284031215612c8c57600080fd5b815161189d816121db565b600060208284031215612ca957600080fd5b8151801515811461189d57600080fd5b60008251612ccb818460208701612692565b919091019291505056fea264697066735822122061be975cc57ca31712241b468e1aca2d0344c9c252376ec9aa14b335307df7ad64736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. From ba14f8b32263fd37d118c56b007a030ecfe6dc85 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 11:59:28 -0400 Subject: [PATCH 05/26] Remove unnecessary whitespace --- contracts/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 7826d4b0f..9198e3bd8 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -1,4 +1,3 @@ - # Contract Structure The ERC20 and native token bridges built on top of Teleporter are composed of interfaces and abstract contracts that make them extendable to new implementations in the future. From e3b8c447334b6287666b552ab94fc7b0bfa70bde Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 12:12:50 -0400 Subject: [PATCH 06/26] Remove unnecessary period --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 9198e3bd8..f4418f697 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -43,5 +43,5 @@ The `totalSupply` implementation of `NativeTokenDestination` takes into account: - the initial reserve imbalance - the number of native tokens that it has minted - the number of native tokens that have been burned to pay for transaction fees -- the number of native tokens "burned" to be bridge back to the home chain, which are locked in it in perpetuity. +- the number of native tokens "burned" to be bridge back to the home chain, which are locked in it in perpetuity From a9a57c2404e0a3f5db2dbf5cec7fb210486aca43 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 12:16:57 -0400 Subject: [PATCH 07/26] Add more doc comments --- contracts/src/NativeTokenDestination.sol | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index 8dca14cd4..7af4e442e 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -119,6 +119,10 @@ contract NativeTokenDestination is */ uint256 public lastestBurnedFeesReported; + /** + * @dev When modifier is used, the function can only be called once the contract is fully collelateralized, + * account for the initialReserveImbalance. + */ modifier onlyWhenCollateralized() { require(_isCollateralized(), "NativeTokenDestination: contract undercollateralized"); _; @@ -150,10 +154,18 @@ contract NativeTokenDestination is burnedFeesReportingRewardPercentage = settings.burnedFeesReportingRewardPercentage; } + /** + * @dev Receives native token with no calldata provided. The tokens are credited to the sender + * by minting the amount of the IWrappedTokenNative representation. + */ receive() external payable { deposit(); } + /** + * @dev Fallback function for receiving native tokens. The tokens are credited to the sender + * by minting the amount of the IWrappedTokenNative representation. + */ fallback() external payable { deposit(); } From f8c8fd49bff2a5402c1436e8ae47d9a8d8039b2d Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 12:19:26 -0400 Subject: [PATCH 08/26] Update forge coverage report --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 10aef488f..4c1196d5a 100644 --- a/README.md +++ b/README.md @@ -53,23 +53,25 @@ Unit test coverage of the contracts can be viewed using `forge coverage`: ``` $ forge coverage [â ¢] Compiling... -[â Š] Compiling 67 files with 0.8.18 -[â ¢] Solc 0.8.18 finished in 4.95s +[â Š] Compiling 70 files with 0.8.18 +[â ¢] Solc 0.8.18 finished in 4.91s Compiler run successful! Analysing contracts... Running tests... | File | % Lines | % Statements | % Branches | % Funcs | |---------------------------------------------|-------------------|-------------------|------------------|-----------------| -| src/ERC20Destination.sol | 100.00% (17/17) | 100.00% (20/20) | 100.00% (4/4) | 100.00% (7/7) | +| src/ERC20Destination.sol | 100.00% (20/20) | 100.00% (22/22) | 100.00% (4/4) | 100.00% (7/7) | | src/ERC20Source.sol | 100.00% (14/14) | 100.00% (17/17) | 100.00% (4/4) | 100.00% (5/5) | -| src/NativeTokenDestination.sol | 100.00% (48/48) | 100.00% (62/62) | 100.00% (14/14) | 100.00% (11/11) | -| src/NativeTokenSource.sol | 100.00% (13/13) | 100.00% (14/14) | 100.00% (2/2) | 100.00% (5/5) | +| src/NativeTokenDestination.sol | 100.00% (56/56) | 100.00% (68/68) | 100.00% (14/14) | 100.00% (14/14) | +| src/NativeTokenSource.sol | 100.00% (14/14) | 100.00% (15/15) | 100.00% (2/2) | 100.00% (5/5) | | src/TeleporterTokenDestination.sol | 100.00% (58/58) | 100.00% (65/65) | 88.00% (44/50) | 100.00% (5/5) | | src/TeleporterTokenSource.sol | 100.00% (50/50) | 100.00% (55/55) | 97.22% (35/36) | 100.00% (4/4) | | src/mocks/ExampleWAVAX.sol | 100.00% (6/6) | 100.00% (6/6) | 100.00% (0/0) | 100.00% (3/3) | +| src/mocks/MockERC20SendAndCallReceiver.sol | 100.00% (3/3) | 100.00% (3/3) | 100.00% (2/2) | 100.00% (1/1) | +| src/mocks/MockNativeSendAndCallReceiver.sol | 100.00% (2/2) | 100.00% (2/2) | 100.00% (2/2) | 100.00% (1/1) | | src/utils/CallUtils.sol | 100.00% (8/8) | 100.00% (9/9) | 100.00% (6/6) | 100.00% (2/2) | | src/utils/SafeWrappedNativeTokenDeposit.sol | 100.00% (5/5) | 100.00% (8/8) | 100.00% (2/2) | 100.00% (1/1) | -| Total | 100.00% (219/219) | 100.00% (256/256) | 94.07% (111/118) | 100.00% (43/43) | +| Total | 100.00% (236/236) | 100.00% (270/270) | 94.26% (115/122) | 100.00% (48/48) | ``` ## E2E tests From 6c4f91fb0f6c8e85c8393361833e211ec6767517 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 12:20:20 -0400 Subject: [PATCH 09/26] ABI bindings --- .../go/NativeTokenDestination/NativeTokenDestination.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 4e38bdb95..aef058dd1 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220005675e8dd006ac2b80d10c69d8a1d6dead670ab3380a2ef19dc197e018aeb2e64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5c38038062004b5c833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3c83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b1c83398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b1c83398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edf62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613edf6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613319565b3480156102cd57600080fd5b506102e16102dc36600461334c565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613378565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b4366004613390565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c6104083660046133d1565b6109c8565b34801561041957600080fd5b5061026c6104283660046133ee565b610ac1565b61026c61043b366004613407565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e161049236600461334c565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e63660046133d1565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b3660046133ee565b610c93565b34801561052c57600080fd5b5061026c61053b3660046133ee565b610f93565b34801561054c57600080fd5b5061028c61055b3660046133d1565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d3660046133d1565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c36600461334c565b610fc7565b34801561066d57600080fd5b506102e161067c36600461334c565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b3366004613451565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f366004613481565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e36600461350a565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db3660046133d1565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a90613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613538565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b81526004016109379061356c565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b316135d6565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b5461099191906135d6565b905061099d82826135e9565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b81526004016109379061356c565b61094a610b5d82613739565b34611d68565b60003361090b818585610b7683836112a9565b610b8091906135d6565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135fc565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b8152600401610937906137e7565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a91906135e9565b905060006064610d8a7f00000000000000000000000000000000000000000000000000000000000000008461382b565b610d949190613842565b90506000610da282846135e9565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f31919061387a565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a90613538565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f00000000000000000000000000000000000000000000000000000000000000008461382b565b9050610911565b6110d87f000000000000000000000000000000000000000000000000000000000000000084613842565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906138c9565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b291906135d6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b8152600401610937906137e7565b6002600955600061156760608401604085016133d1565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e6a83398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b8152600401610937906138e2565b61160f82356115ff60408501602086016133d1565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d60408601602087016133d1565b6001600160a01b0316146116c35760405162461bcd60e51b815260040161093790613923565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061176791906133d1565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e260408601602087016133d1565b6001600160a01b0316036118085760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061184991906133d1565b6001600160a01b031681526020016118676060890160408a016133d1565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f31919061387a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061396e565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b8152600401610937906137e7565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b8152600401610937906138e2565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e6a833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8a83398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b815260040161093790613923565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d91906139d1565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b815260040161093790613923565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a39190613a23565b60405160208183030381529060405281525091508360600151516103e86121ca919061382b565b6121d79062035b606135d6565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119875761198761364a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613ab3565b80600b60008282546122d691906135d6565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613ba0565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906138c9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f991906138c9565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e8a83398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c6c565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613864565b036128d857600082604001518060200190518101906128849190613d10565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613864565b03612918576000826040015180602001905181019061290c9190613d5c565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8a83398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6a83398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a5082846135d6565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace83856135e9565b9350612ad984612ff3565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613e13565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf191906138c9565b612cfb91906135d6565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612ffd565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de981836135e9565b6000600a559150612e45565b6000612e0184836135e9565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b6040516327ad555d60e11b8152306004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b158015612eab57600080fd5b505af1158015612ebf573d6000803e3d6000fd5b5050505060008260200151604051602401612eda9190613319565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f1b91908590856130cf565b90508015612f6f5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6291815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fae91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000613052826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131a69092919063ffffffff16565b805190915015611d6357808060200190518101906130709190613e30565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156131215760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156131715760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b60000361318b5750600061319e565b600080600084516020860188888bf19150505b949350505050565b606061319e848460008585600080866001600160a01b031685876040516131cd9190613e4d565b60006040518083038185875af1925050503d806000811461320a576040519150601f19603f3d011682016040523d82523d6000602084013e61320f565b606091505b50915091506132208783838761322b565b979650505050505050565b6060831561329a578251600003613293576001600160a01b0385163b6132935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161319e565b61319e83838151156132af5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613319565b60005b838110156132e45781810151838201526020016132cc565b50506000910152565b600081518084526133058160208601602086016132c9565b601f01601f19169290920160200192915050565b6020815260006110d860208301846132ed565b6001600160a01b038116811461094a57600080fd5b8035612c778161332c565b6000806040838503121561335f57600080fd5b823561336a8161332c565b946020939093013593505050565b600060c0828403121561338a57600080fd5b50919050565b6000806000606084860312156133a557600080fd5b83356133b08161332c565b925060208401356133c08161332c565b929592945050506040919091013590565b6000602082840312156133e357600080fd5b81356110d88161332c565b60006020828403121561340057600080fd5b5035919050565b60006020828403121561341957600080fd5b813567ffffffffffffffff81111561343057600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561346457600080fd5b82359150602083013561347681613443565b809150509250929050565b6000806000806060858703121561349757600080fd5b8435935060208501356134a98161332c565b9250604085013567ffffffffffffffff808211156134c657600080fd5b818701915087601f8301126134da57600080fd5b8135818111156134e957600080fd5b8860208285010111156134fb57600080fd5b95989497505060200194505050565b6000806040838503121561351d57600080fd5b82356135288161332c565b915060208301356134768161332c565b600181811c9082168061354c57607f821691505b60208210810361338a57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610911576109116135c0565b81810381811115610911576109116135c0565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136845761368461364a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136b3576136b361364a565b604052919050565b600067ffffffffffffffff8211156136d5576136d561364a565b50601f01601f191660200190565b600082601f8301126136f457600080fd5b8135613707613702826136bb565b61368a565b81815284602083860101111561371c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561374c57600080fd5b613754613660565b8235815261376460208401613341565b602082015261377560408401613341565b6040820152606083013567ffffffffffffffff81111561379457600080fd5b6137a0368286016136e3565b6060830152506080830135608082015260a083013560a08201526137c660c08401613341565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610911576109116135c0565b60008261385f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138a057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261319e60808401826132ed565b6000602082840312156138db57600080fd5b5051919050565b6020808252603390820152600080516020613e6a833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8a83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139848161332c565b6001600160a01b0390811660208401526040850135906139a38261332c565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a0060a08501826132ed565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6e6101208501836132ed565b9150608085015160a085015260a0850151613a9460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ada60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b0b6101608501836132ed565b9150608086015160c085015260a086015160e085015260c0860151610100613b3d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b955781516001600160a01b031687529582019590820190600101613b70565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c01610100840182613b5c565b905060a0840151601f198483030160e0850152613c1e82826132ed565b95945050505050565b600082601f830112613c3857600080fd5b8151613c46613702826136bb565b818152846020838601011115613c5b57600080fd5b61319e8260208301602087016132c9565b600060208284031215613c7e57600080fd5b815167ffffffffffffffff80821115613c9657600080fd5b9083019060608286031215613caa57600080fd5b604051606081018181108382111715613cc557613cc561364a565b604052825160048110613cd757600080fd5b815260208381015190820152604083015182811115613cf557600080fd5b613d0187828601613c27565b60408301525095945050505050565b600060208284031215613d2257600080fd5b6040516020810181811067ffffffffffffffff82111715613d4557613d4561364a565b6040528251613d538161332c565b81529392505050565b600060208284031215613d6e57600080fd5b815167ffffffffffffffff80821115613d8657600080fd5b9083019060808286031215613d9a57600080fd5b604051608081018181108382111715613db557613db561364a565b6040528251613dc38161332c565b8152602083015182811115613dd757600080fd5b613de387828601613c27565b6020830152506040830151604082015260608301519250613e038361332c565b6060810192909252509392505050565b600060208284031215613e2557600080fd5b81516110d88161332c565b600060208284031215613e4257600080fd5b81516110d881613443565b60008251613e5f8184602087016132c9565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220188892631ca4537e0909175e3561278b6a2634e25baac2afc76a2f0d63f508fb64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. From 8f2542e0ffee437689c516069ff3ff09bb65af91 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 13:21:15 -0400 Subject: [PATCH 10/26] Add comment to mock receivers --- .../MockERC20SendAndCallReceiver.go | 2 +- .../MockNativeSendAndCallReceiver.go | 2 +- contracts/src/mocks/MockERC20SendAndCallReceiver.sol | 4 +++- contracts/src/mocks/MockNativeSendAndCallReceiver.sol | 4 +++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/abi-bindings/go/mocks/MockERC20SendAndCallReceiver/MockERC20SendAndCallReceiver.go b/abi-bindings/go/mocks/MockERC20SendAndCallReceiver/MockERC20SendAndCallReceiver.go index 2491501ab..9502fdbdd 100644 --- a/abi-bindings/go/mocks/MockERC20SendAndCallReceiver/MockERC20SendAndCallReceiver.go +++ b/abi-bindings/go/mocks/MockERC20SendAndCallReceiver/MockERC20SendAndCallReceiver.go @@ -32,7 +32,7 @@ var ( // MockERC20SendAndCallReceiverMetaData contains all meta data concerning the MockERC20SendAndCallReceiver contract. var MockERC20SendAndCallReceiverMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"TokensReceived\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610713806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80638bc1e07614610030575b600080fd5b61004361003e36600461052a565b610045565b005b7f0f611859dc94a66d9bec0e66c7485098c0d5e4662896ff2f523c47f962a7abef8484848460405161007a94939291906105bf565b60405180910390a1806100e85760405162461bcd60e51b815260206004820152602b60248201527f4d6f636b455243323053656e64416e6443616c6c52656365697665723a20656d60448201526a1c1d1e481c185e5b1bd85960aa1b60648201526084015b60405180910390fd5b6100f284846100f9565b5050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101669190610607565b905061017d6001600160a01b038516333086610263565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156101c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e89190610607565b905081811161024e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016100df565b6102588282610620565b925050505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526102bd9085906102c3565b50505050565b6000610318826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661039a9092919063ffffffff16565b80519091501561039557808060200190518101906103369190610641565b6103955760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100df565b505050565b60606103a984846000856103b1565b949350505050565b6060824710156104125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100df565b600080866001600160a01b0316858760405161042e919061068e565b60006040518083038185875af1925050503d806000811461046b576040519150601f19603f3d011682016040523d82523d6000602084013e610470565b606091505b50915091506104818783838761048c565b979650505050505050565b606083156104fb5782516000036104f4576001600160a01b0385163b6104f45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100df565b50816103a9565b6103a983838151156105105781518083602001fd5b8060405162461bcd60e51b81526004016100df91906106aa565b6000806000806060858703121561054057600080fd5b84356001600160a01b038116811461055757600080fd5b935060208501359250604085013567ffffffffffffffff8082111561057b57600080fd5b818701915087601f83011261058f57600080fd5b81358181111561059e57600080fd5b8860208285010111156105b057600080fd5b95989497505060200194505050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b60006020828403121561061957600080fd5b5051919050565b8181038181111561025d57634e487b7160e01b600052601160045260246000fd5b60006020828403121561065357600080fd5b8151801515811461066357600080fd5b9392505050565b60005b8381101561068557818101518382015260200161066d565b50506000910152565b600082516106a081846020870161066a565b9190910192915050565b60208152600082518060208401526106c981604085016020870161066a565b601f01601f1916919091016040019291505056fea26469706673582212200b3bd04f9ead7691ed1cc24b9a1a665b743874804d6fecb049352440a5fda07d64736f6c63430008120033", + Bin: "0x608060405234801561001057600080fd5b50610713806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80638bc1e07614610030575b600080fd5b61004361003e36600461052a565b610045565b005b7f0f611859dc94a66d9bec0e66c7485098c0d5e4662896ff2f523c47f962a7abef8484848460405161007a94939291906105bf565b60405180910390a1806100e85760405162461bcd60e51b815260206004820152602b60248201527f4d6f636b455243323053656e64416e6443616c6c52656365697665723a20656d60448201526a1c1d1e481c185e5b1bd85960aa1b60648201526084015b60405180910390fd5b6100f284846100f9565b5050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101669190610607565b905061017d6001600160a01b038516333086610263565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa1580156101c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e89190610607565b905081811161024e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016100df565b6102588282610620565b925050505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526102bd9085906102c3565b50505050565b6000610318826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661039a9092919063ffffffff16565b80519091501561039557808060200190518101906103369190610641565b6103955760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100df565b505050565b60606103a984846000856103b1565b949350505050565b6060824710156104125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100df565b600080866001600160a01b0316858760405161042e919061068e565b60006040518083038185875af1925050503d806000811461046b576040519150601f19603f3d011682016040523d82523d6000602084013e610470565b606091505b50915091506104818783838761048c565b979650505050505050565b606083156104fb5782516000036104f4576001600160a01b0385163b6104f45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100df565b50816103a9565b6103a983838151156105105781518083602001fd5b8060405162461bcd60e51b81526004016100df91906106aa565b6000806000806060858703121561054057600080fd5b84356001600160a01b038116811461055757600080fd5b935060208501359250604085013567ffffffffffffffff8082111561057b57600080fd5b818701915087601f83011261058f57600080fd5b81358181111561059e57600080fd5b8860208285010111156105b057600080fd5b95989497505060200194505050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b60006020828403121561061957600080fd5b5051919050565b8181038181111561025d57634e487b7160e01b600052601160045260246000fd5b60006020828403121561065357600080fd5b8151801515811461066357600080fd5b9392505050565b60005b8381101561068557818101518382015260200161066d565b50506000910152565b600082516106a081846020870161066a565b9190910192915050565b60208152600082518060208401526106c981604085016020870161066a565b601f01601f1916919091016040019291505056fea26469706673582212205a0b338b523b794463c94473e21b518e9749c98f9ddcd2a2c53cc46b805fa12264736f6c63430008120033", } // MockERC20SendAndCallReceiverABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/mocks/MockNativeSendAndCallReceiver/MockNativeSendAndCallReceiver.go b/abi-bindings/go/mocks/MockNativeSendAndCallReceiver/MockNativeSendAndCallReceiver.go index ec7a89191..cccaabb8d 100644 --- a/abi-bindings/go/mocks/MockNativeSendAndCallReceiver/MockNativeSendAndCallReceiver.go +++ b/abi-bindings/go/mocks/MockNativeSendAndCallReceiver/MockNativeSendAndCallReceiver.go @@ -32,7 +32,7 @@ var ( // MockNativeSendAndCallReceiverMetaData contains all meta data concerning the MockNativeSendAndCallReceiver contract. var MockNativeSendAndCallReceiverMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"TokensReceived\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe60806040526004361061001d5760003560e01c80628a403e14610022575b600080fd5b6100356100303660046100e0565b610037565b005b7f7aaf2e01aab6b767f76075e0fefc4618cf6b4a3b7597d1e81b914eb66175655b34838360405161006a93929190610152565b60405180910390a160008190036100dc5760405162461bcd60e51b815260206004820152602c60248201527f4d6f636b4e617469766553656e64416e6443616c6c52656365697665723a206560448201526b1b5c1d1e481c185e5b1bd85960a21b606482015260840160405180910390fd5b5050565b600080602083850312156100f357600080fd5b823567ffffffffffffffff8082111561010b57600080fd5b818501915085601f83011261011f57600080fd5b81358181111561012e57600080fd5b86602082850101111561014057600080fd5b60209290920196919550909350505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea26469706673582212203b9a7303a3c2148c218936e8bd84202c5b69e3bf6350af291764eb900955097064736f6c63430008120033", + Bin: "0x608060405234801561001057600080fd5b506101be806100206000396000f3fe60806040526004361061001d5760003560e01c80628a403e14610022575b600080fd5b6100356100303660046100e0565b610037565b005b7f7aaf2e01aab6b767f76075e0fefc4618cf6b4a3b7597d1e81b914eb66175655b34838360405161006a93929190610152565b60405180910390a160008190036100dc5760405162461bcd60e51b815260206004820152602c60248201527f4d6f636b4e617469766553656e64416e6443616c6c52656365697665723a206560448201526b1b5c1d1e481c185e5b1bd85960a21b606482015260840160405180910390fd5b5050565b600080602083850312156100f357600080fd5b823567ffffffffffffffff8082111561010b57600080fd5b818501915085601f83011261011f57600080fd5b81358181111561012e57600080fd5b86602082850101111561014057600080fd5b60209290920196919550909350505050565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220e353580d1544dfd9d11c06e3d8e56a158e7fe4d731fc150ee4b99c19ae01be5e64736f6c63430008120033", } // MockNativeSendAndCallReceiverABI is the input ABI used to generate the binding from. diff --git a/contracts/src/mocks/MockERC20SendAndCallReceiver.sol b/contracts/src/mocks/MockERC20SendAndCallReceiver.sol index 3b3e1b65f..88291c773 100644 --- a/contracts/src/mocks/MockERC20SendAndCallReceiver.sol +++ b/contracts/src/mocks/MockERC20SendAndCallReceiver.sol @@ -16,7 +16,9 @@ import {IERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/ERC20.sol"; */ /** - * @notice TODO + * @notice This is mock implementation of {receiveTokens} to be used in tests. + * This contract DOES NOT provide a mechanism for accessing the tokens transfered to it. + * Real implementations must ensure that tokens are properly handled and not incorrectly locked. */ contract MockERC20SendAndCallReceiver is IERC20SendAndCallReceiver { using SafeERC20 for IERC20; diff --git a/contracts/src/mocks/MockNativeSendAndCallReceiver.sol b/contracts/src/mocks/MockNativeSendAndCallReceiver.sol index af56e6c3d..93520f5e6 100644 --- a/contracts/src/mocks/MockNativeSendAndCallReceiver.sol +++ b/contracts/src/mocks/MockNativeSendAndCallReceiver.sol @@ -13,7 +13,9 @@ import {INativeSendAndCallReceiver} from "../interfaces/INativeSendAndCallReceiv */ /** - * @notice TODO + * @notice This is mock implementation of {receiveTokens} to be used in tests. + * This contract DOES NOT provide a mechanism for accessing the tokens transfered to it. + * Real implementations must ensure that tokens are properly handled and not incorrectly locked. */ contract MockNativeSendAndCallReceiver is INativeSendAndCallReceiver { /** From 91da3878db72b005d3fa01e3ff40b86713e72fd4 Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:42:06 -0400 Subject: [PATCH 11/26] Update contracts/README.md Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index f4418f697..8a5616a53 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -9,7 +9,7 @@ Interface that defines the events bridge contract implementations must emit. Als Interfaces that define the external functions for interacting with bridge contract implementations of each type. ERC20 and native token bridge interfaces vary from each other in that the native token bridge functions are `payable` and do not take an explicit amount parameter (it is implied by `msg.value`), while the ERC20 token bridge functions are not `payable` and require the explicit amount parameter. Otherwise, they include the same functions. ### `TeleporterTokenSource` -An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to br bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, but its accounting balances of how many tokens have been bridged to each respecitve destination gets updated. +An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to be bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, but its accounting balances of how many tokens have been bridged to each respecitve destination gets updated. ### `ERC20Source` A concrete implementation of `TeleporterTokenSource` and `IERC20Bridge` that handles the locking and releasing of an ERC20 asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in the source ERC20 asset that it facilitates the bridging of. From 57b04876ed0f9f49b02c827b8142a3573d47d701 Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:42:16 -0400 Subject: [PATCH 12/26] Update contracts/README.md Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 8a5616a53..92e43d59e 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -15,7 +15,7 @@ An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on A concrete implementation of `TeleporterTokenSource` and `IERC20Bridge` that handles the locking and releasing of an ERC20 asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in the source ERC20 asset that it facilitates the bridging of. ### `NativeTokenSource` -A concrete implementation of `TeleporterTokenSource` and `INativeTokenBridge` that handles the locking and release of the native EVM asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in a "wrapped native token" asset (i.e. WAVAX). The contract address of the wrapped native token contract to be used must be provided in its constructor. +A concrete implementation of `TeleporterTokenSource` and `INativeTokenBridge` that handles the locking and release of the native EVM asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in a "wrapped native token" asset (e.g. WAVAX for the case in which AVAX is the native token). The contract address of the wrapped native token contract to be used must be provided in its constructor. ### `TeleporterTokenDestination` An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on a destination chain that receives bridged assets from a `TeleporterTokenSource` instance. Handles receiving bridge messages from the specified token source contract to process token imports from the home chain (i.e mints), as well as burning tokens and sending messages to route them back to other chains. From ef390fc1d2c41e723928d972cc5c1fd6939babed Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 17:46:52 -0400 Subject: [PATCH 13/26] README wording fix --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 92e43d59e..d9dd81da7 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -9,7 +9,7 @@ Interface that defines the events bridge contract implementations must emit. Als Interfaces that define the external functions for interacting with bridge contract implementations of each type. ERC20 and native token bridge interfaces vary from each other in that the native token bridge functions are `payable` and do not take an explicit amount parameter (it is implied by `msg.value`), while the ERC20 token bridge functions are not `payable` and require the explicit amount parameter. Otherwise, they include the same functions. ### `TeleporterTokenSource` -An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to be bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, but its accounting balances of how many tokens have been bridged to each respecitve destination gets updated. +An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to be bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, so it simply updates the accounting of the transferred balances to each respective destination. ### `ERC20Source` A concrete implementation of `TeleporterTokenSource` and `IERC20Bridge` that handles the locking and releasing of an ERC20 asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in the source ERC20 asset that it facilitates the bridging of. From 184d44b8483cf8a58babc57ae1c41e2268bd43df Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:47:12 -0400 Subject: [PATCH 14/26] Update contracts/README.md Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 92e43d59e..98c9172a3 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -28,7 +28,7 @@ All messages sent by `TeleporterTokenDestination` instances are sent to the spec A concrete implementation of `TeleporterTokenDestination`, `IERC20Bridge`, and `IERC20` that handles the minting and burning of a destination chain asset. Note that the `ERC20Destination` contract _is_ the "wrapped" ERC20 implementation itself, which is why it takes the `tokenName`, `tokenSymbol`, and `tokenDecimals` in its constructor. All of the ERC20 interface implementations are inherited from the standard OpenZeppelin ERC20 implementation, and can be overriden in other implementations if desired. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in kind, since the contract is an ERC20 token itself. ### `NativeTokenDestination` -A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, and `IWrappedNativeToken` that handles the minting and burning the native EVM on the destination chain using the native minter precompile. Deployments of this contract must be given the permission mint native coins in the chains configuration. Note that the `NativeTokenDestination` is also an implementation of `IWrappedNativeToken` itself, which is why the `symbol` must be provided in its constructor. The optional Teleporter message fees used to incentives a relayer for messages sent by this contract are all paid using wrapped native token that the contract implements. +A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, and `IWrappedNativeToken` that handles the minting and burning the native EVM on the destination chain using the native minter precompile. Deployments of this contract must be given the permission mint native coins in the chains configuration. Note that the `NativeTokenDestination` is also an implementation of `IWrappedNativeToken` itself, which is why the `symbol` must be provided in its constructor. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid using the wrapped native token that the contract implements. Since the native minter precompile does not provide an interface for burning the native EVM asset, the "burn" functionality is implemented by locking the native asset in the contract itself in an un-redeemable manner. The contract also provides a `reportBurnedTxFees` interface in order to burn the home chain collateral that should also be made un-redeemable to account for tokens burnt on the destination chain to pay for transaction fees. From c7c5992389c6be0369c6e8dc9657813b3b0d5a95 Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:47:41 -0400 Subject: [PATCH 15/26] Update contracts/README.md Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 98c9172a3..b82a0ac9e 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -32,7 +32,7 @@ A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, Since the native minter precompile does not provide an interface for burning the native EVM asset, the "burn" functionality is implemented by locking the native asset in the contract itself in an un-redeemable manner. The contract also provides a `reportBurnedTxFees` interface in order to burn the home chain collateral that should also be made un-redeemable to account for tokens burnt on the destination chain to pay for transaction fees. -To account for the need to bootstrap the chain using a bridged asset as its native token, the `NativeTokenDestination` takes the `intitialReserveImbalance` in its constructor, and does not mint that first amount of tokens that it recevies. To demonstrate this, the intended initialization flow is: +To account for the need to bootstrap the chain using a bridged asset as its native token, the `NativeTokenDestination` takes the `intitialReserveImbalance` in its constructor, and does not mint that first amount of tokens that it recevies. The following example demonstrates the intended initialization flow: 1. Create a new blockchain with 100 native tokens allocated in its genesis block, and the pre-derived `NativeTokenDestination` contract address (based on the deployer nonce) set with the permission to mint native tokens using the native minter precompile. Note that the deployer account will need to be funded in order to deploy the `NativeTokenDestination` contract, and an account used to relay messages into this chain must also be funded to relay the first messages. 2. Deploy the `NativeTokenDestination` contract to the pre-derived address set in the blockchain configuration of step 1. The `initialReserveImbalance` should be 100, matching the number of tokens allocated in the genesis block that were not initially backed by collateral on the home chain. From 842d91013493c474a41c54738f5fb3949a149804 Mon Sep 17 00:00:00 2001 From: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:47:54 -0400 Subject: [PATCH 16/26] Update contracts/README.md Co-authored-by: cam-schultz <78878559+cam-schultz@users.noreply.github.com> Signed-off-by: Michael Kaplan <55204436+michaelkaplan13@users.noreply.github.com> --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index b82a0ac9e..bcec7237a 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -43,5 +43,5 @@ The `totalSupply` implementation of `NativeTokenDestination` takes into account: - the initial reserve imbalance - the number of native tokens that it has minted - the number of native tokens that have been burned to pay for transaction fees -- the number of native tokens "burned" to be bridge back to the home chain, which are locked in it in perpetuity +- the number of native tokens "burned" to be bridged back to the home chain, which are locked in the `NativeTokenDestination` contract in perpetuity From 6643d74e4e95320bbd0fe4bfdcfe5c4478eb527e Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Mon, 15 Apr 2024 17:54:30 -0400 Subject: [PATCH 17/26] Update README wording --- contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/README.md b/contracts/README.md index 3845233b8..043444af0 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -36,7 +36,7 @@ To account for the need to bootstrap the chain using a bridged asset as its nati 1. Create a new blockchain with 100 native tokens allocated in its genesis block, and the pre-derived `NativeTokenDestination` contract address (based on the deployer nonce) set with the permission to mint native tokens using the native minter precompile. Note that the deployer account will need to be funded in order to deploy the `NativeTokenDestination` contract, and an account used to relay messages into this chain must also be funded to relay the first messages. 2. Deploy the `NativeTokenDestination` contract to the pre-derived address set in the blockchain configuration of step 1. The `initialReserveImbalance` should be 100, matching the number of tokens allocated in the genesis block that were not initially backed by collateral on the home chain. -3. Bridge 100 source tokens from the home chain to the new blockchain. These tokens will not be minted on the destination since they were pre-allocated in the genesis file. Instead, a `CollateralAdded` event will be emitted by the `NativeTokenDestination` contract. +3. Bridge at least 100 source tokens from the home chain to the new blockchain. The first 100 tokens bridged, which are possibly moved in multiple independent transfers, will not be minted on the destination since they were pre-allocated in the genesis file. Instead, a `CollateralAdded` event will be emitted by the `NativeTokenDestination` contract. 4. Now that the `NativeTokenDestination` contract is fully collateralized, tokens can be moved normally in both directions across the bridge contracts. The `totalSupply` implementation of `NativeTokenDestination` takes into account: From 0634ed03bb0fc0b20e6da44db3a941fc5a0a577a Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 12:15:10 -0400 Subject: [PATCH 18/26] Multi-hop incremental gas cost per word --- .../go/ERC20Destination/ERC20Destination.go | 73 +++++++++++++------ .../NativeTokenDestination.go | 73 +++++++++++++------ contracts/src/TeleporterTokenDestination.sol | 26 +++++-- .../TeleporterTokenDestinationTests.t.sol | 18 ++++- 4 files changed, 138 insertions(+), 52 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index b2475aff5..528cc53d1 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -54,8 +54,8 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122050ec8e62a568ff5e1e8e9e357556ae67049417991f0d8850d5b5b721e59d961b64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b506040516200411838038062004118833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b81526020600482015260356024820152600080516020620040f883398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b81526020600482015260356024820152600080516020620040f883398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161369162000a67600039600061031101526000818161029901526108f70152600081816104580152818161092201526109530152600081816104fa0152818161109d015281816113430152818161191201528181611b5e0152611ce10152600081816102d30152818161106d0152818161131d015281816118eb01528181611b380152611c6b015260008181610492015281816111db01526119ee01526000818161025a0152818161099401528181611464015261239a01526136916000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104bc578063f2fde38b146104cf578063f3f981d8146104e2578063f5ea0603146104f557600080fd5b8063ba3f5a1214610453578063c868efaa1461047a578063d127dc9b1461048d578063d2cc7a70146104b457600080fd5b8063a457c2d7116100de578063a457c2d714610407578063a9059cbb1461041a578063b51cff1b1461042d578063b94485871461044057600080fd5b8063715018a6146103ba5780638da5cb5b146103c257806395d89b41146103d357806397314297146103db57600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e14610361578063525975e6146103745780635eb995141461037e57806370a082311461039157600080fd5b80632b0d8f18146102f5578063313ce5671461030a57806332709bc11461033b578063395093511461034e57600080fd5b80631a7f5bec116101c35780631a7f5bec146102555780631ce220751461029457806323b872dd146102bb57806329b7b3fd146102ce57600080fd5b806306fdde03146101f5578063095ea7b31461021357806315beb59f1461023657806318160ddd1461024d575b600080fd5b6101fd61051c565b60405161020a9190612aa3565b60405180910390f35b610226610221366004612ad6565b6105ae565b604051901515815260200161020a565b61023f61213481565b60405190815260200161020a565b60075461023f565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b6102266102c9366004612b02565b6105c8565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610303366004612b43565b6105ec565b005b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020a565b610308610349366004612b60565b6106f1565b61022661035c366004612ad6565b6106ff565b61030861036f366004612b43565b610721565b61023f62035b6081565b61030861038c366004612b91565b61081e565b61023f61039f366004612b43565b6001600160a01b031660009081526005602052604090205490565b610308610832565b6003546001600160a01b031661027c565b6101fd610846565b6102266103e9366004612b43565b6001600160a01b031660009081526001602052604090205460ff1690565b610226610415366004612ad6565b610855565b610226610428366004612ad6565b6108d0565b61030861043b366004612baa565b6108de565b61023f61044e366004612bf5565b6108f0565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610488366004612c25565b61097f565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461023f565b61023f6104ca366004612cae565b610b49565b6103086104dd366004612b43565b610b74565b61023f6104f0366004612b91565b610bea565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b60606008805461052b90612cdc565b80601f016020809104026020016040519081016040528092919081815260200182805461055790612cdc565b80156105a45780601f10610579576101008083540402835291602001916105a4565b820191906000526020600020905b81548152906001019060200180831161058757829003601f168201915b5050505050905090565b6000336105bc818585610c13565b60019150505b92915050565b6000336105d6858285610d37565b6105e1858585610dab565b506001949350505050565b6105f4610f56565b6001600160a01b0381166106235760405162461bcd60e51b815260040161061a90612d16565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161061a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106fb8282610f5e565b5050565b6000336105bc8185856107128383610b49565b61071c9190612d7a565b610c13565b610729610f56565b6001600160a01b03811661074f5760405162461bcd60e51b815260040161061a90612d16565b6001600160a01b03811660009081526001602052604090205460ff166107c95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161061a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610826610f56565b61082f81611460565b50565b61083a611600565b610844600061165a565b565b60606009805461052b90612cdc565b600033816108638286610b49565b9050838110156108c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161061a565b6105e18286868403610c13565b6000336105bc818585610dab565b6106fb6108ea83612e7c565b826116ac565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361094e576109477f000000000000000000000000000000000000000000000000000000000000000084612f2a565b90506105c2565b6109787f000000000000000000000000000000000000000000000000000000000000000084612f57565b9392505050565b610987611c10565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190612f6b565b1015610a895760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161061a565b610a92336103e9565b15610af85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161061a565b610b39848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c6992505050565b610b436001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b7c611600565b6001600160a01b038116610be15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061a565b61082f8161165a565b600080610bf8602084612f57565b9050610c05602084612f84565b156105c25761097881612f98565b6001600160a01b038316610c755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161061a565b6001600160a01b038216610cd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161061a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610d438484610b49565b90506000198114610b435781811015610d9e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161061a565b610b438484848403610c13565b6001600160a01b038316610e0f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161061a565b6001600160a01b038216610e715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161061a565b6001600160a01b03831660009081526005602052604090205481811015610ee95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161061a565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f499086815260200190565b60405180910390a3610b43565b610844611600565b600160045414610f805760405162461bcd60e51b815260040161061a90612fb1565b60026004556000610f976060840160408501612b43565b6001600160a01b031603610ff65760405162461bcd60e51b8152602060048201526032602482015260008051602061361c83398151915260448201527120726563697069656e74206164647265737360701b606482015260840161061a565b8160a0013560000361101a5760405162461bcd60e51b815260040161061a90612ff5565b61103f823561102f6040850160208601612b43565b8385606001358660800135611ec2565b90506110666040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036111d9576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110cd6040860160208701612b43565b6001600160a01b0316146110f35760405162461bcd60e51b815260040161061a90613036565b6080840135156111605760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161061a565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906111979190612b43565b6001600160a01b031690526040516111c0919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061130b565b7f000000000000000000000000000000000000000000000000000000000000000084350361123857306112126040860160208701612b43565b6001600160a01b0316036112385760405162461bcd60e51b815260040161061a90613036565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906112799190612b43565b6001600160a01b031681526020016112976060890160408a01612b43565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b600061140e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d8d565b6040519080825280602002602001820160405280156113e0578160200160208202803683370190505b508152602001856040516020016113f79190613097565b6040516020818303038152906040528152506120bc565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161144c9291906130e6565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190612f6b565b600254909150818311156115545760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161061a565b8083116115c95760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161061a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116ce5760405162461bcd60e51b815260040161061a90612fb1565b600260045560408201516001600160a01b03166117415760405162461bcd60e51b815260206004820152603b602482015260008051602061361c83398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161061a565b60008260800151116117655760405162461bcd60e51b815260040161061a90612ff5565b60008260a00151116117c45760405162461bcd60e51b8152602060048201526034602482015260008051602061361c833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161061a565b81608001518260a001511061182f5760405162461bcd60e51b8152602060048201526037602482015260008051602061363c83398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161061a565b60c08201516001600160a01b031661189d5760405162461bcd60e51b815260206004820152603b602482015260008051602061361c83398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161061a565b6118bb82600001518360200151838560e00151866101000151611ec2565b90506118e26040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036119ea577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146119655760405162461bcd60e51b815260040161061a90613036565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016119d19190613149565b6040516020818303038152906040528152509150611b26565b83517f00000000000000000000000000000000000000000000000000000000000000009003611a4857306001600160a01b031684602001516001600160a01b031603611a485760405162461bcd60e51b815260040161061a90613036565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611ae7919061319b565b6040516020818303038152906040528152509150612134611b0c856060015151610bea565b611b169190612f2a565b611b239062035b60612d7a565b90505b6000611bd26040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d8d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e66562878760405161144c92919061322b565b600260005403611c625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161061a565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611cdf5760405162461bcd60e51b8152602060048201526030602482015260008051602061363c83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161061a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d745760405162461bcd60e51b8152602060048201526038602482015260008051602061363c83398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161061a565b600081806020019051810190611d8a9190613319565b90506000611d9d826020015160016108f0565b9050600082516003811115611db457611db4613081565b03611e275760008260400151806020019051810190611dd391906133bd565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611e2190836121db565b50611eb6565b600182516003811115611e3c57611e3c613081565b03611e675760008260400151806020019051810190611e5b9190613409565b9050611e218183612228565b60405162461bcd60e51b8152602060048201526030602482015260008051602061363c83398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161061a565b5050505050565b505050565b600085611f255760405162461bcd60e51b815260206004820152603a602482015260008051602061361c83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161061a565b6001600160a01b038516611f8f5760405162461bcd60e51b815260206004820152603b602482015260008051602061361c83398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161061a565b611f988461236f565b9350611fa48284612d7a565b84116120185760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161061a565b61202283856134c0565b935061202d8461238b565b600061203a8560006108f0565b9050600081116120b25760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161061a565b9695505050505050565b6000806120c7612395565b6040840151602001519091501561216c576040830151516001600160a01b03166121495760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161061a565b60408301516020810151905161216c916001600160a01b039091169083906124a9565b604051630624488560e41b81526001600160a01b03821690636244885090612198908690600401613517565b6020604051808303816000875af11580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190612f6b565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161221691815260200190565b60405180910390a26106fb828261257d565b612232308261257d565b61224130836000015183610c13565b60003082846020015160405160240161225c9392919061359e565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161229c91908461263e565b905060006122ae308660000151610b49565b90506122c03086600001516000610c13565b81156123125784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161230591815260200190565b60405180910390a261235a565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161235191815260200190565b60405180910390a25b8015611eb657611eb630866060015183610dab565b600061237c333084610d37565b612387333084610dab565b5090565b61082f3082612655565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241a91906135c5565b905061243e816001600160a01b031660009081526001602052604090205460ff1690565b156124a45760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161061a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190612f6b565b6125289190612d7a565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b43908590612789565b6001600160a01b0382166125d35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161061a565b80600760008282546125e59190612d7a565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061264d846000858561285b565b949350505050565b6001600160a01b0382166126b55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161061a565b6001600160a01b038216600090815260056020526040902054818110156127295760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161061a565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006127de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129309092919063ffffffff16565b805190915015611ebd57808060200190518101906127fc91906135e2565b611ebd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161061a565b6000845a10156128ad5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161061a565b834710156128fd5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161061a565b826001600160a01b03163b6000036129175750600061264d565b600080600084516020860188888bf19695505050505050565b606061264d848460008585600080866001600160a01b0316858760405161295791906135ff565b60006040518083038185875af1925050503d8060008114612994576040519150601f19603f3d011682016040523d82523d6000602084013e612999565b606091505b50915091506129aa878383876129b5565b979650505050505050565b60608315612a24578251600003612a1d576001600160a01b0385163b612a1d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161061a565b508161264d565b61264d8383815115612a395781518083602001fd5b8060405162461bcd60e51b815260040161061a9190612aa3565b60005b83811015612a6e578181015183820152602001612a56565b50506000910152565b60008151808452612a8f816020860160208601612a53565b601f01601f19169290920160200192915050565b6020815260006109786020830184612a77565b6001600160a01b038116811461082f57600080fd5b80356124a481612ab6565b60008060408385031215612ae957600080fd5b8235612af481612ab6565b946020939093013593505050565b600080600060608486031215612b1757600080fd5b8335612b2281612ab6565b92506020840135612b3281612ab6565b929592945050506040919091013590565b600060208284031215612b5557600080fd5b813561097881612ab6565b60008082840360e0811215612b7457600080fd5b60c0811215612b8257600080fd5b50919360c08501359350915050565b600060208284031215612ba357600080fd5b5035919050565b60008060408385031215612bbd57600080fd5b823567ffffffffffffffff811115612bd457600080fd5b83016101208186031215612af457600080fd5b801515811461082f57600080fd5b60008060408385031215612c0857600080fd5b823591506020830135612c1a81612be7565b809150509250929050565b60008060008060608587031215612c3b57600080fd5b843593506020850135612c4d81612ab6565b9250604085013567ffffffffffffffff80821115612c6a57600080fd5b818701915087601f830112612c7e57600080fd5b813581811115612c8d57600080fd5b886020828501011115612c9f57600080fd5b95989497505060200194505050565b60008060408385031215612cc157600080fd5b8235612ccc81612ab6565b91506020830135612c1a81612ab6565b600181811c90821680612cf057607f821691505b602082108103612d1057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105c2576105c2612d64565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612dc757612dc7612d8d565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612df657612df6612d8d565b604052919050565b600067ffffffffffffffff821115612e1857612e18612d8d565b50601f01601f191660200190565b600082601f830112612e3757600080fd5b8135612e4a612e4582612dfe565b612dcd565b818152846020838601011115612e5f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e8f57600080fd5b612e97612da3565b82358152612ea760208401612acb565b6020820152612eb860408401612acb565b6040820152606083013567ffffffffffffffff811115612ed757600080fd5b612ee336828601612e26565b6060830152506080830135608082015260a083013560a0820152612f0960c08401612acb565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105c2576105c2612d64565b634e487b7160e01b600052601260045260246000fd5b600082612f6657612f66612f41565b500490565b600060208284031215612f7d57600080fd5b5051919050565b600082612f9357612f93612f41565b500690565b600060018201612faa57612faa612d64565b5060010190565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b602080825260339082015260008051602061361c833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e9082015260008051602061363c83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106130bd57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261264d6080840182612a77565b8235815260e0810160208401356130fc81612ab6565b6001600160a01b03908116602084015260408501359061311b82612ab6565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b0380845116602084015260208401516080604085015261317860a0850182612a77565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b038082166040850152806040860151166060850152505060608301516101008060808501526131e6610120850183612a77565b9150608085015160a085015260a085015161320c60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161325260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613283610160850183612a77565b9150608086015160c085015260a086015160e085015260c08601516101006132b5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126132e557600080fd5b81516132f3612e4582612dfe565b81815284602083860101111561330857600080fd5b61264d826020830160208701612a53565b60006020828403121561332b57600080fd5b815167ffffffffffffffff8082111561334357600080fd5b908301906060828603121561335757600080fd5b60405160608101818110838211171561337257613372612d8d565b60405282516004811061338457600080fd5b8152602083810151908201526040830151828111156133a257600080fd5b6133ae878286016132d4565b60408301525095945050505050565b6000602082840312156133cf57600080fd5b6040516020810181811067ffffffffffffffff821117156133f2576133f2612d8d565b604052825161340081612ab6565b81529392505050565b60006020828403121561341b57600080fd5b815167ffffffffffffffff8082111561343357600080fd5b908301906080828603121561344757600080fd5b60405160808101818110838211171561346257613462612d8d565b604052825161347081612ab6565b815260208301518281111561348457600080fd5b613490878286016132d4565b60208301525060408301516040820152606083015192506134b083612ab6565b6060810192909252509392505050565b818103818111156105c2576105c2612d64565b600081518084526020808501945080840160005b8381101561350c5781516001600160a01b0316875295820195908201906001016134e7565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526135786101008401826134d3565b905060a0840151601f198483030160e08501526135958282612a77565b95945050505050565b60018060a01b03841681528260208201526060604082015260006135956060830184612a77565b6000602082840312156135d757600080fd5b815161097881612ab6565b6000602082840312156135f457600080fd5b815161097881612be7565b60008251613611818460208701612a53565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220df4ba498500a8e0e7a2bfddd8150d8954991878322cf81b09172b2e1b2f6575664736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. @@ -225,12 +225,12 @@ func (_ERC20Destination *ERC20DestinationTransactorRaw) Transact(opts *bind.Tran return _ERC20Destination.Contract.contract.Transact(opts, method, params...) } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPCALLGASPERBYTE(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPCALLGASPERWORD(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _ERC20Destination.contract.Call(opts, &out, "MULTIHOP_CALL_GAS_PER_BYTE") + err := _ERC20Destination.contract.Call(opts, &out, "MULTI_HOP_CALL_GAS_PER_WORD") if err != nil { return *new(*big.Int), err @@ -242,26 +242,26 @@ func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPCALLGASPERBYTE(opts *bi } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_ERC20Destination *ERC20DestinationSession) MULTIHOPCALLGASPERBYTE() (*big.Int, error) { - return _ERC20Destination.Contract.MULTIHOPCALLGASPERBYTE(&_ERC20Destination.CallOpts) +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_ERC20Destination *ERC20DestinationSession) MULTIHOPCALLGASPERWORD() (*big.Int, error) { + return _ERC20Destination.Contract.MULTIHOPCALLGASPERWORD(&_ERC20Destination.CallOpts) } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_ERC20Destination *ERC20DestinationCallerSession) MULTIHOPCALLGASPERBYTE() (*big.Int, error) { - return _ERC20Destination.Contract.MULTIHOPCALLGASPERBYTE(&_ERC20Destination.CallOpts) +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_ERC20Destination *ERC20DestinationCallerSession) MULTIHOPCALLGASPERWORD() (*big.Int, error) { + return _ERC20Destination.Contract.MULTIHOPCALLGASPERWORD(&_ERC20Destination.CallOpts) } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _ERC20Destination.contract.Call(opts, &out, "MULTIHOP_REQUIRED_GAS") + err := _ERC20Destination.contract.Call(opts, &out, "MULTI_HOP_REQUIRED_GAS") if err != nil { return *new(*big.Int), err @@ -273,16 +273,16 @@ func (_ERC20Destination *ERC20DestinationCaller) MULTIHOPREQUIREDGAS(opts *bind. } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_ERC20Destination *ERC20DestinationSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { return _ERC20Destination.Contract.MULTIHOPREQUIREDGAS(&_ERC20Destination.CallOpts) } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_ERC20Destination *ERC20DestinationCallerSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { return _ERC20Destination.Contract.MULTIHOPREQUIREDGAS(&_ERC20Destination.CallOpts) } @@ -380,6 +380,37 @@ func (_ERC20Destination *ERC20DestinationCallerSession) BlockchainID() ([32]byte return _ERC20Destination.Contract.BlockchainID(&_ERC20Destination.CallOpts) } +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_ERC20Destination *ERC20DestinationCaller) CalculateNumWords(opts *bind.CallOpts, payloadSize *big.Int) (*big.Int, error) { + var out []interface{} + err := _ERC20Destination.contract.Call(opts, &out, "calculateNumWords", payloadSize) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_ERC20Destination *ERC20DestinationSession) CalculateNumWords(payloadSize *big.Int) (*big.Int, error) { + return _ERC20Destination.Contract.CalculateNumWords(&_ERC20Destination.CallOpts, payloadSize) +} + +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_ERC20Destination *ERC20DestinationCallerSession) CalculateNumWords(payloadSize *big.Int) (*big.Int, error) { + return _ERC20Destination.Contract.CalculateNumWords(&_ERC20Destination.CallOpts, payloadSize) +} + // Decimals is a free data retrieval call binding the contract method 0x313ce567. // // Solidity: function decimals() view returns(uint8) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 84544d1c3..9f5985af7 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -67,8 +67,8 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b0838038062004b08833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004ae883398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004ae883398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004ac883398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004ac883398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613e8b62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613e8b6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b60405161029691906132c5565b3480156102cd57600080fd5b506102e16102dc3660046132f8565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613324565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b436600461333c565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c61040836600461337d565b6109c8565b34801561041957600080fd5b5061026c61042836600461339a565b610ac1565b61026c61043b3660046133b3565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e16104923660046132f8565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e636600461337d565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b36600461339a565b610c93565b34801561052c57600080fd5b5061026c61053b36600461339a565b610f93565b34801561054c57600080fd5b5061028c61055b36600461337d565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d36600461337d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c3660046132f8565b610fc7565b34801561066d57600080fd5b506102e161067c3660046132f8565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b33660046133fd565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f36600461342d565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e3660046134b6565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db36600461337d565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a906134e4565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906134e4565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b815260040161093790613518565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b31613582565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109919190613582565b905061099d8282613595565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135a8565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b815260040161093790613518565b61094a610b5d826136e5565b34611d68565b60003361090b818585610b7683836112a9565b610b809190613582565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135a8565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b815260040161093790613793565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a9190613595565b905060006064610d8a7f0000000000000000000000000000000000000000000000000000000000000000846137d7565b610d9491906137ee565b90506000610da28284613595565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f319190613826565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a906134e4565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f0000000000000000000000000000000000000000000000000000000000000000846137d7565b9050610911565b6110d87f0000000000000000000000000000000000000000000000000000000000000000846137ee565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190613875565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b29190613582565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b815260040161093790613793565b60026009556000611567606084016040850161337d565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e1683398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b81526004016109379061388e565b61160f82356115ff604085016020860161337d565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d604086016020870161337d565b6001600160a01b0316146116c35760405162461bcd60e51b8152600401610937906138cf565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b604080516060810190915280600081526020018481526020016040518060200160405280876040016020810190611767919061337d565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e2604086016020870161337d565b6001600160a01b0316036118085760405162461bcd60e51b8152600401610937906138cf565b604080516060810190915280600281526020018481526020016040518060a0016040528087600001358152602001876020016020810190611849919061337d565b6001600160a01b031681526020016118676060890160408a0161337d565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611987576119876135f6565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f319190613826565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061391a565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b815260040161093790613793565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b81526004016109379061388e565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e16833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e3683398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b8152600401610937906138cf565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d919061397d565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b8152600401610937906138cf565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a391906139cf565b60405160208183030381529060405281525091508360600151516103e86121ca91906137d7565b6121d79062035b60613582565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611987576119876135f6565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613a5f565b80600b60008282546122d69190613582565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613b4c565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190613875565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613875565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e3683398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e3683398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c18565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613810565b036128d857600082604001518060200190518101906128849190613cbc565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613810565b03612918576000826040015180602001905181019061290c9190613d08565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e3683398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e1683398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a508284613582565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace8385613595565b9350612ad984612f9f565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613dbf565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf19190613875565b612cfb9190613582565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612fa9565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de98183613595565b6000600a559150612e45565b6000612e018483613595565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b612e6f30826122c4565b60008260200151604051602401612e8691906132c5565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ec7919085908561307b565b90508015612f1b5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f0e91815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f5a91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000612ffe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131529092919063ffffffff16565b805190915015611d63578080602001905181019061301c9190613ddc565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156130cd5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b8347101561311d5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b6000036131375750600061314a565b600080600084516020860188888bf19150505b949350505050565b606061314a848460008585600080866001600160a01b031685876040516131799190613df9565b60006040518083038185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50915091506131cc878383876131d7565b979650505050505050565b6060831561324657825160000361323f576001600160a01b0385163b61323f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161314a565b61314a838381511561325b5781518083602001fd5b8060405162461bcd60e51b815260040161093791906132c5565b60005b83811015613290578181015183820152602001613278565b50506000910152565b600081518084526132b1816020860160208601613275565b601f01601f19169290920160200192915050565b6020815260006110d86020830184613299565b6001600160a01b038116811461094a57600080fd5b8035612c77816132d8565b6000806040838503121561330b57600080fd5b8235613316816132d8565b946020939093013593505050565b600060c0828403121561333657600080fd5b50919050565b60008060006060848603121561335157600080fd5b833561335c816132d8565b9250602084013561336c816132d8565b929592945050506040919091013590565b60006020828403121561338f57600080fd5b81356110d8816132d8565b6000602082840312156133ac57600080fd5b5035919050565b6000602082840312156133c557600080fd5b813567ffffffffffffffff8111156133dc57600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561341057600080fd5b823591506020830135613422816133ef565b809150509250929050565b6000806000806060858703121561344357600080fd5b843593506020850135613455816132d8565b9250604085013567ffffffffffffffff8082111561347257600080fd5b818701915087601f83011261348657600080fd5b81358181111561349557600080fd5b8860208285010111156134a757600080fd5b95989497505060200194505050565b600080604083850312156134c957600080fd5b82356134d4816132d8565b91506020830135613422816132d8565b600181811c908216806134f857607f821691505b60208210810361333657634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109115761091161356c565b818103818111156109115761091161356c565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715613630576136306135f6565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561365f5761365f6135f6565b604052919050565b600067ffffffffffffffff821115613681576136816135f6565b50601f01601f191660200190565b600082601f8301126136a057600080fd5b81356136b36136ae82613667565b613636565b8181528460208386010111156136c857600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156136f857600080fd5b61370061360c565b82358152613710602084016132ed565b6020820152613721604084016132ed565b6040820152606083013567ffffffffffffffff81111561374057600080fd5b61374c3682860161368f565b6060830152506080830135608082015260a083013560a082015261377260c084016132ed565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b80820281158282048414176109115761091161356c565b60008261380b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061384c57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261314a6080840182613299565b60006020828403121561388757600080fd5b5051919050565b6020808252603390820152600080516020613e16833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e3683398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613930816132d8565b6001600160a01b03908116602084015260408501359061394f826132d8565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139ac60a0850182613299565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a1a610120850183613299565b9150608085015160a085015260a0850151613a4060c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613a8660608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613ab7610160850183613299565b9150608086015160c085015260a086015160e085015260c0860151610100613ae9818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b415781516001600160a01b031687529582019590820190600101613b1c565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bad610100840182613b08565b905060a0840151601f198483030160e0850152613bca8282613299565b95945050505050565b600082601f830112613be457600080fd5b8151613bf26136ae82613667565b818152846020838601011115613c0757600080fd5b61314a826020830160208701613275565b600060208284031215613c2a57600080fd5b815167ffffffffffffffff80821115613c4257600080fd5b9083019060608286031215613c5657600080fd5b604051606081018181108382111715613c7157613c716135f6565b604052825160048110613c8357600080fd5b815260208381015190820152604083015182811115613ca157600080fd5b613cad87828601613bd3565b60408301525095945050505050565b600060208284031215613cce57600080fd5b6040516020810181811067ffffffffffffffff82111715613cf157613cf16135f6565b6040528251613cff816132d8565b81529392505050565b600060208284031215613d1a57600080fd5b815167ffffffffffffffff80821115613d3257600080fd5b9083019060808286031215613d4657600080fd5b604051608081018181108382111715613d6157613d616135f6565b6040528251613d6f816132d8565b8152602083015182811115613d8357600080fd5b613d8f87828601613bd3565b6020830152506040830151604082015260608301519250613daf836132d8565b6060810192909252509392505050565b600060208284031215613dd157600080fd5b81516110d8816132d8565b600060208284031215613dee57600080fd5b81516110d8816133ef565b60008251613e0b818460208701613275565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220f1dac0e63f7bbd5dd35ae4923b4bae1d73a5c6a5a30e8feddf8e5fb84ca3433d64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b9938038062004b99833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b7983398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b7983398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004b5983398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004b5983398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f1c62000c3d600039600081816104ca0152610d900152600081816105d5015261099001526000818161039801526110820152600081816106eb015281816110ad01526110de01526000818161083301528181610ee9015281816116c101528181611967015281816120220152818161226e01526127ee0152600081816103ec01528181610ec6015281816116910152818161194101528181611ffb01528181612248015261277801526000818161076d015281816117ff01526120fe01526000818161034c0152818161111f015281816124d50152612bc90152613f1c6000f3fe60806040526004361061026a5760003560e01c806370a0823111610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461078f578063dd62ed3e146107a4578063ecd4ed1b146107c4578063f2fde38b146107e1578063f3f981d814610801578063f5ea06031461082157610279565b8063c452165e1461070d578063c868efaa14610725578063d0e30db014610279578063d10a5b8c14610745578063d127dc9b1461075b57610279565b80639731429711610108578063973142971461062a578063a2309ff814610663578063a457c2d714610679578063a9059cbb14610699578063b9448587146106b9578063ba3f5a12146106d957610279565b806370a0823114610578578063715018a6146105ae5780638ac7dd20146105c35780638da5cb5b146105f757806395d89b411461061557610279565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104b85780634511243e146104ec57806349e3284e1461050c578063525975e61461052157806355538c8b146105385780635eb995141461055857610279565b80632e1a7d4d1461042e57806330079bff1461044e578063313ce56714610461578063329c3e121461047d578063395093511461049857610279565b806318160ddd1161022f57806318160ddd146103255780631a7f5bec1461033a5780631ce220751461038657806323b872dd146103ba57806329b7b3fd146103da5780632b0d8f181461040e57610279565b8062d872ae1461028157806306fdde03146102aa578063095ea7b3146102cc578063146dfd3c146102fc57806315beb59f1461030f57610279565b3661027957610277610855565b005b610277610855565b34801561028d57600080fd5b50610297600a5481565b6040519081526020015b60405180910390f35b3480156102b657600080fd5b506102bf610896565b6040516102a19190613321565b3480156102d857600080fd5b506102ec6102e7366004613354565b610928565b60405190151581526020016102a1565b61027761030a366004613380565b610942565b34801561031b57600080fd5b5061029761213481565b34801561033157600080fd5b50610297610978565b34801561034657600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a1565b34801561039257600080fd5b506102ec7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c657600080fd5b506102ec6103d5366004613398565b6109cf565b3480156103e657600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561041a57600080fd5b506102776104293660046133d9565b6109f3565b34801561043a57600080fd5b506102776104493660046133f6565b610aec565b61027761045c36600461340f565b610b5c565b34801561046d57600080fd5b50604051601281526020016102a1565b34801561048957600080fd5b5061036e6001600160991b0181565b3480156104a457600080fd5b506102ec6104b3366004613354565b610b8e565b3480156104c457600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b506102776105073660046133d9565b610bb0565b34801561051857600080fd5b506102ec610cad565b34801561052d57600080fd5b5061029762035b6081565b34801561054457600080fd5b506102776105533660046133f6565b610cbe565b34801561056457600080fd5b506102776105733660046133f6565b610fbe565b34801561058457600080fd5b506102976105933660046133d9565b6001600160a01b031660009081526020819052604090205490565b3480156105ba57600080fd5b50610277610fcf565b3480156105cf57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561060357600080fd5b506008546001600160a01b031661036e565b34801561062157600080fd5b506102bf610fe3565b34801561063657600080fd5b506102ec6106453660046133d9565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066f57600080fd5b50610297600b5481565b34801561068557600080fd5b506102ec610694366004613354565b610ff2565b3480156106a557600080fd5b506102ec6106b4366004613354565b61106d565b3480156106c557600080fd5b506102976106d4366004613459565b61107b565b3480156106e557600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561071957600080fd5b5061036e600160981b81565b34801561073157600080fd5b50610277610740366004613489565b61110a565b34801561075157600080fd5b50610297600c5481565b34801561076757600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561079b57600080fd5b50600754610297565b3480156107b057600080fd5b506102976107bf366004613512565b6112d4565b3480156107d057600080fd5b5061036e62010203600160981b0181565b3480156107ed57600080fd5b506102776107fc3660046133d9565b6112ff565b34801561080d57600080fd5b5061029761081c3660046133f6565b611375565b34801561082d57600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b61085f333461139e565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b6060600380546108a590613540565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613540565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b60003361093681858561145d565b60019150505b92915050565b600a541561096b5760405162461bcd60e51b815260040161096290613574565b60405180910390fd5b6109758134611582565b50565b60008061098a47600160981b316135de565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109bc91906135de565b90506109c882826135f1565b9250505090565b6000336109dd858285611a6d565b6109e8858585611ae1565b506001949350505050565b6109fb611c85565b6001600160a01b038116610a215760405162461bcd60e51b815260040161096290613604565b6001600160a01b03811660009081526006602052604090205460ff1615610aa05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610962565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610af63382611c8d565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b58573d6000803e3d6000fd5b5050565b600a5415610b7c5760405162461bcd60e51b815260040161096290613574565b610975610b8882613741565b34611dbc565b600033610936818585610ba183836112d4565b610bab91906135de565b61145d565b610bb8611c85565b6001600160a01b038116610bde5760405162461bcd60e51b815260040161096290613604565b6001600160a01b03811660009081526006602052604090205460ff16610c585760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610962565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cb9600a541590565b905090565b600160095414610ce05760405162461bcd60e51b8152600401610962906137ef565b6002600955600c54600160981b31908111610d755760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610962565b6000600c5482610d8591906135f1565b905060006064610db57f000000000000000000000000000000000000000000000000000000000000000084613833565b610dbf9190613860565b90506000610dcd82846135f1565b600c85905590508115610def57610de43083612320565b610ded826123a2565b505b6000610dfc82600061107b565b905060008111610e745760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610962565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f7391906080820190815260200184604051602001610f5c919061388a565b6040516020818303038152906040528152506123b2565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fa791815260200190565b60405180910390a250506001600955505050505050565b610fc6611c85565b610975816124d1565b610fd7612671565b610fe160006126cb565b565b6060600480546108a590613540565b6000338161100082866112d4565b9050838110156110605760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610962565b6109e8828686840361145d565b600033610936818585611ae1565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110d9576110d27f000000000000000000000000000000000000000000000000000000000000000084613833565b905061093c565b6111037f000000000000000000000000000000000000000000000000000000000000000084613860565b9392505050565b61111261271d565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad91906138d9565b10156112145760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610962565b61121d33610645565b156112835760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610962565b6112c4848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277692505050565b6112ce6001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611307612671565b6001600160a01b03811661136c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b610975816126cb565b600080611383602084613860565b90506113906020846138f2565b1561093c5761110381613906565b6001600160a01b0382166113f45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610962565b806002600082825461140691906135de565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114bf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610962565b6001600160a01b0382166115205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610962565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115a45760405162461bcd60e51b8152600401610962906137ef565b600260095560006115bb60608401604085016133d9565b6001600160a01b03160361161a5760405162461bcd60e51b81526020600482015260326024820152600080516020613ea783398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610962565b8160a0013560000361163e5760405162461bcd60e51b81526004016109629061391f565b611663823561165360408501602086016133d9565b83856060013586608001356129ca565b905061168a6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117fd576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166116f160408601602087016133d9565b6001600160a01b0316146117175760405162461bcd60e51b815260040161096290613960565b6080840135156117845760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610962565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117bb91906133d9565b6001600160a01b031690526040516117e4919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061192f565b7f000000000000000000000000000000000000000000000000000000000000000084350361185c573061183660408601602087016133d9565b6001600160a01b03160361185c5760405162461bcd60e51b815260040161096290613960565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061189d91906133d9565b6001600160a01b031681526020016118bb6060890160408a016133d9565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a1b6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119db576119db613652565b604051908082528060200260200182016040528015611a04578160200160208202803683370190505b50815260200185604051602001610f5c919061388a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a599291906139ab565b60405180910390a350506001600955505050565b6000611a7984846112d4565b905060001981146112ce5781811015611ad45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610962565b6112ce848484840361145d565b6001600160a01b038316611b455760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610962565b6001600160a01b038216611ba75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610962565b6001600160a01b03831660009081526020819052604090205481811015611c1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610962565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112ce565b610fe1612671565b6001600160a01b038216611ced5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610962565b6001600160a01b03821660009081526020819052604090205481811015611d615760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610962565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611575565b505050565b600160095414611dde5760405162461bcd60e51b8152600401610962906137ef565b600260095560408201516001600160a01b0316611e515760405162461bcd60e51b815260206004820152603b6024820152600080516020613ea783398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610962565b6000826080015111611e755760405162461bcd60e51b81526004016109629061391f565b60008260a0015111611ed45760405162461bcd60e51b81526020600482015260346024820152600080516020613ea7833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610962565b81608001518260a0015110611f3f5760405162461bcd60e51b81526020600482015260376024820152600080516020613ec783398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610962565b60c08201516001600160a01b0316611fad5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ea783398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610962565b611fcb82600001518360200151838560e001518661010001516129ca565b9050611ff26040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120fa577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120755760405162461bcd60e51b815260040161096290613960565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016120e19190613a0e565b6040516020818303038152906040528152509150612236565b83517f0000000000000000000000000000000000000000000000000000000000000000900361215857306001600160a01b031684602001516001600160a01b0316036121585760405162461bcd60e51b815260040161096290613960565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121f79190613a60565b604051602081830303815290604052815250915061213461221c856060015151611375565b6122269190613833565b6122339062035b606135de565b90505b60006122e26040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119db576119db613652565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a59929190613af0565b80600b600082825461233291906135de565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561238657600080fd5b505af115801561239a573d6000803e3d6000fd5b505050505050565b60006123ae308361139e565b5090565b6000806123bd612bc4565b60408401516020015190915015612462576040830151516001600160a01b031661243f5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610962565b604083015160208101519051612462916001600160a01b03909116908390612cd8565b604051630624488560e41b81526001600160a01b0382169063624488509061248e908690600401613bdd565b6020604051808303816000875af11580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110391906138d9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255591906138d9565b600754909150818311156125c55760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610962565b80831161263a5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610962565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fe15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60026005540361276f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127ec5760405162461bcd60e51b81526020600482015260306024820152600080516020613ec783398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610962565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128815760405162461bcd60e51b81526020600482015260386024820152600080516020613ec783398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610962565b6000818060200190518101906128979190613ca9565b905060006128aa8260200151600161107b565b90506000825160038111156128c1576128c1613874565b0361293457600082604001518060200190518101906128e09190613d4d565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a2805161292e9083612dac565b506129c3565b60018251600381111561294957612949613874565b0361297457600082604001518060200190518101906129689190613d99565b905061292e8183612eab565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ec783398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610962565b5050505050565b600085612a2d5760405162461bcd60e51b815260206004820152603a6024820152600080516020613ea783398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610962565b6001600160a01b038516612a975760405162461bcd60e51b815260206004820152603b6024820152600080516020613ea783398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610962565b612aa0846123a2565b9350612aac82846135de565b8411612b205760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610962565b612b2a83856135f1565b9350612b3584612ffb565b6000612b4285600061107b565b905060008111612bba5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610962565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190613e50565b9050612c6d816001600160a01b031660009081526006602052604090205460ff1690565b15612cd35760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610962565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d91906138d9565b612d5791906135de565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112ce908590613005565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612de791815260200190565b60405180910390a2600a5481908015612ea15780831115612e515760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612e4581836135f1565b6000600a559150612ea1565b6000612e5d84836135f1565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112ce8483612320565b600a5415612ec157610b58826060015182612dac565b612ecb3082612320565b60008260200151604051602401612ee29190613321565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f2391908590856130d7565b90508015612f775783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f6a91815260200190565b60405180910390a26112ce565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fb691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129c3573d6000803e3d6000fd5b6109753082611c8d565b600061305a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131ae9092919063ffffffff16565b805190915015611db757808060200190518101906130789190613e6d565b611db75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610962565b6000845a10156131295760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610962565b834710156131795760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610962565b826001600160a01b03163b600003613193575060006131a6565b600080600084516020860188888bf19150505b949350505050565b60606131a6848460008585600080866001600160a01b031685876040516131d59190613e8a565b60006040518083038185875af1925050503d8060008114613212576040519150601f19603f3d011682016040523d82523d6000602084013e613217565b606091505b509150915061322887838387613233565b979650505050505050565b606083156132a257825160000361329b576001600160a01b0385163b61329b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610962565b50816131a6565b6131a683838151156132b75781518083602001fd5b8060405162461bcd60e51b81526004016109629190613321565b60005b838110156132ec5781810151838201526020016132d4565b50506000910152565b6000815180845261330d8160208601602086016132d1565b601f01601f19169290920160200192915050565b60208152600061110360208301846132f5565b6001600160a01b038116811461097557600080fd5b8035612cd381613334565b6000806040838503121561336757600080fd5b823561337281613334565b946020939093013593505050565b600060c0828403121561339257600080fd5b50919050565b6000806000606084860312156133ad57600080fd5b83356133b881613334565b925060208401356133c881613334565b929592945050506040919091013590565b6000602082840312156133eb57600080fd5b813561110381613334565b60006020828403121561340857600080fd5b5035919050565b60006020828403121561342157600080fd5b813567ffffffffffffffff81111561343857600080fd5b8201610120818503121561110357600080fd5b801515811461097557600080fd5b6000806040838503121561346c57600080fd5b82359150602083013561347e8161344b565b809150509250929050565b6000806000806060858703121561349f57600080fd5b8435935060208501356134b181613334565b9250604085013567ffffffffffffffff808211156134ce57600080fd5b818701915087601f8301126134e257600080fd5b8135818111156134f157600080fd5b88602082850101111561350357600080fd5b95989497505060200194505050565b6000806040838503121561352557600080fd5b823561353081613334565b9150602083013561347e81613334565b600181811c9082168061355457607f821691505b60208210810361339257634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093c5761093c6135c8565b8181038181111561093c5761093c6135c8565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561368c5761368c613652565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136bb576136bb613652565b604052919050565b600067ffffffffffffffff8211156136dd576136dd613652565b50601f01601f191660200190565b600082601f8301126136fc57600080fd5b813561370f61370a826136c3565b613692565b81815284602083860101111561372457600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561375457600080fd5b61375c613668565b8235815261376c60208401613349565b602082015261377d60408401613349565b6040820152606083013567ffffffffffffffff81111561379c57600080fd5b6137a8368286016136eb565b6060830152506080830135608082015260a083013560a08201526137ce60c08401613349565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b808202811582820484141761093c5761093c6135c8565b634e487b7160e01b600052601260045260246000fd5b60008261386f5761386f61384a565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138b057634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131a660808401826132f5565b6000602082840312156138eb57600080fd5b5051919050565b6000826139015761390161384a565b500690565b600060018201613918576139186135c8565b5060010190565b6020808252603390820152600080516020613ea7833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ec783398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139c181613334565b6001600160a01b0390811660208401526040850135906139e082613334565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a3d60a08501826132f5565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613aab6101208501836132f5565b9150608085015160a085015260a0850151613ad160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b1760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b486101608501836132f5565b9150608086015160c085015260a086015160e085015260c0860151610100613b7a818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bd25781516001600160a01b031687529582019590820190600101613bad565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c3e610100840182613b99565b905060a0840151601f198483030160e0850152613c5b82826132f5565b95945050505050565b600082601f830112613c7557600080fd5b8151613c8361370a826136c3565b818152846020838601011115613c9857600080fd5b6131a68260208301602087016132d1565b600060208284031215613cbb57600080fd5b815167ffffffffffffffff80821115613cd357600080fd5b9083019060608286031215613ce757600080fd5b604051606081018181108382111715613d0257613d02613652565b604052825160048110613d1457600080fd5b815260208381015190820152604083015182811115613d3257600080fd5b613d3e87828601613c64565b60408301525095945050505050565b600060208284031215613d5f57600080fd5b6040516020810181811067ffffffffffffffff82111715613d8257613d82613652565b6040528251613d9081613334565b81529392505050565b600060208284031215613dab57600080fd5b815167ffffffffffffffff80821115613dc357600080fd5b9083019060808286031215613dd757600080fd5b604051608081018181108382111715613df257613df2613652565b6040528251613e0081613334565b8152602083015182811115613e1457600080fd5b613e2087828601613c64565b6020830152506040830151604082015260608301519250613e4083613334565b6060810192909252509392505050565b600060208284031215613e6257600080fd5b815161110381613334565b600060208284031215613e7f57600080fd5b81516111038161344b565b60008251613e9c8184602087016132d1565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212201a79e957489f6313bae3706545a3815547a32b2d6681e5d51e73daa8141b303f64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. @@ -269,12 +269,12 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BURNEDTXFEES return _NativeTokenDestination.Contract.BURNEDTXFEESADDRESS(&_NativeTokenDestination.CallOpts) } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_NativeTokenDestination *NativeTokenDestinationCaller) MULTIHOPCALLGASPERBYTE(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCaller) MULTIHOPCALLGASPERWORD(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "MULTIHOP_CALL_GAS_PER_BYTE") + err := _NativeTokenDestination.contract.Call(opts, &out, "MULTI_HOP_CALL_GAS_PER_WORD") if err != nil { return *new(*big.Int), err @@ -286,26 +286,26 @@ func (_NativeTokenDestination *NativeTokenDestinationCaller) MULTIHOPCALLGASPERB } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_NativeTokenDestination *NativeTokenDestinationSession) MULTIHOPCALLGASPERBYTE() (*big.Int, error) { - return _NativeTokenDestination.Contract.MULTIHOPCALLGASPERBYTE(&_NativeTokenDestination.CallOpts) +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationSession) MULTIHOPCALLGASPERWORD() (*big.Int, error) { + return _NativeTokenDestination.Contract.MULTIHOPCALLGASPERWORD(&_NativeTokenDestination.CallOpts) } -// MULTIHOPCALLGASPERBYTE is a free data retrieval call binding the contract method 0xfb027c9d. +// MULTIHOPCALLGASPERWORD is a free data retrieval call binding the contract method 0x15beb59f. // -// Solidity: function MULTIHOP_CALL_GAS_PER_BYTE() view returns(uint256) -func (_NativeTokenDestination *NativeTokenDestinationCallerSession) MULTIHOPCALLGASPERBYTE() (*big.Int, error) { - return _NativeTokenDestination.Contract.MULTIHOPCALLGASPERBYTE(&_NativeTokenDestination.CallOpts) +// Solidity: function MULTI_HOP_CALL_GAS_PER_WORD() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) MULTIHOPCALLGASPERWORD() (*big.Int, error) { + return _NativeTokenDestination.Contract.MULTIHOPCALLGASPERWORD(&_NativeTokenDestination.CallOpts) } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_NativeTokenDestination *NativeTokenDestinationCaller) MULTIHOPREQUIREDGAS(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _NativeTokenDestination.contract.Call(opts, &out, "MULTIHOP_REQUIRED_GAS") + err := _NativeTokenDestination.contract.Call(opts, &out, "MULTI_HOP_REQUIRED_GAS") if err != nil { return *new(*big.Int), err @@ -317,16 +317,16 @@ func (_NativeTokenDestination *NativeTokenDestinationCaller) MULTIHOPREQUIREDGAS } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_NativeTokenDestination *NativeTokenDestinationSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { return _NativeTokenDestination.Contract.MULTIHOPREQUIREDGAS(&_NativeTokenDestination.CallOpts) } -// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0xb6580b69. +// MULTIHOPREQUIREDGAS is a free data retrieval call binding the contract method 0x525975e6. // -// Solidity: function MULTIHOP_REQUIRED_GAS() view returns(uint256) +// Solidity: function MULTI_HOP_REQUIRED_GAS() view returns(uint256) func (_NativeTokenDestination *NativeTokenDestinationCallerSession) MULTIHOPREQUIREDGAS() (*big.Int, error) { return _NativeTokenDestination.Contract.MULTIHOPREQUIREDGAS(&_NativeTokenDestination.CallOpts) } @@ -517,6 +517,37 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BurnedFeesRe return _NativeTokenDestination.Contract.BurnedFeesReportingRewardPercentage(&_NativeTokenDestination.CallOpts) } +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCaller) CalculateNumWords(opts *bind.CallOpts, payloadSize *big.Int) (*big.Int, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "calculateNumWords", payloadSize) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationSession) CalculateNumWords(payloadSize *big.Int) (*big.Int, error) { + return _NativeTokenDestination.Contract.CalculateNumWords(&_NativeTokenDestination.CallOpts, payloadSize) +} + +// CalculateNumWords is a free data retrieval call binding the contract method 0xf3f981d8. +// +// Solidity: function calculateNumWords(uint256 payloadSize) pure returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) CalculateNumWords(payloadSize *big.Int) (*big.Int, error) { + return _NativeTokenDestination.Contract.CalculateNumWords(&_NativeTokenDestination.CallOpts, payloadSize) +} + // CurrentReserveImbalance is a free data retrieval call binding the contract method 0x00d872ae. // // Solidity: function currentReserveImbalance() view returns(uint256) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index be44a6841..afaa56f39 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -70,13 +70,13 @@ abstract contract TeleporterTokenDestination is * @notice Fixed gas cost for performing a multi-hop transfer on the `sourceBlockchainID`, * before forwarding to the final destination bridge instance. */ - uint256 public constant MULTIHOP_REQUIRED_GAS = 220_000; + uint256 public constant MULTI_HOP_REQUIRED_GAS = 220_000; /** * @notice The amount gas added to the required gas limit for a multi-hop call message - * for each byte of the recipient payload. + * for each 32-byte word of the recipient payload. */ - uint256 public constant MULTIHOP_CALL_GAS_PER_BYTE = 1_000; + uint256 public constant MULTI_HOP_CALL_GAS_PER_WORD = 8_500; /** * @notice Initializes this destination token bridge instance to receive @@ -123,6 +123,18 @@ abstract contract TeleporterTokenDestination is return value / tokenMultiplier; } + /** + * @dev Calculates the number of 32-byte words required to fit a payload of a given length. + * The payloads are padded to have a length that is a multiple of 32. + */ + function calculateNumWords(uint256 payloadSize) public pure returns (uint256) { + uint256 numWords = payloadSize / 32; + if (payloadSize % 32 != 0) { + ++numWords; + } + return numWords; + } + /** * @notice Sends tokens to the specified destination token bridge instance. * @@ -151,7 +163,7 @@ abstract contract TeleporterTokenDestination is // no multi-hop is needed. Only the required gas limit for the Teleporter message back to // `sourceBlockchainID` is needed, which is provided by `input.requiredGasLimit`. // Else, there will be a multi-hop transfer to the final destination. - // The first hop back to `sourceBlockchainID` requires `MULTIHOP_REQUIRED_GAS`, + // The first hop back to `sourceBlockchainID` requires `MULTI_HOP_REQUIRED_GAS`, // and the second hop to the final destination requires `input.requiredGasLimit`. BridgeMessage memory message; uint256 messageRequiredGasLimit = input.requiredGasLimit; @@ -192,7 +204,7 @@ abstract contract TeleporterTokenDestination is }) ) }); - messageRequiredGasLimit = MULTIHOP_REQUIRED_GAS; + messageRequiredGasLimit = MULTI_HOP_REQUIRED_GAS; } bytes32 messageID = _sendTeleporterMessage( @@ -292,8 +304,8 @@ abstract contract TeleporterTokenDestination is }) ) }); - messageRequiredGasLimit = - MULTIHOP_REQUIRED_GAS + (MULTIHOP_CALL_GAS_PER_BYTE * input.recipientPayload.length); + messageRequiredGasLimit = MULTI_HOP_REQUIRED_GAS + + (calculateNumWords(input.recipientPayload.length) * MULTI_HOP_CALL_GAS_PER_WORD); } // Send message to the destination bridge address diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index c4589e598..2906cfd80 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -278,6 +278,15 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { ); } + function testCalculateNumWords() public { + assertEq(tokenDestination.calculateNumWords(0), 0); + assertEq(tokenDestination.calculateNumWords(1), 1); + assertEq(tokenDestination.calculateNumWords(32), 1); + assertEq(tokenDestination.calculateNumWords(33), 2); + assertEq(tokenDestination.calculateNumWords(64), 2); + assertEq(tokenDestination.calculateNumWords(65), 3); + } + function _sendMultiHopSendSuccess( uint256 amount, uint256 primaryFee, @@ -347,7 +356,7 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBlockchainID: tokenDestination.sourceBlockchainID(), destinationAddress: tokenDestination.tokenSourceAddress(), feeInfo: TeleporterFeeInfo({feeTokenAddress: address(feeToken), amount: input.primaryFee}), - requiredGasLimit: tokenDestination.MULTIHOP_REQUIRED_GAS(), + requiredGasLimit: tokenDestination.MULTI_HOP_REQUIRED_GAS(), allowedRelayerAddresses: new address[](0), message: _encodeMultiHopSendMessage({ amount: bridgeAmount, @@ -368,8 +377,11 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { destinationBlockchainID: tokenDestination.sourceBlockchainID(), destinationAddress: tokenDestination.tokenSourceAddress(), feeInfo: TeleporterFeeInfo({feeTokenAddress: address(feeToken), amount: input.primaryFee}), - requiredGasLimit: tokenDestination.MULTIHOP_REQUIRED_GAS() - + (input.recipientPayload.length * tokenDestination.MULTIHOP_CALL_GAS_PER_BYTE()), + requiredGasLimit: tokenDestination.MULTI_HOP_REQUIRED_GAS() + + ( + tokenDestination.calculateNumWords(input.recipientPayload.length) + * tokenDestination.MULTI_HOP_CALL_GAS_PER_WORD() + ), allowedRelayerAddresses: new address[](0), message: _encodeMultiHopCallMessage({ amount: bridgeAmount, From 38b7866a9912a0681b6681d1a17562d4f4f5a5b1 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 12:21:01 -0400 Subject: [PATCH 19/26] Update forge coverage report --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4c1196d5a..c9bfd1295 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ Unit test coverage of the contracts can be viewed using `forge coverage`: ``` $ forge coverage [â ¢] Compiling... -[â Š] Compiling 70 files with 0.8.18 -[â ¢] Solc 0.8.18 finished in 4.91s +[â ’] Compiling 70 files with 0.8.18 +[â †] Solc 0.8.18 finished in 4.98s Compiler run successful! Analysing contracts... Running tests... @@ -64,14 +64,14 @@ Running tests... | src/ERC20Source.sol | 100.00% (14/14) | 100.00% (17/17) | 100.00% (4/4) | 100.00% (5/5) | | src/NativeTokenDestination.sol | 100.00% (56/56) | 100.00% (68/68) | 100.00% (14/14) | 100.00% (14/14) | | src/NativeTokenSource.sol | 100.00% (14/14) | 100.00% (15/15) | 100.00% (2/2) | 100.00% (5/5) | -| src/TeleporterTokenDestination.sol | 100.00% (58/58) | 100.00% (65/65) | 88.00% (44/50) | 100.00% (5/5) | +| src/TeleporterTokenDestination.sol | 100.00% (62/62) | 100.00% (71/71) | 88.46% (46/52) | 100.00% (6/6) | | src/TeleporterTokenSource.sol | 100.00% (50/50) | 100.00% (55/55) | 97.22% (35/36) | 100.00% (4/4) | | src/mocks/ExampleWAVAX.sol | 100.00% (6/6) | 100.00% (6/6) | 100.00% (0/0) | 100.00% (3/3) | | src/mocks/MockERC20SendAndCallReceiver.sol | 100.00% (3/3) | 100.00% (3/3) | 100.00% (2/2) | 100.00% (1/1) | | src/mocks/MockNativeSendAndCallReceiver.sol | 100.00% (2/2) | 100.00% (2/2) | 100.00% (2/2) | 100.00% (1/1) | | src/utils/CallUtils.sol | 100.00% (8/8) | 100.00% (9/9) | 100.00% (6/6) | 100.00% (2/2) | | src/utils/SafeWrappedNativeTokenDeposit.sol | 100.00% (5/5) | 100.00% (8/8) | 100.00% (2/2) | 100.00% (1/1) | -| Total | 100.00% (236/236) | 100.00% (270/270) | 94.26% (115/122) | 100.00% (48/48) | +| Total | 100.00% (240/240) | 100.00% (276/276) | 94.35% (117/124) | 100.00% (49/49) | ``` ## E2E tests From f41d8f2ee56dac18ce4f506e82f01650234d9842 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 12:44:59 -0400 Subject: [PATCH 20/26] Remove duplicate TokensWithdrawn emit --- abi-bindings/go/ERC20Destination/ERC20Destination.go | 2 +- abi-bindings/go/ERC20Source/ERC20Source.go | 2 +- .../NativeTokenDestination/NativeTokenDestination.go | 2 +- abi-bindings/go/NativeTokenSource/NativeTokenSource.go | 2 +- contracts/src/ERC20Source.sol | 1 + contracts/src/NativeTokenDestination.sol | 4 ++-- contracts/src/TeleporterTokenDestination.sol | 1 - contracts/src/TeleporterTokenSource.sol | 1 - contracts/test/ERC20DestinationTests.t.sol | 2 ++ contracts/test/ERC20SourceTests.t.sol | 2 ++ contracts/test/NativeTokenDestinationTests.t.sol | 10 ++++++---- contracts/test/NativeTokenSourceTests.t.sol | 4 +++- contracts/test/TeleporterTokenDestinationTests.t.sol | 3 --- contracts/test/TeleporterTokenSourceTests.t.sol | 2 -- 14 files changed, 20 insertions(+), 18 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index b2475aff5..0c9ae0c76 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b506040516200409038038062004090833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200407083398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161360962000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261234701526136096000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a50565b60405180910390f35b61021b610216366004612a83565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612aaf565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612af0565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612b0d565b6106cf565b61021b610344366004612a83565b6106dd565b6102f0610357366004612af0565b6106ff565b6102f061036a366004612b3e565b6107fc565b61022f61037d366004612af0565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612af0565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a83565b610833565b61021b610406366004612a83565b6108ae565b6102f0610419366004612b57565b6108bc565b61022f62035b6081565b61022f610436366004612ba2565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612bd2565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c5b565b610b27565b6102f06104c5366004612af0565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c89565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c89565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612cc3565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612d27565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612cc3565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c89565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612e29565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612ed7565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eee565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612f10565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612f29565b60026004556000610f4c6060840160408501612af0565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061359483398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f6d565b610ff48235610fe46040850160208601612af0565b8385606001358660800135611e6f565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612af0565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612fae565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612af0565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612af0565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612af0565b6001600160a01b0316815260200161124c6060890160408a01612af0565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac919061300f565b604051602081830303815290604052815250612069565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161140192919061305e565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612f10565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612f29565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f6d565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613594833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b815260206004820152603760248201526000805160206135b483398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e6f565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612fae565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161198691906130c1565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612fae565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c9190613113565b60405160208183030381529060405281525091508360600151516103e8611ac39190612ed7565b611ad09062035b60612d27565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612d3a565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e6656287876040516114019291906131a3565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b815260206004820152603860248201526000805160206135b483398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613291565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612ff9565b03611dd45760008260400151806020019051810190611d809190613335565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a28051611dce9083612188565b50611e63565b600182516003811115611de957611de9612ff9565b03611e145760008260400151806020019051810190611e089190613381565b9050611dce81836121d5565b60405162461bcd60e51b815260206004820152603060248201526000805160206135b483398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611ed25760405162461bcd60e51b815260206004820152603a602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611f3c5760405162461bcd60e51b815260206004820152603b602482015260008051602061359483398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f458461231c565b9350611f518284612d27565b8411611fc55760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611fcf8385613438565b9350611fda84612338565b6000611fe78560006108ce565b90506000811161205f5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612074612342565b60408401516020015190915015612119576040830151516001600160a01b03166120f65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b604083015160208101519051612119916001600160a01b03909116908390612456565b604051630624488560e41b81526001600160a01b0382169063624488509061214590869060040161348f565b6020604051808303816000875af1158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612f10565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121c391815260200190565b60405180910390a26106d9828261252a565b6121df308261252a565b6121ee30836000015183610bc8565b60003082846020015160405160240161220993929190613516565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b17905284015184519192506000916122499190846125eb565b9050600061225b308660000151610b27565b905061226d3086600001516000610bc8565b81156122bf5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122b291815260200190565b60405180910390a2612307565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122fe91815260200190565b60405180910390a25b8015611e6357611e6330866060015183610d60565b6000612329333084610cec565b612334333084610d60565b5090565b61080d3082612602565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c7919061353d565b90506123eb816001600160a01b031660009081526001602052604090205460ff1690565b156124515760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb9190612f10565b6124d59190612d27565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b21908590612736565b6001600160a01b0382166125805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125929190612d27565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125fa8460008585612808565b949350505050565b6001600160a01b0382166126625760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061278b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128dd9092919063ffffffff16565b805190915015611e6a57808060200190518101906127a9919061355a565b611e6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561285a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b834710156128aa5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b6000036128c4575060006125fa565b600080600084516020860188888bf19695505050505050565b60606125fa848460008585600080866001600160a01b031685876040516129049190613577565b60006040518083038185875af1925050503d8060008114612941576040519150601f19603f3d011682016040523d82523d6000602084013e612946565b606091505b509150915061295787838387612962565b979650505050505050565b606083156129d15782516000036129ca576001600160a01b0385163b6129ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125fa565b6125fa83838151156129e65781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a50565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f01601f19169290920160200192915050565b6020815260006109566020830184612a24565b6001600160a01b038116811461080d57600080fd5b803561245181612a63565b60008060408385031215612a9657600080fd5b8235612aa181612a63565b946020939093013593505050565b600080600060608486031215612ac457600080fd5b8335612acf81612a63565b92506020840135612adf81612a63565b929592945050506040919091013590565b600060208284031215612b0257600080fd5b813561095681612a63565b60008082840360e0811215612b2157600080fd5b60c0811215612b2f57600080fd5b50919360c08501359350915050565b600060208284031215612b5057600080fd5b5035919050565b60008060408385031215612b6a57600080fd5b823567ffffffffffffffff811115612b8157600080fd5b83016101208186031215612aa157600080fd5b801515811461080d57600080fd5b60008060408385031215612bb557600080fd5b823591506020830135612bc781612b94565b809150509250929050565b60008060008060608587031215612be857600080fd5b843593506020850135612bfa81612a63565b9250604085013567ffffffffffffffff80821115612c1757600080fd5b818701915087601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b886020828501011115612c4c57600080fd5b95989497505060200194505050565b60008060408385031215612c6e57600080fd5b8235612c7981612a63565b91506020830135612bc781612a63565b600181811c90821680612c9d57607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612d11565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d7457612d74612d3a565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612da357612da3612d3a565b604052919050565b600067ffffffffffffffff821115612dc557612dc5612d3a565b50601f01601f191660200190565b600082601f830112612de457600080fd5b8135612df7612df282612dab565b612d7a565b818152846020838601011115612e0c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e3c57600080fd5b612e44612d50565b82358152612e5460208401612a78565b6020820152612e6560408401612a78565b6040820152606083013567ffffffffffffffff811115612e8457600080fd5b612e9036828601612dd3565b6060830152506080830135608082015260a083013560a0820152612eb660c08401612a78565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612d11565b600082612f0b57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f2257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613594833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135b483398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061303557634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125fa6080840182612a24565b8235815260e08101602084013561307481612a63565b6001600160a01b03908116602084015260408501359061309382612a63565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130f060a0850182612a24565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b0380821660408501528060408601511660608501525050606083015161010080608085015261315e610120850183612a24565b9150608085015160a085015260a085015161318460c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b6040815282516040820152600060208401516131ca60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131fb610160850183612a24565b9150608086015160c085015260a086015160e085015260c086015161010061322d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261325d57600080fd5b815161326b612df282612dab565b81815284602083860101111561328057600080fd5b6125fa826020830160208701612a00565b6000602082840312156132a357600080fd5b815167ffffffffffffffff808211156132bb57600080fd5b90830190606082860312156132cf57600080fd5b6040516060810181811083821117156132ea576132ea612d3a565b6040528251600481106132fc57600080fd5b81526020838101519082015260408301518281111561331a57600080fd5b6133268782860161324c565b60408301525095945050505050565b60006020828403121561334757600080fd5b6040516020810181811067ffffffffffffffff8211171561336a5761336a612d3a565b604052825161337881612a63565b81529392505050565b60006020828403121561339357600080fd5b815167ffffffffffffffff808211156133ab57600080fd5b90830190608082860312156133bf57600080fd5b6040516080810181811083821117156133da576133da612d3a565b60405282516133e881612a63565b81526020830151828111156133fc57600080fd5b6134088782860161324c565b602083015250604083015160408201526060830151925061342883612a63565b6060810192909252509392505050565b818103818111156105a0576105a0612d11565b600081518084526020808501945080840160005b838110156134845781516001600160a01b03168752958201959082019060010161345f565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134f061010084018261344b565b905060a0840151601f198483030160e085015261350d8282612a24565b95945050505050565b60018060a01b038416815282602082015260606040820152600061350d6060830184612a24565b60006020828403121561354f57600080fd5b815161095681612a63565b60006020828403121561356c57600080fd5b815161095681612b94565b60008251613589818460208701612a00565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122050ec8e62a568ff5e1e8e9e357556ae67049417991f0d8850d5b5b721e59d961b64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101606040523480156200001257600080fd5b506040516200405238038062004052833981016040819052620000359162000624565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006ec565b60025550620001573362000413565b620001628162000465565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006ec565b60a052836200024c5760405162461bcd60e51b815260206004820152603560248201526000805160206200403283398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b815260206004820152603560248201526000805160206200403283398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003ad5760405162461bcd60e51b815260206004820152602d60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526c191958da5b585b1cd4da1a599d609a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003cc82600a6200081b565b610100521515610120525060089350620003ed9250859150839050620008c2565b506009620003fc8282620008c2565b50505060ff1661014052506200098e945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200046f620004e4565b6001600160a01b038116620004d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e18162000413565b50565b6003546001600160a01b03163314620005405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058757600080fd5b81516001600160401b0380821115620005a457620005a46200055f565b604051601f8301601f19908116603f01168101908282118183101715620005cf57620005cf6200055f565b81604052838152602092508683858801011115620005ec57600080fd5b600091505b83821015620006105785820183015181830184015290820190620005f1565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064057600080fd5b6200064b8862000542565b96506200065b6020890162000542565b955060408801519450620006726060890162000542565b60808901519094506001600160401b03808211156200069057600080fd5b6200069e8b838c0162000575565b945060a08a0151915080821115620006b557600080fd5b50620006c48a828b0162000575565b92505060c088015160ff81168114620006dc57600080fd5b8091505092959891949750929550565b600060208284031215620006ff57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200075d57816000190482111562000741576200074162000706565b808516156200074f57918102915b93841c939080029062000721565b509250929050565b600082620007765750600162000815565b81620007855750600062000815565b81600181146200079e5760028114620007a957620007c9565b600191505062000815565b60ff841115620007bd57620007bd62000706565b50506001821b62000815565b5060208310610133831016604e8410600b8410161715620007ee575081810a62000815565b620007fa83836200071c565b806000190482111562000811576200081162000706565b0290505b92915050565b60006200082c60ff84168362000765565b9392505050565b600181811c908216806200084857607f821691505b6020821081036200086957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008bd57600081815260208120601f850160051c81016020861015620008985750805b601f850160051c820191505b81811015620008b957828155600101620008a4565b5050505b505050565b81516001600160401b03811115620008de57620008de6200055f565b620008f681620008ef845462000833565b846200086f565b602080601f8311600181146200092e5760008415620009155750858301515b600019600386901b1c1916600185901b178555620008b9565b600085815260208120601f198616915b828110156200095f578886015182559484019460019091019084016200093e565b50858210156200097e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051610140516135cb62000a6760003960006102f901526000818161028101526108d50152600081816104400152818161090001526109310152600081816104cf01528181611052015281816112f8015281816118c701528181611b0b0152611c8e0152600081816102bb01528181611022015281816112d2015281816118a001528181611ae50152611c1801526000818161047a0152818161119001526119a30152600081816102420152818161097201528181611419015261230901526135cb6000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638da5cb5b1161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104a4578063f2fde38b146104b7578063f5ea0603146104ca578063fb027c9d146104f157600080fd5b8063ba3f5a121461043b578063c868efaa14610462578063d127dc9b14610475578063d2cc7a701461049c57600080fd5b8063a9059cbb116100de578063a9059cbb146103f8578063b51cff1b1461040b578063b6580b691461041e578063b94485871461042857600080fd5b80638da5cb5b146103a057806395d89b41146103b157806397314297146103b9578063a457c2d7146103e557600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e146103495780635eb995141461035c57806370a082311461036f578063715018a61461039857600080fd5b80632b0d8f18146102dd578063313ce567146102f257806332709bc114610323578063395093511461033657600080fd5b80631a7f5bec116101c35780631a7f5bec1461023d5780631ce220751461027c57806323b872dd146102a357806329b7b3fd146102b657600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104fa565b6040516101ff9190612a12565b60405180910390f35b61021b610216366004612a45565b61058c565b60405190151581526020016101ff565b6007545b6040519081526020016101ff565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ff565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61021b6102b1366004612a71565b6105a6565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f06102eb366004612ab2565b6105ca565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b6102f0610331366004612acf565b6106cf565b61021b610344366004612a45565b6106dd565b6102f0610357366004612ab2565b6106ff565b6102f061036a366004612b00565b6107fc565b61022f61037d366004612ab2565b6001600160a01b031660009081526005602052604090205490565b6102f0610810565b6003546001600160a01b0316610264565b6101f2610824565b61021b6103c7366004612ab2565b6001600160a01b031660009081526001602052604090205460ff1690565b61021b6103f3366004612a45565b610833565b61021b610406366004612a45565b6108ae565b6102f0610419366004612b19565b6108bc565b61022f62035b6081565b61022f610436366004612b64565b6108ce565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b6102f0610470366004612b94565b61095d565b61022f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461022f565b61022f6104b2366004612c1d565b610b27565b6102f06104c5366004612ab2565b610b52565b6102647f000000000000000000000000000000000000000000000000000000000000000081565b61022f6103e881565b60606008805461050990612c4b565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612c4b565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b60003361059a818585610bc8565b60019150505b92915050565b6000336105b4858285610cec565b6105bf858585610d60565b506001949350505050565b6105d2610f0b565b6001600160a01b0381166106015760405162461bcd60e51b81526004016105f890612c85565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106805760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b60648201526084016105f8565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106d98282610f13565b5050565b60003361059a8185856106f08383610b27565b6106fa9190612ce9565b610bc8565b610707610f0b565b6001600160a01b03811661072d5760405162461bcd60e51b81526004016105f890612c85565b6001600160a01b03811660009081526001602052604090205460ff166107a75760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b60648201526084016105f8565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610804610f0b565b61080d81611415565b50565b6108186115b5565b610822600061160f565b565b60606009805461050990612c4b565b600033816108418286610b27565b9050838110156108a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f8565b6105bf8286868403610bc8565b60003361059a818585610d60565b6106d96108c883612deb565b82611661565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361092c576109257f000000000000000000000000000000000000000000000000000000000000000084612e99565b90506105a0565b6109567f000000000000000000000000000000000000000000000000000000000000000084612eb0565b9392505050565b610965611bbd565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a009190612ed2565b1015610a675760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b60648201526084016105f8565b610a70336103c7565b15610ad65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b60648201526084016105f8565b610b17848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c1692505050565b610b216001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b5a6115b5565b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f8565b61080d8161160f565b6001600160a01b038316610c2a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f8565b6001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f8565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610cf88484610b27565b90506000198114610b215781811015610d535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105f8565b610b218484848403610bc8565b6001600160a01b038316610dc45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f8565b6001600160a01b038216610e265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f8565b6001600160a01b03831660009081526005602052604090205481811015610e9e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f8565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610efe9086815260200190565b60405180910390a3610b21565b6108226115b5565b600160045414610f355760405162461bcd60e51b81526004016105f890612eeb565b60026004556000610f4c6060840160408501612ab2565b6001600160a01b031603610fab5760405162461bcd60e51b8152602060048201526032602482015260008051602061355683398151915260448201527120726563697069656e74206164647265737360701b60648201526084016105f8565b8160a00135600003610fcf5760405162461bcd60e51b81526004016105f890612f2f565b610ff48235610fe46040850160208601612ab2565b8385606001358660800135611e31565b905061101b6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f000000000000000000000000000000000000000000000000000000000000000084350361118e576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110826040860160208701612ab2565b6001600160a01b0316146110a85760405162461bcd60e51b81526004016105f890612f70565b6080840135156111155760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b60648201526084016105f8565b60408051606081019091528060008152602001848152602001604051806020016040528087604001602081019061114c9190612ab2565b6001600160a01b03169052604051611175919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506112c0565b7f00000000000000000000000000000000000000000000000000000000000000008435036111ed57306111c76040860160208701612ab2565b6001600160a01b0316036111ed5760405162461bcd60e51b81526004016105f890612f70565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061122e9190612ab2565b6001600160a01b0316815260200161124c6060890160408a01612ab2565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006113c36040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612cfc565b604051908082528060200260200182016040528015611395578160200160208202803683370190505b508152602001856040516020016113ac9190612fd1565b60405160208183030381529060405281525061202b565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611401929190613020565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190612ed2565b600254909150818311156115095760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b60648201526084016105f8565b80831161157e5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e0060648201526084016105f8565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f8565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116835760405162461bcd60e51b81526004016105f890612eeb565b600260045560408201516001600160a01b03166116f65760405162461bcd60e51b815260206004820152603b602482015260008051602061355683398151915260448201527f20726563697069656e7420636f6e74726163742061646472657373000000000060648201526084016105f8565b600082608001511161171a5760405162461bcd60e51b81526004016105f890612f2f565b60008260a00151116117795760405162461bcd60e51b81526020600482015260346024820152600080516020613556833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b60648201526084016105f8565b81608001518260a00151106117e45760405162461bcd60e51b8152602060048201526037602482015260008051602061357683398151915260448201527f6c696420726563697069656e7420676173206c696d697400000000000000000060648201526084016105f8565b60c08201516001600160a01b03166118525760405162461bcd60e51b815260206004820152603b602482015260008051602061355683398151915260448201527f2066616c6c6261636b20726563697069656e742061646472657373000000000060648201526084016105f8565b61187082600001518360200151838560e00151866101000151611e31565b90506118976040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361199f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461191a5760405162461bcd60e51b81526004016105f890612f70565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016119869190613083565b6040516020818303038152906040528152509150611ad3565b83517f000000000000000000000000000000000000000000000000000000000000000090036119fd57306001600160a01b031684602001516001600160a01b0316036119fd5760405162461bcd60e51b81526004016105f890612f70565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611a9c91906130d5565b60405160208183030381529060405281525091508360600151516103e8611ac39190612e99565b611ad09062035b60612ce9565b90505b6000611b7f6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff81111561136c5761136c612cfc565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611401929190613165565b600260005403611c0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105f8565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611c8c5760405162461bcd60e51b8152602060048201526030602482015260008051602061357683398151915260448201526f3634b21039b7bab931b29031b430b4b760811b60648201526084016105f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d215760405162461bcd60e51b8152602060048201526038602482015260008051602061357683398151915260448201527f6c696420746f6b656e20736f757263652061646472657373000000000000000060648201526084016105f8565b600081806020019051810190611d379190613253565b90506000611d4a826020015160016108ce565b9050600082516003811115611d6157611d61612fbb565b03611d965760008260400151806020019051810190611d8091906132f7565b9050611d9081600001518361214a565b50611e25565b600182516003811115611dab57611dab612fbb565b03611dd65760008260400151806020019051810190611dca9190613343565b9050611d908183612197565b60405162461bcd60e51b8152602060048201526030602482015260008051602061357683398151915260448201526f6c6964206d657373616765207479706560801b60648201526084016105f8565b5050505050565b505050565b600085611e945760405162461bcd60e51b815260206004820152603a602482015260008051602061355683398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e20494400000000000060648201526084016105f8565b6001600160a01b038516611efe5760405162461bcd60e51b815260206004820152603b602482015260008051602061355683398151915260448201527f2064657374696e6174696f6e206272696467652061646472657373000000000060648201526084016105f8565b611f07846122de565b9350611f138284612ce9565b8411611f875760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f766572206665657300000060648201526084016105f8565b611f9183856133fa565b9350611f9c846122fa565b6000611fa98560006108ce565b9050600081116120215760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e73666572000000000060648201526084016105f8565b9695505050505050565b600080612036612304565b604084015160200151909150156120db576040830151516001600160a01b03166120b85760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b60648201526084016105f8565b6040830151602081015190516120db916001600160a01b03909116908390612418565b604051630624488560e41b81526001600160a01b03821690636244885090612107908690600401613451565b6020604051808303816000875af1158015612126573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190612ed2565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161218591815260200190565b60405180910390a26106d982826124ec565b6121a130826124ec565b6121b030836000015183610bc8565b6000308284602001516040516024016121cb939291906134d8565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161220b9190846125ad565b9050600061221d308660000151610b27565b905061222f3086600001516000610bc8565b81156122815784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161227491815260200190565b60405180910390a26122c9565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516122c091815260200190565b60405180910390a25b8015611e2557611e2530866060015183610d60565b60006122eb333084610cec565b6122f6333084610d60565b5090565b61080d30826125c4565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238991906134ff565b90506123ad816001600160a01b031660009081526001602052604090205460ff1690565b156124135760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b60648201526084016105f8565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248d9190612ed2565b6124979190612ce9565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b219085906126f8565b6001600160a01b0382166125425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f8565b80600760008282546125549190612ce9565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006125bc84600085856127ca565b949350505050565b6001600160a01b0382166126245760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f8565b6001600160a01b038216600090815260056020526040902054818110156126985760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f8565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061274d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661289f9092919063ffffffff16565b805190915015611e2c578080602001905181019061276b919061351c565b611e2c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f8565b6000845a101561281c5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e7420676173000000000060448201526064016105f8565b8347101561286c5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c756500000060448201526064016105f8565b826001600160a01b03163b600003612886575060006125bc565b600080600084516020860188888bf19695505050505050565b60606125bc848460008585600080866001600160a01b031685876040516128c69190613539565b60006040518083038185875af1925050503d8060008114612903576040519150601f19603f3d011682016040523d82523d6000602084013e612908565b606091505b509150915061291987838387612924565b979650505050505050565b6060831561299357825160000361298c576001600160a01b0385163b61298c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f8565b50816125bc565b6125bc83838151156129a85781518083602001fd5b8060405162461bcd60e51b81526004016105f89190612a12565b60005b838110156129dd5781810151838201526020016129c5565b50506000910152565b600081518084526129fe8160208601602086016129c2565b601f01601f19169290920160200192915050565b60208152600061095660208301846129e6565b6001600160a01b038116811461080d57600080fd5b803561241381612a25565b60008060408385031215612a5857600080fd5b8235612a6381612a25565b946020939093013593505050565b600080600060608486031215612a8657600080fd5b8335612a9181612a25565b92506020840135612aa181612a25565b929592945050506040919091013590565b600060208284031215612ac457600080fd5b813561095681612a25565b60008082840360e0811215612ae357600080fd5b60c0811215612af157600080fd5b50919360c08501359350915050565b600060208284031215612b1257600080fd5b5035919050565b60008060408385031215612b2c57600080fd5b823567ffffffffffffffff811115612b4357600080fd5b83016101208186031215612a6357600080fd5b801515811461080d57600080fd5b60008060408385031215612b7757600080fd5b823591506020830135612b8981612b56565b809150509250929050565b60008060008060608587031215612baa57600080fd5b843593506020850135612bbc81612a25565b9250604085013567ffffffffffffffff80821115612bd957600080fd5b818701915087601f830112612bed57600080fd5b813581811115612bfc57600080fd5b886020828501011115612c0e57600080fd5b95989497505060200194505050565b60008060408385031215612c3057600080fd5b8235612c3b81612a25565b91506020830135612b8981612a25565b600181811c90821680612c5f57607f821691505b602082108103612c7f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0612cd3565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d3657612d36612cfc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d6557612d65612cfc565b604052919050565b600067ffffffffffffffff821115612d8757612d87612cfc565b50601f01601f191660200190565b600082601f830112612da657600080fd5b8135612db9612db482612d6d565b612d3c565b818152846020838601011115612dce57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612dfe57600080fd5b612e06612d12565b82358152612e1660208401612a3a565b6020820152612e2760408401612a3a565b6040820152606083013567ffffffffffffffff811115612e4657600080fd5b612e5236828601612d95565b6060830152506080830135608082015260a083013560a0820152612e7860c08401612a3a565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105a0576105a0612cd3565b600082612ecd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ee457600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252603390820152600080516020613556833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e9082015260008051602061357683398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b602081526000825160048110612ff757634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526125bc60808401826129e6565b8235815260e08101602084013561303681612a25565b6001600160a01b03908116602084015260408501359061305582612a25565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526130b260a08501826129e6565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b038082166040850152806040860151166060850152505060608301516101008060808501526131206101208501836129e6565b9150608085015160a085015260a085015161314660c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161318c60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526131bd6101608501836129e6565b9150608086015160c085015260a086015160e085015260c08601516101006131ef818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261321f57600080fd5b815161322d612db482612d6d565b81815284602083860101111561324257600080fd5b6125bc8260208301602087016129c2565b60006020828403121561326557600080fd5b815167ffffffffffffffff8082111561327d57600080fd5b908301906060828603121561329157600080fd5b6040516060810181811083821117156132ac576132ac612cfc565b6040528251600481106132be57600080fd5b8152602083810151908201526040830151828111156132dc57600080fd5b6132e88782860161320e565b60408301525095945050505050565b60006020828403121561330957600080fd5b6040516020810181811067ffffffffffffffff8211171561332c5761332c612cfc565b604052825161333a81612a25565b81529392505050565b60006020828403121561335557600080fd5b815167ffffffffffffffff8082111561336d57600080fd5b908301906080828603121561338157600080fd5b60405160808101818110838211171561339c5761339c612cfc565b60405282516133aa81612a25565b81526020830151828111156133be57600080fd5b6133ca8782860161320e565b60208301525060408301516040820152606083015192506133ea83612a25565b6060810192909252509392505050565b818103818111156105a0576105a0612cd3565b600081518084526020808501945080840160005b838110156134465781516001600160a01b031687529582019590820190600101613421565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c08401526134b261010084018261340d565b905060a0840151601f198483030160e08501526134cf82826129e6565b95945050505050565b60018060a01b03841681528260208201526060604082015260006134cf60608301846129e6565b60006020828403121561351157600080fd5b815161095681612a25565b60006020828403121561352e57600080fd5b815161095681612b56565b6000825161354b8184602087016129c2565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220af5e5c20eee2a8c3402c746610f0d3f0beecb585c46c1891fabf5652252e830364736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index 9c13d09b8..4eb0acd75 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162003207380380620032078339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d61620004a6600039600081816102b901528181611775015281816117a1015281816117cf01528181611873015281816118e7015281816119c501526119f301526000818161023d0152818161095a0152610fee015260008181610277015261146f0152600081816101480152818161054c01528181610aa40152611a230152612d616000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b610130610113366004612202565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b610195610190366004612232565b6102db565b005b6101956101a536600461224f565b6103e0565b6101956101b8366004612232565b6103fe565b6101956101cb366004612280565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f7366004612232565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612299565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122e3565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af366004612232565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b81526004016103099061236b565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f23684900384018461244b565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b81526004016103099061236b565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f83612553565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190612600565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b81526004016103099061265d565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb8360000151846020015184866060015185611400565b915060006040518060600160405280600060038111156108dd576108dd6126ab565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b9565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612711565b604051602081830303815290604052815250611642565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190612600565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612619565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b81526004016103099061265d565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e0015185611400565b91506000604051806060016040528060016003811115610f4257610f426126ab565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612760565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b9565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127b2565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f891906128a0565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612959565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126ab565b0361125b57600082604001518060200190518101906111f49190612977565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161123991815260200190565b60405180910390a261125381600001518460200151611768565b505050505050565b600182516003811115611270576112706126ab565b0361129f576000826040015180602001905181019061128f91906129c2565b905061125381846020015161179c565b6002825160038111156112b4576112b46126ab565b0361133857600082604001518060200190518101906112d39190612a78565b90506112536040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b60038251600381111561134d5761134d6126ab565b036113f9576000826040015180602001905181019061136c9190612af6565b90506112536040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b60008561146d5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114f75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b03851661156c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b8161157d5761157a846119ec565b93505b8284116115f25760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115fc8385612959565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611633908490612bc1565b90915550939695505050505050565b60008061164d611a1e565b604084015160200151909150156116f2576040830151516001600160a01b03166116cf5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116f2916001600160a01b03909116908390611b32565b604051630624488560e41b81526001600160a01b0382169063624488509061171e908690600401612c18565b6020604051808303816000875af115801561173d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117619190612600565b9392505050565b6103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c17565b6117cb7f0000000000000000000000000000000000000000000000000000000000000000836000015183611b32565b60007f000000000000000000000000000000000000000000000000000000000000000082846020015160405160240161180693929190612c96565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b1790528401518451919250600091611846919084611c4c565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e09190612600565b90506119127f000000000000000000000000000000000000000000000000000000000000000086600001516000611c63565b81156119645784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161195791815260200190565b60405180910390a26119ac565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb0856040516119a391815260200190565b60405180910390a25b80156113f95760608501516113f9906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c17565b6000611a187f000000000000000000000000000000000000000000000000000000000000000083611d78565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa39190612cbd565b9050611ac7816001600160a01b031660009081526001602052604090205460ff1690565b15611b2d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba79190612600565b611bb19190612bc1565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ee0565b6040516001600160a01b038316602482015260448101829052611c4790849063a9059cbb60e01b90606401611be0565b505050565b6000611c5b8460008585611fb2565b949350505050565b801580611cdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb9190612600565b155b611d485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c4790849063095ea7b360e01b90606401611be0565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de59190612600565b9050611dfc6001600160a01b038516333086612087565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190612600565b9050818111611ecd5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ed78282612959565b95945050505050565b6000611f35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120bf9092919063ffffffff16565b805190915015611c475780806020019051810190611f539190612cda565b611c475760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a10156120045760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b834710156120545760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206e57506000611c5b565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611be0565b6060611c5b848460008585600080866001600160a01b031685876040516120e69190612cfc565b60006040518083038185875af1925050503d8060008114612123576040519150601f19603f3d011682016040523d82523d6000602084013e612128565b606091505b509150915061213987838387612144565b979650505050505050565b606083156121b35782516000036121ac576001600160a01b0385163b6121ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c5b565b611c5b83838151156121c85781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d18565b6001600160a01b038116811461050c57600080fd5b8035611b2d816121e2565b6000806040838503121561221557600080fd5b823591506020830135612227816121e2565b809150509250929050565b60006020828403121561224457600080fd5b8135611761816121e2565b60008082840360e081121561226357600080fd5b60c081121561227157600080fd5b50919360c08501359350915050565b60006020828403121561229257600080fd5b5035919050565b600080604083850312156122ac57600080fd5b82356001600160401b038111156122c257600080fd5b830161012081860312156122d557600080fd5b946020939093013593505050565b600080600080606085870312156122f957600080fd5b84359350602085013561230b816121e2565b925060408501356001600160401b038082111561232757600080fd5b818701915087601f83011261233b57600080fd5b81358181111561234a57600080fd5b88602082850101111561235c57600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123f2576123f26123b9565b60405290565b60405161010081016001600160401b03811182821017156123f2576123f26123b9565b604051601f8201601f191681016001600160401b0381118282101715612443576124436123b9565b604052919050565b600060c0828403121561245d57600080fd5b60405160c081018181106001600160401b038211171561247f5761247f6123b9565b604052823581526020830135612494816121e2565b602082015260408301356124a7816121e2565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124ef576124ef6123b9565b50601f01601f191660200190565b600082601f83011261250e57600080fd5b813561252161251c826124d6565b61241b565b81815284602083860101111561253657600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561256657600080fd5b61256e6123cf565b8235815261257e602084016121f7565b602082015261258f604084016121f7565b604082015260608301356001600160401b038111156125ad57600080fd5b6125b9368286016124fd565b6060830152506080830135608082015260a083013560a08201526125df60c084016121f7565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561261257600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126dc5781810151838201526020016126c4565b50506000910152565b600081518084526126fd8160208601602086016126c1565b601f01601f19169290920160200192915050565b60208152600082516004811061273757634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5b60808401826126e5565b60208152600060018060a01b0380845116602084015260208401516080604085015261278f60a08501826126e5565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d960608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261280a6101608501836126e5565b9150608086015160c085015260a086015160e085015260c086015161010061283c818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286c57600080fd5b815161287a61251c826124d6565b81815284602083860101111561288f57600080fd5b611c5b8260208301602087016126c1565b6000602082840312156128b257600080fd5b81516001600160401b03808211156128c957600080fd5b90830190606082860312156128dd57600080fd5b6040516060810181811083821117156128f8576128f86123b9565b60405282516004811061290a57600080fd5b81526020838101519082015260408301518281111561292857600080fd5b6129348782860161285b565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1857611a18612943565b8051611b2d816121e2565b60006020828403121561298957600080fd5b604051602081018181106001600160401b03821117156129ab576129ab6123b9565b60405282516129b9816121e2565b81529392505050565b6000602082840312156129d457600080fd5b81516001600160401b03808211156129eb57600080fd5b90830190608082860312156129ff57600080fd5b604051608081018181108382111715612a1a57612a1a6123b9565b6040528251612a28816121e2565b8152602083015182811115612a3c57600080fd5b612a488782860161285b565b6020830152506040830151604082015260608301519250612a68836121e2565b6060810192909252509392505050565b600060a08284031215612a8a57600080fd5b60405160a081018181106001600160401b0382111715612aac57612aac6123b9565b604052825181526020830151612ac1816121e2565b60208201526040830151612ad4816121e2565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0857600080fd5b81516001600160401b0380821115612b1f57600080fd5b908301906101008286031215612b3457600080fd5b612b3c6123f8565b82518152612b4c6020840161296c565b6020820152612b5d6040840161296c565b6040820152606083015182811115612b7457600080fd5b612b808782860161285b565b60608301525060808301516080820152612b9c60a0840161296c565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1857611a18612943565b600081518084526020808501945080840160005b83811015612c0d5781516001600160a01b031687529582019590820190600101612be8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c79610100840182612bd4565b905060a0840151601f198483030160e0850152611ed782826126e5565b60018060a01b0384168152826020820152606060408201526000611ed760608301846126e5565b600060208284031215612ccf57600080fd5b8151611761816121e2565b600060208284031215612cec57600080fd5b8151801515811461176157600080fd5b60008251612d0e8184602087016126c1565b9190910192915050565b60208152600061176160208301846126e556fea26469706673582212200dc4eea22029fc24b6752faf885065fdc124453938bf9bac8d24288b6e8212be64736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b50604051620031ff380380620031ff8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d59620004a6600039600081816102b90152818161176d01528181611799015281816117c70152818161186b015281816118df015281816119bd01526119eb01526000818161023d0152818161095a0152610fee01526000818161027701526114240152600081816101480152818161054c01528181610aa40152611a1b0152612d596000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b6101306101133660046121fa565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019561019036600461222a565b6102db565b005b6101956101a5366004612247565b6103e0565b6101956101b836600461222a565b6103fe565b6101956101cb366004612278565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f736600461222a565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612291565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122db565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af36600461222a565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b815260040161030990612363565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f236849003840184612443565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b815260040161030990612363565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f8361254b565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da91906125f8565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b815260040161030990612655565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb83600001518460200151848660600151856113b5565b915060006040518060600160405280600060038111156108dd576108dd6126a3565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b1565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612709565b6040516020818303038152906040528152506115f7565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906125f8565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b815260040161030990612655565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e00151856113b5565b91506000604051806060016040528060016003811115610f4257610f426126a3565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612758565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127aa565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f89190612898565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612951565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126a3565b0361121057600082604001518060200190518101906111f4919061296f565b90506112088160000151846020015161171d565b505050505050565b600182516003811115611225576112256126a3565b03611254576000826040015180602001905181019061124491906129ba565b9050611208818460200151611794565b600282516003811115611269576112696126a3565b036112ed57600082604001518060200190518101906112889190612a70565b90506112086040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b600382516003811115611302576113026126a3565b036113ae57600082604001518060200190518101906113219190612aee565b90506112086040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b6000856114225760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114ac5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b0385166115215760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b816115325761152f846119e4565b93505b8284116115a75760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115b18385612951565b60008781526005602090815260408083206001600160a01b038a1684529091528120805492965086929091906115e8908490612bb9565b90915550939695505050505050565b600080611602611a16565b604084015160200151909150156116a7576040830151516001600160a01b03166116845760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116a7916001600160a01b03909116908390611b2a565b604051630624488560e41b81526001600160a01b038216906362448850906116d3908690600401612c10565b6020604051808303816000875af11580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171691906125f8565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161175891815260200190565b60405180910390a26103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c0f565b6117c37f0000000000000000000000000000000000000000000000000000000000000000836000015183611b2a565b60007f00000000000000000000000000000000000000000000000000000000000000008284602001516040516024016117fe93929190612c8e565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161183e919084611c44565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d891906125f8565b905061190a7f000000000000000000000000000000000000000000000000000000000000000086600001516000611c5b565b811561195c5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161194f91815260200190565b60405180910390a26119a4565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161199b91815260200190565b60405180910390a25b80156113ae5760608501516113ae906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c0f565b6000611a107f000000000000000000000000000000000000000000000000000000000000000083611d70565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b9190612cb5565b9050611abf816001600160a01b031660009081526001602052604090205460ff1690565b15611b255760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f91906125f8565b611ba99190612bb9565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed8565b6040516001600160a01b038316602482015260448101829052611c3f90849063a9059cbb60e01b90606401611bd8565b505050565b6000611c538460008585611faa565b949350505050565b801580611cd55750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd391906125f8565b155b611d405760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c3f90849063095ea7b360e01b90606401611bd8565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd91906125f8565b9050611df46001600160a01b03851633308661207f565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f91906125f8565b9050818111611ec55760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ecf8282612951565b95945050505050565b6000611f2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b79092919063ffffffff16565b805190915015611c3f5780806020019051810190611f4b9190612cd2565b611c3f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a1015611ffc5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b8347101561204c5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206657506000611c53565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611bd8565b6060611c53848460008585600080866001600160a01b031685876040516120de9190612cf4565b60006040518083038185875af1925050503d806000811461211b576040519150601f19603f3d011682016040523d82523d6000602084013e612120565b606091505b50915091506121318783838761213c565b979650505050505050565b606083156121ab5782516000036121a4576001600160a01b0385163b6121a45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c53565b611c5383838151156121c05781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d10565b6001600160a01b038116811461050c57600080fd5b8035611b25816121da565b6000806040838503121561220d57600080fd5b82359150602083013561221f816121da565b809150509250929050565b60006020828403121561223c57600080fd5b8135611716816121da565b60008082840360e081121561225b57600080fd5b60c081121561226957600080fd5b50919360c08501359350915050565b60006020828403121561228a57600080fd5b5035919050565b600080604083850312156122a457600080fd5b82356001600160401b038111156122ba57600080fd5b830161012081860312156122cd57600080fd5b946020939093013593505050565b600080600080606085870312156122f157600080fd5b843593506020850135612303816121da565b925060408501356001600160401b038082111561231f57600080fd5b818701915087601f83011261233357600080fd5b81358181111561234257600080fd5b88602082850101111561235457600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123ea576123ea6123b1565b60405290565b60405161010081016001600160401b03811182821017156123ea576123ea6123b1565b604051601f8201601f191681016001600160401b038111828210171561243b5761243b6123b1565b604052919050565b600060c0828403121561245557600080fd5b60405160c081018181106001600160401b0382111715612477576124776123b1565b60405282358152602083013561248c816121da565b6020820152604083013561249f816121da565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124e7576124e76123b1565b50601f01601f191660200190565b600082601f83011261250657600080fd5b8135612519612514826124ce565b612413565b81815284602083860101111561252e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561255e57600080fd5b6125666123c7565b82358152612576602084016121ef565b6020820152612587604084016121ef565b604082015260608301356001600160401b038111156125a557600080fd5b6125b1368286016124f5565b6060830152506080830135608082015260a083013560a08201526125d760c084016121ef565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561260a57600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126d45781810151838201526020016126bc565b50506000910152565b600081518084526126f58160208601602086016126b9565b601f01601f19169290920160200192915050565b60208152600082516004811061272f57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5360808401826126dd565b60208152600060018060a01b0380845116602084015260208401516080604085015261278760a08501826126dd565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d160608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526128026101608501836126dd565b9150608086015160c085015260a086015160e085015260c0860151610100612834818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286457600080fd5b8151612872612514826124ce565b81815284602083860101111561288757600080fd5b611c538260208301602087016126b9565b6000602082840312156128aa57600080fd5b81516001600160401b03808211156128c157600080fd5b90830190606082860312156128d557600080fd5b6040516060810181811083821117156128f0576128f06123b1565b60405282516004811061290257600080fd5b81526020838101519082015260408301518281111561292057600080fd5b61292c87828601612853565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1057611a1061293b565b8051611b25816121da565b60006020828403121561298157600080fd5b604051602081018181106001600160401b03821117156129a3576129a36123b1565b60405282516129b1816121da565b81529392505050565b6000602082840312156129cc57600080fd5b81516001600160401b03808211156129e357600080fd5b90830190608082860312156129f757600080fd5b604051608081018181108382111715612a1257612a126123b1565b6040528251612a20816121da565b8152602083015182811115612a3457600080fd5b612a4087828601612853565b6020830152506040830151604082015260608301519250612a60836121da565b6060810192909252509392505050565b600060a08284031215612a8257600080fd5b60405160a081018181106001600160401b0382111715612aa457612aa46123b1565b604052825181526020830151612ab9816121da565b60208201526040830151612acc816121da565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0057600080fd5b81516001600160401b0380821115612b1757600080fd5b908301906101008286031215612b2c57600080fd5b612b346123f0565b82518152612b4460208401612964565b6020820152612b5560408401612964565b6040820152606083015182811115612b6c57600080fd5b612b7887828601612853565b60608301525060808301516080820152612b9460a08401612964565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1057611a1061293b565b600081518084526020808501945080840160005b83811015612c055781516001600160a01b031687529582019590820190600101612be0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c71610100840182612bcc565b905060a0840151601f198483030160e0850152611ecf82826126dd565b60018060a01b0384168152826020820152606060408201526000611ecf60608301846126dd565b600060208284031215612cc757600080fd5b8151611716816121da565b600060208284031215612ce457600080fd5b8151801515811461171657600080fd5b60008251612d068184602087016126b9565b9190910192915050565b60208152600061171660208301846126dd56fea264697066735822122055eaa641c6e090849537661b122859420ea9da414da4b0a253ea02502a6ae51664736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 84544d1c3..9f1a86af5 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_CALL_GAS_PER_BYTE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTIHOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b0838038062004b08833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004ae883398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004ae883398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004ac883398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004ac883398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613e8b62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110570152600081816106ca0152818161108201526110b30152600081816107f201528181610ebe0152818161166d0152818161191301528181611fce0152818161221201526127920152600081816103cb01528181610e9b0152818161163d015281816118ed01528181611fa7015281816121ec015261271c01526000818161074c015281816117ab01526120aa01526000818161032b015281816110f4015281816124790152612b6d0152613e8b6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b60405161029691906132c5565b3480156102cd57600080fd5b506102e16102dc3660046132f8565b6108fd565b6040519015158152602001610296565b61026c6102ff366004613324565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b436600461333c565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c61040836600461337d565b6109c8565b34801561041957600080fd5b5061026c61042836600461339a565b610ac1565b61026c61043b3660046133b3565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e16104923660046132f8565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e636600461337d565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b36600461339a565b610c93565b34801561052c57600080fd5b5061026c61053b36600461339a565b610f93565b34801561054c57600080fd5b5061028c61055b36600461337d565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb8565b3480156105fe57600080fd5b506102e161060d36600461337d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c3660046132f8565b610fc7565b34801561066d57600080fd5b506102e161067c3660046132f8565b611042565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b33660046133fd565b611050565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f36600461342d565b6110df565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e3660046134b6565b6112a9565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db36600461337d565b6112d4565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b610834333461134a565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b60606003805461087a906134e4565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906134e4565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611409565b60019150505b92915050565b600a54156109405760405162461bcd60e51b815260040161093790613518565b60405180910390fd5b61094a813461152e565b50565b60008061095f47600160981b31613582565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109919190613582565b905061099d8282613595565b9250505090565b6000336109b2858285611a19565b6109bd858585611a8d565b506001949350505050565b6109d0611c31565b6001600160a01b0381166109f65760405162461bcd60e51b8152600401610937906135a8565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b610acb3382611c39565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b815260040161093790613518565b61094a610b5d826136e5565b34611d68565b60003361090b818585610b7683836112a9565b610b809190613582565b611409565b610b8d611c31565b6001600160a01b038116610bb35760405162461bcd60e51b8152600401610937906135a8565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b815260040161093790613793565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a9190613595565b905060006064610d8a7f0000000000000000000000000000000000000000000000000000000000000000846137d7565b610d9491906137ee565b90506000610da28284613595565b600c85905590508115610dc457610db930836122c4565b610dc282612346565b505b6000610dd1826000611050565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f319190613826565b604051602081830303815290604052815250612356565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c31565b61094a81612475565b610fac612615565b610fb6600061266f565b565b60606004805461087a906134e4565b60003381610fd582866112a9565b9050838110156110355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611409565b60003361090b818585611a8d565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ae576110a77f0000000000000000000000000000000000000000000000000000000000000000846137d7565b9050610911565b6110d87f0000000000000000000000000000000000000000000000000000000000000000846137ee565b9392505050565b6110e76126c1565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111829190613875565b10156111e95760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f23361060d565b156112585760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611299848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271a92505050565b6112a36001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112dc612615565b6001600160a01b0381166113415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266f565b6001600160a01b0382166113a05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b29190613582565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661146b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115505760405162461bcd60e51b815260040161093790613793565b60026009556000611567606084016040850161337d565b6001600160a01b0316036115c65760405162461bcd60e51b81526020600482015260326024820152600080516020613e1683398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115ea5760405162461bcd60e51b81526004016109379061388e565b61160f82356115ff604085016020860161337d565b838560600135866080013561296e565b90506116366040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169d604086016020870161337d565b6001600160a01b0316146116c35760405162461bcd60e51b8152600401610937906138cf565b6080840135156117305760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b604080516060810190915280600081526020018481526020016040518060200160405280876040016020810190611767919061337d565b6001600160a01b03169052604051611790919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118db565b7f000000000000000000000000000000000000000000000000000000000000000084350361180857306117e2604086016020870161337d565b6001600160a01b0316036118085760405162461bcd60e51b8152600401610937906138cf565b604080516060810190915280600281526020018481526020016040518060a0016040528087600001358152602001876020016020810190611849919061337d565b6001600160a01b031681526020016118676060890160408a0161337d565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c76040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611987576119876135f6565b6040519080825280602002602001820160405280156119b0578160200160208202803683370190505b50815260200185604051602001610f319190613826565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a0592919061391a565b60405180910390a350506001600955505050565b6000611a2584846112a9565b905060001981146112a35781811015611a805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a38484848403611409565b6001600160a01b038316611af15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bcb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a3565b610fb6612615565b6001600160a01b038216611c995760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611521565b505050565b600160095414611d8a5760405162461bcd60e51b815260040161093790613793565b600260095560408201516001600160a01b0316611dfd5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e215760405162461bcd60e51b81526004016109379061388e565b60008260a0015111611e805760405162461bcd60e51b81526020600482015260346024820152600080516020613e16833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611eeb5760405162461bcd60e51b81526020600482015260376024820152600080516020613e3683398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f595760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7782600001518360200151838560e0015186610100015161296e565b9050611f9e6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120215760405162461bcd60e51b8152600401610937906138cf565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208d919061397d565b60405160208183030381529060405281525091506121da565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210457306001600160a01b031684602001516001600160a01b0316036121045760405162461bcd60e51b8152600401610937906138cf565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a391906139cf565b60405160208183030381529060405281525091508360600151516103e86121ca91906137d7565b6121d79062035b60613582565b90505b60006122866040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611987576119876135f6565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a05929190613a5f565b80600b60008282546122d69190613582565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232a57600080fd5b505af115801561233e573d6000803e3d6000fd5b505050505050565b6000612352308361134a565b5090565b600080612361612b68565b60408401516020015190915015612406576040830151516001600160a01b03166123e35760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612406916001600160a01b03909116908390612c7c565b604051630624488560e41b81526001600160a01b03821690636244885090612432908690600401613b4c565b6020604051808303816000875af1158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d89190613875565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190613875565b600754909150818311156125695760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125de5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b03163314610fb65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127135760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127905760405162461bcd60e51b81526020600482015260306024820152600080516020613e3683398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128255760405162461bcd60e51b81526020600482015260386024820152600080516020613e3683398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b60008180602001905181019061283b9190613c18565b9050600061284e82602001516001611050565b905060008251600381111561286557612865613810565b036128d857600082604001518060200190518101906128849190613cbc565b80516040518481529192506001600160a01b0316907f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b9060200160405180910390a280516128d29083612d50565b50612967565b6001825160038111156128ed576128ed613810565b03612918576000826040015180602001905181019061290c9190613d08565b90506128d28183612e4f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e3683398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129d15760405162461bcd60e51b815260206004820152603a6024820152600080516020613e1683398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b038516612a3b5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e1683398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a4484612346565b9350612a508284613582565b8411612ac45760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612ace8385613595565b9350612ad984612f9f565b6000612ae6856000611050565b905060008111612b5e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613dbf565b9050612c11816001600160a01b031660009081526006602052604090205460ff1690565b15612c775760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf19190613875565b612cfb9190613582565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a3908590612fa9565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d8b91815260200190565b60405180910390a2600a5481908015612e455780831115612df55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612de98183613595565b6000600a559150612e45565b6000612e018483613595565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a384836122c4565b600a5415612e6557610b2d826060015182612d50565b612e6f30826122c4565b60008260200151604051602401612e8691906132c5565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ec7919085908561307b565b90508015612f1b5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f0e91815260200190565b60405180910390a26112a3565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f5a91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612967573d6000803e3d6000fd5b61094a3082611c39565b6000612ffe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131529092919063ffffffff16565b805190915015611d63578080602001905181019061301c9190613ddc565b611d635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a10156130cd5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b8347101561311d5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b6000036131375750600061314a565b600080600084516020860188888bf19150505b949350505050565b606061314a848460008585600080866001600160a01b031685876040516131799190613df9565b60006040518083038185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50915091506131cc878383876131d7565b979650505050505050565b6060831561324657825160000361323f576001600160a01b0385163b61323f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161314a565b61314a838381511561325b5781518083602001fd5b8060405162461bcd60e51b815260040161093791906132c5565b60005b83811015613290578181015183820152602001613278565b50506000910152565b600081518084526132b1816020860160208601613275565b601f01601f19169290920160200192915050565b6020815260006110d86020830184613299565b6001600160a01b038116811461094a57600080fd5b8035612c77816132d8565b6000806040838503121561330b57600080fd5b8235613316816132d8565b946020939093013593505050565b600060c0828403121561333657600080fd5b50919050565b60008060006060848603121561335157600080fd5b833561335c816132d8565b9250602084013561336c816132d8565b929592945050506040919091013590565b60006020828403121561338f57600080fd5b81356110d8816132d8565b6000602082840312156133ac57600080fd5b5035919050565b6000602082840312156133c557600080fd5b813567ffffffffffffffff8111156133dc57600080fd5b820161012081850312156110d857600080fd5b801515811461094a57600080fd5b6000806040838503121561341057600080fd5b823591506020830135613422816133ef565b809150509250929050565b6000806000806060858703121561344357600080fd5b843593506020850135613455816132d8565b9250604085013567ffffffffffffffff8082111561347257600080fd5b818701915087601f83011261348657600080fd5b81358181111561349557600080fd5b8860208285010111156134a757600080fd5b95989497505060200194505050565b600080604083850312156134c957600080fd5b82356134d4816132d8565b91506020830135613422816132d8565b600181811c908216806134f857607f821691505b60208210810361333657634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109115761091161356c565b818103818111156109115761091161356c565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715613630576136306135f6565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561365f5761365f6135f6565b604052919050565b600067ffffffffffffffff821115613681576136816135f6565b50601f01601f191660200190565b600082601f8301126136a057600080fd5b81356136b36136ae82613667565b613636565b8181528460208386010111156136c857600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156136f857600080fd5b61370061360c565b82358152613710602084016132ed565b6020820152613721604084016132ed565b6040820152606083013567ffffffffffffffff81111561374057600080fd5b61374c3682860161368f565b6060830152506080830135608082015260a083013560a082015261377260c084016132ed565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b80820281158282048414176109115761091161356c565b60008261380b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061384c57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261314a6080840182613299565b60006020828403121561388757600080fd5b5051919050565b6020808252603390820152600080516020613e16833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e3683398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613930816132d8565b6001600160a01b03908116602084015260408501359061394f826132d8565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139ac60a0850182613299565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a1a610120850183613299565b9150608085015160a085015260a0850151613a4060c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613a8660608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613ab7610160850183613299565b9150608086015160c085015260a086015160e085015260c0860151610100613ae9818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b415781516001600160a01b031687529582019590820190600101613b1c565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bad610100840182613b08565b905060a0840151601f198483030160e0850152613bca8282613299565b95945050505050565b600082601f830112613be457600080fd5b8151613bf26136ae82613667565b818152846020838601011115613c0757600080fd5b61314a826020830160208701613275565b600060208284031215613c2a57600080fd5b815167ffffffffffffffff80821115613c4257600080fd5b9083019060608286031215613c5657600080fd5b604051606081018181108382111715613c7157613c716135f6565b604052825160048110613c8357600080fd5b815260208381015190820152604083015182811115613ca157600080fd5b613cad87828601613bd3565b60408301525095945050505050565b600060208284031215613cce57600080fd5b6040516020810181811067ffffffffffffffff82111715613cf157613cf16135f6565b6040528251613cff816132d8565b81529392505050565b600060208284031215613d1a57600080fd5b815167ffffffffffffffff80821115613d3257600080fd5b9083019060808286031215613d4657600080fd5b604051608081018181108382111715613d6157613d616135f6565b6040528251613d6f816132d8565b8152602083015182811115613d8357600080fd5b613d8f87828601613bd3565b6020830152506040830151604082015260608301519250613daf836132d8565b6060810192909252509392505050565b600060208284031215613dd157600080fd5b81516110d8816132d8565b600060208284031215613dee57600080fd5b81516110d8816133ef565b60008251613e0b818460208701613275565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220f1dac0e63f7bbd5dd35ae4923b4bae1d73a5c6a5a30e8feddf8e5fb84ca3433d64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004ac838038062004ac8833981016040819052620000359162000774565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d919062000869565b60408051601f198184030181529190528a5160036200008d83826200092a565b5060046200009c82826200092a565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001979190620009f6565b60075550620001a6336200050c565b620001b1816200055e565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620009f6565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004aa883398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004aa883398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620003eb5760405162461bcd60e51b815260206004820152602d602482015260008051602062004a8883398151915260448201526c191958da5b585b1cd4da1a599d609a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200040a82600a62000b25565b610100521515610120525050505060a08201516000039050620004965760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620004fd5760405162461bcd60e51b815260206004820152602a602482015260008051602062004a8883398151915260448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b3d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000568620005dd565b6001600160a01b038116620005cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620005da816200050c565b50565b6008546001600160a01b03163314620006395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200067757620006776200063b565b60405290565b60005b838110156200069a57818101518382015260200162000680565b50506000910152565b600082601f830112620006b557600080fd5b81516001600160401b0380821115620006d257620006d26200063b565b604051601f8301601f19908116603f01168101908282118183101715620006fd57620006fd6200063b565b816040528381528660208588010111156200071757600080fd5b6200072a8460208301602089016200067d565b9695505050505050565b80516001600160a01b03811681146200074c57600080fd5b919050565b805160ff811681146200074c57600080fd5b805180151581146200074c57600080fd5b6000602082840312156200078757600080fd5b81516001600160401b03808211156200079f57600080fd5b908301906101208286031215620007b557600080fd5b620007bf62000651565b825182811115620007cf57600080fd5b620007dd87828601620006a3565b825250620007ee6020840162000734565b6020820152620008016040840162000734565b6040820152606083015160608201526200081e6080840162000734565b608082015260a083015160a08201526200083b60c0840162000751565b60c08201526200084e60e0840162000763565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b8152600082516200088e8160088501602087016200067d565b9190910160080192915050565b600181811c90821680620008b057607f821691505b602082108103620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092557600081815260208120601f850160051c81016020861015620009005750805b601f850160051c820191505b8181101562000921578281556001016200090c565b5050505b505050565b81516001600160401b038111156200094657620009466200063b565b6200095e816200095784546200089b565b84620008d7565b602080601f8311600181146200099657600084156200097d5750858301515b600019600386901b1c1916600185901b17855562000921565b600085815260208120601f198616915b82811015620009c757888601518255948401946001909101908401620009a6565b5085821015620009e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6757816000190482111562000a4b5762000a4b62000a10565b8085161562000a5957918102915b93841c939080029062000a2b565b509250929050565b60008262000a805750600162000b1f565b8162000a8f5750600062000b1f565b816001811462000aa8576002811462000ab35762000ad3565b600191505062000b1f565b60ff84111562000ac75762000ac762000a10565b50506001821b62000b1f565b5060208310610133831016604e8410600b841016171562000af8575081810a62000b1f565b62000b04838362000a26565b806000190482111562000b1b5762000b1b62000a10565b0290505b92915050565b600062000b3660ff84168362000a6f565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613e4b62000c3d600039600081816104a90152610d6501526000818161059d015261096501526000818161037701526110550152600081816106ca0152818161108001526110b10152600081816107f201528181610ebe0152818161166b0152818161191101528181611fcc0152818161221001526127900152600081816103cb01528181610e9b0152818161163b015281816118eb01528181611fa5015281816121ea015261271a01526000818161074c015281816117a901526120a801526000818161032b015281816110f2015281816124770152612b2d0152613e4b6000f3fe60806040526004361061025f5760003560e01c8063715018a611610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461076e578063dd62ed3e14610783578063ecd4ed1b146107a3578063f2fde38b146107c0578063f5ea0603146107e0578063fb027c9d146108145761026e565b8063c452165e146106ec578063c868efaa14610704578063d0e30db01461026e578063d10a5b8c14610724578063d127dc9b1461073a5761026e565b8063a2309ff811610108578063a2309ff81461062b578063a457c2d714610641578063a9059cbb14610661578063b6580b6914610681578063b944858714610698578063ba3f5a12146106b85761026e565b8063715018a6146105765780638ac7dd201461058b5780638da5cb5b146105bf57806395d89b41146105dd57806397314297146105f25761026e565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104975780634511243e146104cb57806349e3284e146104eb57806355538c8b146105005780635eb995141461052057806370a08231146105405761026e565b80632e1a7d4d1461040d57806330079bff1461042d578063313ce56714610440578063329c3e121461045c57806339509351146104775761026e565b80631a7f5bec116102245780631a7f5bec146103195780631ce220751461036557806323b872dd1461039957806329b7b3fd146103b95780632b0d8f18146103ed5761026e565b8062d872ae1461027657806306fdde031461029f578063095ea7b3146102c1578063146dfd3c146102f157806318160ddd146103045761026e565b3661026e5761026c61082a565b005b61026c61082a565b34801561028257600080fd5b5061028c600a5481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b461086b565b6040516102969190613285565b3480156102cd57600080fd5b506102e16102dc3660046132b8565b6108fd565b6040519015158152602001610296565b61026c6102ff3660046132e4565b610917565b34801561031057600080fd5b5061028c61094d565b34801561032557600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b34801561037157600080fd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a557600080fd5b506102e16103b43660046132fc565b6109a4565b3480156103c557600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f957600080fd5b5061026c61040836600461333d565b6109c8565b34801561041957600080fd5b5061026c61042836600461335a565b610ac1565b61026c61043b366004613373565b610b31565b34801561044c57600080fd5b5060405160128152602001610296565b34801561046857600080fd5b5061034d6001600160991b0181565b34801561048357600080fd5b506102e16104923660046132b8565b610b63565b3480156104a357600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d757600080fd5b5061026c6104e636600461333d565b610b85565b3480156104f757600080fd5b506102e1610c82565b34801561050c57600080fd5b5061026c61051b36600461335a565b610c93565b34801561052c57600080fd5b5061026c61053b36600461335a565b610f93565b34801561054c57600080fd5b5061028c61055b36600461333d565b6001600160a01b031660009081526020819052604090205490565b34801561058257600080fd5b5061026c610fa4565b34801561059757600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cb57600080fd5b506008546001600160a01b031661034d565b3480156105e957600080fd5b506102b4610fb6565b3480156105fe57600080fd5b506102e161060d36600461333d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561063757600080fd5b5061028c600b5481565b34801561064d57600080fd5b506102e161065c3660046132b8565b610fc5565b34801561066d57600080fd5b506102e161067c3660046132b8565b611040565b34801561068d57600080fd5b5061028c62035b6081565b3480156106a457600080fd5b5061028c6106b33660046133bd565b61104e565b3480156106c457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061034d600160981b81565b34801561071057600080fd5b5061026c61071f3660046133ed565b6110dd565b34801561073057600080fd5b5061028c600c5481565b34801561074657600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077a57600080fd5b5060075461028c565b34801561078f57600080fd5b5061028c61079e366004613476565b6112a7565b3480156107af57600080fd5b5061034d62010203600160981b0181565b3480156107cc57600080fd5b5061026c6107db36600461333d565b6112d2565b3480156107ec57600080fd5b5061034d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561082057600080fd5b5061028c6103e881565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108693334611348565b565b60606003805461087a906134a4565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906134a4565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b60003361090b818585611407565b60019150505b92915050565b600a54156109405760405162461bcd60e51b8152600401610937906134d8565b60405180910390fd5b61094a813461152c565b50565b60008061095f47600160981b31613542565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109919190613542565b905061099d8282613555565b9250505090565b6000336109b2858285611a17565b6109bd858585611a8b565b506001949350505050565b6109d0611c2f565b6001600160a01b0381166109f65760405162461bcd60e51b815260040161093790613568565b6001600160a01b03811660009081526006602052604090205460ff1615610a755760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610937565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b003382611c37565b604051339082156108fc029083906000818181858888f19350505050158015610b2d573d6000803e3d6000fd5b5050565b600a5415610b515760405162461bcd60e51b8152600401610937906134d8565b61094a610b5d826136a5565b34611d66565b60003361090b818585610b7683836112a7565b610b809190613542565b611407565b610b8d611c2f565b6001600160a01b038116610bb35760405162461bcd60e51b815260040161093790613568565b6001600160a01b03811660009081526006602052604090205460ff16610c2d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610937565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610c8e600a541590565b905090565b600160095414610cb55760405162461bcd60e51b815260040161093790613753565b6002600955600c54600160981b31908111610d4a5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610937565b6000600c5482610d5a9190613555565b905060006064610d8a7f000000000000000000000000000000000000000000000000000000000000000084613797565b610d9491906137ae565b90506000610da28284613555565b600c85905590508115610dc457610db930836122c2565b610dc282612344565b505b6000610dd182600061104e565b905060008111610e495760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610937565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f4891906080820190815260200184604051602001610f3191906137e6565b604051602081830303815290604052815250612354565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610f7c91815260200190565b60405180910390a250506001600955505050505050565b610f9b611c2f565b61094a81612473565b610fac612613565b610869600061266d565b60606004805461087a906134a4565b60003381610fd382866112a7565b9050838110156110335760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610937565b6109bd8286868403611407565b60003361090b818585611a8b565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110ac576110a57f000000000000000000000000000000000000000000000000000000000000000084613797565b9050610911565b6110d67f0000000000000000000000000000000000000000000000000000000000000000846137ae565b9392505050565b6110e56126bf565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190613835565b10156111e75760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610937565b6111f03361060d565b156112565760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610937565b611297848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061271892505050565b6112a16001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112da612613565b6001600160a01b03811661133f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610937565b61094a8161266d565b6001600160a01b03821661139e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610937565b80600260008282546113b09190613542565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610937565b6001600160a01b0382166114ca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610937565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60016009541461154e5760405162461bcd60e51b815260040161093790613753565b60026009556000611565606084016040850161333d565b6001600160a01b0316036115c45760405162461bcd60e51b81526020600482015260326024820152600080516020613dd683398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610937565b8160a001356000036115e85760405162461bcd60e51b81526004016109379061384e565b61160d82356115fd604085016020860161333d565b838560600135866080013561292e565b90506116346040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117a7576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661169b604086016020870161333d565b6001600160a01b0316146116c15760405162461bcd60e51b81526004016109379061388f565b60808401351561172e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610937565b604080516060810190915280600081526020018481526020016040518060200160405280876040016020810190611765919061333d565b6001600160a01b0316905260405161178e919060200190516001600160a01b0316815260200190565b60405160208183030381529060405281525091506118d9565b7f000000000000000000000000000000000000000000000000000000000000000084350361180657306117e0604086016020870161333d565b6001600160a01b0316036118065760405162461bcd60e51b81526004016109379061388f565b604080516060810190915280600281526020018481526020016040518060a0016040528087600001358152602001876020016020810190611847919061333d565b6001600160a01b031681526020016118656060890160408a0161333d565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b60006119c56040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611985576119856135b6565b6040519080825280602002602001820160405280156119ae578160200160208202803683370190505b50815260200185604051602001610f3191906137e6565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a039291906138da565b60405180910390a350506001600955505050565b6000611a2384846112a7565b905060001981146112a15781811015611a7e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610937565b6112a18484848403611407565b6001600160a01b038316611aef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610937565b6001600160a01b038216611b515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610937565b6001600160a01b03831660009081526020819052604090205481811015611bc95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610937565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112a1565b610869612613565b6001600160a01b038216611c975760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610937565b6001600160a01b03821660009081526020819052604090205481811015611d0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610937565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161151f565b505050565b600160095414611d885760405162461bcd60e51b815260040161093790613753565b600260095560408201516001600160a01b0316611dfb5760405162461bcd60e51b815260206004820152603b6024820152600080516020613dd683398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610937565b6000826080015111611e1f5760405162461bcd60e51b81526004016109379061384e565b60008260a0015111611e7e5760405162461bcd60e51b81526020600482015260346024820152600080516020613dd6833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610937565b81608001518260a0015110611ee95760405162461bcd60e51b81526020600482015260376024820152600080516020613df683398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610937565b60c08201516001600160a01b0316611f575760405162461bcd60e51b815260206004820152603b6024820152600080516020613dd683398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610937565b611f7582600001518360200151838560e0015186610100015161292e565b9050611f9c6040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120a4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b03161461201f5760405162461bcd60e51b81526004016109379061388f565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681525060405160200161208b919061393d565b60405160208183030381529060405281525091506121d8565b83517f0000000000000000000000000000000000000000000000000000000000000000900361210257306001600160a01b031684602001516001600160a01b0316036121025760405162461bcd60e51b81526004016109379061388f565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121a1919061398f565b60405160208183030381529060405281525091508360600151516103e86121c89190613797565b6121d59062035b60613542565b90505b60006122846040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611985576119856135b6565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a03929190613a1f565b80600b60008282546122d49190613542565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561232857600080fd5b505af115801561233c573d6000803e3d6000fd5b505050505050565b60006123503083611348565b5090565b60008061235f612b28565b60408401516020015190915015612404576040830151516001600160a01b03166123e15760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610937565b604083015160208101519051612404916001600160a01b03909116908390612c3c565b604051630624488560e41b81526001600160a01b03821690636244885090612430908690600401613b0c565b6020604051808303816000875af115801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d69190613835565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f79190613835565b600754909150818311156125675760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610937565b8083116125dc5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610937565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127115760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610937565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461278e5760405162461bcd60e51b81526020600482015260306024820152600080516020613df683398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128235760405162461bcd60e51b81526020600482015260386024820152600080516020613df683398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610937565b6000818060200190518101906128399190613bd8565b9050600061284c8260200151600161104e565b9050600082516003811115612863576128636137d0565b0361289857600082604001518060200190518101906128829190613c7c565b9050612892816000015183612d10565b50612927565b6001825160038111156128ad576128ad6137d0565b036128d857600082604001518060200190518101906128cc9190613cc8565b90506128928183612e0f565b60405162461bcd60e51b81526020600482015260306024820152600080516020613df683398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610937565b5050505050565b6000856129915760405162461bcd60e51b815260206004820152603a6024820152600080516020613dd683398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610937565b6001600160a01b0385166129fb5760405162461bcd60e51b815260206004820152603b6024820152600080516020613dd683398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610937565b612a0484612344565b9350612a108284613542565b8411612a845760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610937565b612a8e8385613555565b9350612a9984612f5f565b6000612aa685600061104e565b905060008111612b1e5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610937565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bad9190613d7f565b9050612bd1816001600160a01b031660009081526006602052604090205460ff1690565b15612c375760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610937565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb19190613835565b612cbb9190613542565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112a1908590612f69565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612d4b91815260200190565b60405180910390a2600a5481908015612e055780831115612db55760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612da98183613555565b6000600a559150612e05565b6000612dc18483613555565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112a184836122c2565b600a5415612e2557610b2d826060015182612d10565b612e2f30826122c2565b60008260200151604051602401612e469190613285565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612e87919085908561303b565b90508015612edb5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612ece91815260200190565b60405180910390a26112a1565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f1a91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612927573d6000803e3d6000fd5b61094a3082611c37565b6000612fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131129092919063ffffffff16565b805190915015611d615780806020019051810190612fdc9190613d9c565b611d615760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610937565b6000845a101561308d5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610937565b834710156130dd5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610937565b826001600160a01b03163b6000036130f75750600061310a565b600080600084516020860188888bf19150505b949350505050565b606061310a848460008585600080866001600160a01b031685876040516131399190613db9565b60006040518083038185875af1925050503d8060008114613176576040519150601f19603f3d011682016040523d82523d6000602084013e61317b565b606091505b509150915061318c87838387613197565b979650505050505050565b606083156132065782516000036131ff576001600160a01b0385163b6131ff5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610937565b508161310a565b61310a838381511561321b5781518083602001fd5b8060405162461bcd60e51b81526004016109379190613285565b60005b83811015613250578181015183820152602001613238565b50506000910152565b60008151808452613271816020860160208601613235565b601f01601f19169290920160200192915050565b6020815260006110d66020830184613259565b6001600160a01b038116811461094a57600080fd5b8035612c3781613298565b600080604083850312156132cb57600080fd5b82356132d681613298565b946020939093013593505050565b600060c082840312156132f657600080fd5b50919050565b60008060006060848603121561331157600080fd5b833561331c81613298565b9250602084013561332c81613298565b929592945050506040919091013590565b60006020828403121561334f57600080fd5b81356110d681613298565b60006020828403121561336c57600080fd5b5035919050565b60006020828403121561338557600080fd5b813567ffffffffffffffff81111561339c57600080fd5b820161012081850312156110d657600080fd5b801515811461094a57600080fd5b600080604083850312156133d057600080fd5b8235915060208301356133e2816133af565b809150509250929050565b6000806000806060858703121561340357600080fd5b84359350602085013561341581613298565b9250604085013567ffffffffffffffff8082111561343257600080fd5b818701915087601f83011261344657600080fd5b81358181111561345557600080fd5b88602082850101111561346757600080fd5b95989497505060200194505050565b6000806040838503121561348957600080fd5b823561349481613298565b915060208301356133e281613298565b600181811c908216806134b857607f821691505b6020821081036132f657634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109115761091161352c565b818103818111156109115761091161352c565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135f0576135f06135b6565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561361f5761361f6135b6565b604052919050565b600067ffffffffffffffff821115613641576136416135b6565b50601f01601f191660200190565b600082601f83011261366057600080fd5b813561367361366e82613627565b6135f6565b81815284602083860101111561368857600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156136b857600080fd5b6136c06135cc565b823581526136d0602084016132ad565b60208201526136e1604084016132ad565b6040820152606083013567ffffffffffffffff81111561370057600080fd5b61370c3682860161364f565b6060830152506080830135608082015260a083013560a082015261373260c084016132ad565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b80820281158282048414176109115761091161352c565b6000826137cb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061380c57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261310a6080840182613259565b60006020828403121561384757600080fd5b5051919050565b6020808252603390820152600080516020613dd6833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613df683398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356138f081613298565b6001600160a01b03908116602084015260408501359061390f82613298565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b0380845116602084015260208401516080604085015261396c60a0850182613259565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b038082166040850152806040860151166060850152505060608301516101008060808501526139da610120850183613259565b9150608085015160a085015260a0850151613a0060c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613a4660608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613a77610160850183613259565b9150608086015160c085015260a086015160e085015260c0860151610100613aa9818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b015781516001600160a01b031687529582019590820190600101613adc565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613b6d610100840182613ac8565b905060a0840151601f198483030160e0850152613b8a8282613259565b95945050505050565b600082601f830112613ba457600080fd5b8151613bb261366e82613627565b818152846020838601011115613bc757600080fd5b61310a826020830160208701613235565b600060208284031215613bea57600080fd5b815167ffffffffffffffff80821115613c0257600080fd5b9083019060608286031215613c1657600080fd5b604051606081018181108382111715613c3157613c316135b6565b604052825160048110613c4357600080fd5b815260208381015190820152604083015182811115613c6157600080fd5b613c6d87828601613b93565b60408301525095945050505050565b600060208284031215613c8e57600080fd5b6040516020810181811067ffffffffffffffff82111715613cb157613cb16135b6565b6040528251613cbf81613298565b81529392505050565b600060208284031215613cda57600080fd5b815167ffffffffffffffff80821115613cf257600080fd5b9083019060808286031215613d0657600080fd5b604051608081018181108382111715613d2157613d216135b6565b6040528251613d2f81613298565b8152602083015182811115613d4357600080fd5b613d4f87828601613b93565b6020830152506040830151604082015260608301519250613d6f83613298565b6060810192909252509392505050565b600060208284031215613d9157600080fd5b81516110d681613298565b600060208284031215613dae57600080fd5b81516110d6816133af565b60008251613dcb818460208701613235565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220e6ea084babf6b52fb43353612a0ea69a5b6e0098df31431ed8844887e9adbdca64736f6c634300081200334e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642054656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index e9b58f7a6..a6fefe071 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200319c3803806200319c8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d0b6200049160003960008181610402015281816118fd015281816119b20152611b4d0152600081816101070152818161034501528181610a8e0152610ede01526000818161039901526115ab01526000818161020a0152818161068801528181610f7d0152611b7d0152612d0b6000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121fb565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f336600461222b565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f366004612243565b610441565b610193610272366004612260565b61053d565b34801561028357600080fd5b50610193610292366004612243565b610551565b3480156102a357600080fd5b506101936102b236600461229b565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b50610323610305366004612243565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b506101936103823660046122b4565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb366004612243565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e610436368390038301836123ce565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e61054982612524565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a90612459565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071691906125d1565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a9061262e565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef836000015184602001518486606001518561153c565b91506000604051806060016040528060006003811115610a1157610a1161267c565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb61233c565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b91906126e2565b60405160208183030381529060405281525061177e565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a906125ea565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a9061262e565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e001518561153c565b91506000604051806060016040528060016003811115610e3257610e3261267c565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e909190612731565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb61233c565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612783565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906125d1565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612871565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d8908261292a565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156113115761131161267c565b0361139757600082604001518060200190518101906113309190612948565b905080600001516001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b846020015160405161137591815260200190565b60405180910390a261138f816000015184602001516118a4565b505050505050565b6001825160038111156113ac576113ac61267c565b036113db57600082604001518060200190518101906113cb9190612993565b905061138f81846020015161199c565b6002825160038111156113f0576113f061267c565b03611474576000826040015180602001905181019061140f9190612a49565b905061138f6040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b6003825160038111156114895761148961267c565b0361153557600082604001518060200190518101906114a89190612ac7565b905061138f6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b6000856115a95760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036116335760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b0385166116a85760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b816116b9576116b684611b46565b93505b82841161172e5760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b611738838561292a565b60008781526005602090815260408083206001600160a01b038a16845290915281208054929650869290919061176f908490612b92565b90915550939695505050505050565b600080611789611b78565b6040840151602001519091501561182e576040830151516001600160a01b031661180b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b60408301516020810151905161182e916001600160a01b03909116908390611c8c565b604051630624488560e41b81526001600160a01b0382169063624488509061185a908690600401612be9565b6020604051808303816000875af1158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d91906125d1565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516118df91815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f19350505050158015611997573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b5050505060008260200151604051602401611a2d9190612c67565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a6e9190859085611d60565b90508015611ac25783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611ab591815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611b0191815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015611535573d6000803e3d6000fd5b6000611b727f000000000000000000000000000000000000000000000000000000000000000083611e37565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd9190612c7a565b9050611c21816001600160a01b031660009081526001602052604090205460ff1690565b15611c875760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0191906125d1565b611d0b9190612b92565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611fe6565b6000845a1015611db25760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611e025760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611e1c57506000611e2f565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea491906125d1565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6591906125d1565b9050818111611fd35760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611fdd828261292a565b95945050505050565b600061203b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b89092919063ffffffff16565b80519091501561199757808060200190518101906120599190612c97565b6119975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611e2f848460008585600080866001600160a01b031685876040516120df9190612cb9565b60006040518083038185875af1925050503d806000811461211c576040519150601f19603f3d011682016040523d82523d6000602084013e612121565b606091505b50915091506121328783838761213d565b979650505050505050565b606083156121ac5782516000036121a5576001600160a01b0385163b6121a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611e2f565b611e2f83838151156121c15781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c67565b6001600160a01b038116811461043e57600080fd5b8035611c87816121db565b6000806040838503121561220e57600080fd5b823591506020830135612220816121db565b809150509250929050565b600060c0828403121561223d57600080fd5b50919050565b60006020828403121561225557600080fd5b813561189d816121db565b60006020828403121561227257600080fd5b81356001600160401b0381111561228857600080fd5b8201610120818503121561189d57600080fd5b6000602082840312156122ad57600080fd5b5035919050565b600080600080606085870312156122ca57600080fd5b8435935060208501356122dc816121db565b925060408501356001600160401b03808211156122f857600080fd5b818701915087601f83011261230c57600080fd5b81358181111561231b57600080fd5b88602082850101111561232d57600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123755761237561233c565b60405290565b60405161010081016001600160401b03811182821017156123755761237561233c565b604051601f8201601f191681016001600160401b03811182821017156123c6576123c661233c565b604052919050565b600060c082840312156123e057600080fd5b60405160c081018181106001600160401b03821117156124025761240261233c565b604052823581526020830135612417816121db565b6020820152604083013561242a816121db565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b038211156124c0576124c061233c565b50601f01601f191660200190565b600082601f8301126124df57600080fd5b81356124f26124ed826124a7565b61239e565b81815284602083860101111561250757600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561253757600080fd5b61253f612352565b8235815261254f602084016121f0565b6020820152612560604084016121f0565b604082015260608301356001600160401b0381111561257e57600080fd5b61258a368286016124ce565b6060830152506080830135608082015260a083013560a08201526125b060c084016121f0565b60c082015260e0838101359082015261010092830135928101929092525090565b6000602082840312156125e357600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126ad578181015183820152602001612695565b50506000910152565b600081518084526126ce816020860160208601612692565b601f01601f19169290920160200192915050565b60208152600082516004811061270857634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611e2f60808401826126b6565b60208152600060018060a01b0380845116602084015260208401516080604085015261276060a08501826126b6565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127aa60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526127db6101608501836126b6565b9150608086015160c085015260a086015160e085015260c086015161010061280d818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261283d57600080fd5b815161284b6124ed826124a7565b81815284602083860101111561286057600080fd5b611e2f826020830160208701612692565b60006020828403121561288357600080fd5b81516001600160401b038082111561289a57600080fd5b90830190606082860312156128ae57600080fd5b6040516060810181811083821117156128c9576128c961233c565b6040528251600481106128db57600080fd5b8152602083810151908201526040830151828111156128f957600080fd5b6129058782860161282c565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b7257611b72612914565b8051611c87816121db565b60006020828403121561295a57600080fd5b604051602081018181106001600160401b038211171561297c5761297c61233c565b604052825161298a816121db565b81529392505050565b6000602082840312156129a557600080fd5b81516001600160401b03808211156129bc57600080fd5b90830190608082860312156129d057600080fd5b6040516080810181811083821117156129eb576129eb61233c565b60405282516129f9816121db565b8152602083015182811115612a0d57600080fd5b612a198782860161282c565b6020830152506040830151604082015260608301519250612a39836121db565b6060810192909252509392505050565b600060a08284031215612a5b57600080fd5b60405160a081018181106001600160401b0382111715612a7d57612a7d61233c565b604052825181526020830151612a92816121db565b60208201526040830151612aa5816121db565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612ad957600080fd5b81516001600160401b0380821115612af057600080fd5b908301906101008286031215612b0557600080fd5b612b0d61237b565b82518152612b1d6020840161293d565b6020820152612b2e6040840161293d565b6040820152606083015182811115612b4557600080fd5b612b518782860161282c565b60608301525060808301516080820152612b6d60a0840161293d565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b7257611b72612914565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c4a610100840182612ba5565b905060a0840151601f198483030160e0850152611fdd82826126b6565b60208152600061189d60208301846126b6565b600060208284031215612c8c57600080fd5b815161189d816121db565b600060208284031215612ca957600080fd5b8151801515811461189d57600080fd5b60008251612ccb818460208701612692565b919091019291505056fea264697066735822122061be975cc57ca31712241b468e1aca2d0344c9c252376ec9aa14b335307df7ad64736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162003151380380620031518339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612cc06200049160003960008181610402015281816118b2015281816119670152611b020152600081816101070152818161034501528181610a8e0152610ede015260008181610399015261156001526000818161020a0152818161068801528181610f7d0152611b320152612cc06000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121b0565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f33660046121e0565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f3660046121f8565b610441565b610193610272366004612215565b61053d565b34801561028357600080fd5b506101936102923660046121f8565b610551565b3480156102a357600080fd5b506101936102b2366004612250565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b506103236103053660046121f8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b50610193610382366004612269565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb3660046121f8565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e61043636839003830183612383565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e610549826124d9565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190612586565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a906125e3565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef83600001518460200151848660600151856114f1565b91506000604051806060016040528060006003811115610a1157610a11612631565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb6122f1565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b9190612697565b604051602081830303815290604052815250611733565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a906125e3565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e00151856114f1565b91506000604051806060016040528060016003811115610e3257610e32612631565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e9091906126e6565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb6122f1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612738565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190612586565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612826565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d890826128df565b60008681526005602090815260408083206001600160a01b03891684529091528120919091558251600381111561131157611311612631565b0361134c576000826040015180602001905181019061133091906128fd565b905061134481600001518460200151611859565b505050505050565b60018251600381111561136157611361612631565b0361139057600082604001518060200190518101906113809190612948565b9050611344818460200151611951565b6002825160038111156113a5576113a5612631565b0361142957600082604001518060200190518101906113c491906129fe565b90506113446040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b60038251600381111561143e5761143e612631565b036114ea576000826040015180602001905181019061145d9190612a7c565b90506113446040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b60008561155e5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036115e85760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b03851661165d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b8161166e5761166b84611afb565b93505b8284116116e35760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6116ed83856128df565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611724908490612b47565b90915550939695505050505050565b60008061173e611b2d565b604084015160200151909150156117e3576040830151516001600160a01b03166117c05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b6040830151602081015190516117e3916001600160a01b03909116908390611c41565b604051630624488560e41b81526001600160a01b0382169063624488509061180f908690600401612b9e565b6020604051808303816000875af115801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190612586565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161189491815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118fe57600080fd5b505af1158015611912573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f1935050505015801561194c573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050600082602001516040516024016119e29190612c1c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a239190859085611d15565b90508015611a775783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611a6a91815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611ab691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156114ea573d6000803e3d6000fd5b6000611b277f000000000000000000000000000000000000000000000000000000000000000083611dec565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190612c2f565b9050611bd6816001600160a01b031660009081526001602052604090205460ff1690565b15611c3c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190612586565b611cc09190612b47565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611f9b565b6000845a1015611d675760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611db75760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611dd157506000611de4565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190612586565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1a9190612586565b9050818111611f885760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611f9282826128df565b95945050505050565b6000611ff0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661206d9092919063ffffffff16565b80519091501561194c578080602001905181019061200e9190612c4c565b61194c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611de4848460008585600080866001600160a01b031685876040516120949190612c6e565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e7878383876120f2565b979650505050505050565b6060831561216157825160000361215a576001600160a01b0385163b61215a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611de4565b611de483838151156121765781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c1c565b6001600160a01b038116811461043e57600080fd5b8035611c3c81612190565b600080604083850312156121c357600080fd5b8235915060208301356121d581612190565b809150509250929050565b600060c082840312156121f257600080fd5b50919050565b60006020828403121561220a57600080fd5b813561185281612190565b60006020828403121561222757600080fd5b81356001600160401b0381111561223d57600080fd5b8201610120818503121561185257600080fd5b60006020828403121561226257600080fd5b5035919050565b6000806000806060858703121561227f57600080fd5b84359350602085013561229181612190565b925060408501356001600160401b03808211156122ad57600080fd5b818701915087601f8301126122c157600080fd5b8135818111156122d057600080fd5b8860208285010111156122e257600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561232a5761232a6122f1565b60405290565b60405161010081016001600160401b038111828210171561232a5761232a6122f1565b604051601f8201601f191681016001600160401b038111828210171561237b5761237b6122f1565b604052919050565b600060c0828403121561239557600080fd5b60405160c081018181106001600160401b03821117156123b7576123b76122f1565b6040528235815260208301356123cc81612190565b602082015260408301356123df81612190565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b03821115612475576124756122f1565b50601f01601f191660200190565b600082601f83011261249457600080fd5b81356124a76124a28261245c565b612353565b8181528460208386010111156124bc57600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156124ec57600080fd5b6124f4612307565b82358152612504602084016121a5565b6020820152612515604084016121a5565b604082015260608301356001600160401b0381111561253357600080fd5b61253f36828601612483565b6060830152506080830135608082015260a083013560a082015261256560c084016121a5565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561259857600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b8381101561266257818101518382015260200161264a565b50506000910152565b60008151808452612683816020860160208601612647565b601f01601f19169290920160200192915050565b6020815260008251600481106126bd57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611de4608084018261266b565b60208152600060018060a01b0380845116602084015260208401516080604085015261271560a085018261266b565b905060408501516060850152816060860151166080850152809250505092915050565b60408152825160408201526000602084015161275f60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261279061016085018361266b565b9150608086015160c085015260a086015160e085015260c08601516101006127c2818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126127f257600080fd5b81516128006124a28261245c565b81815284602083860101111561281557600080fd5b611de4826020830160208701612647565b60006020828403121561283857600080fd5b81516001600160401b038082111561284f57600080fd5b908301906060828603121561286357600080fd5b60405160608101818110838211171561287e5761287e6122f1565b60405282516004811061289057600080fd5b8152602083810151908201526040830151828111156128ae57600080fd5b6128ba878286016127e1565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b2757611b276128c9565b8051611c3c81612190565b60006020828403121561290f57600080fd5b604051602081018181106001600160401b0382111715612931576129316122f1565b604052825161293f81612190565b81529392505050565b60006020828403121561295a57600080fd5b81516001600160401b038082111561297157600080fd5b908301906080828603121561298557600080fd5b6040516080810181811083821117156129a0576129a06122f1565b60405282516129ae81612190565b81526020830151828111156129c257600080fd5b6129ce878286016127e1565b60208301525060408301516040820152606083015192506129ee83612190565b6060810192909252509392505050565b600060a08284031215612a1057600080fd5b60405160a081018181106001600160401b0382111715612a3257612a326122f1565b604052825181526020830151612a4781612190565b60208201526040830151612a5a81612190565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612a8e57600080fd5b81516001600160401b0380821115612aa557600080fd5b908301906101008286031215612aba57600080fd5b612ac2612330565b82518152612ad2602084016128f2565b6020820152612ae3604084016128f2565b6040820152606083015182811115612afa57600080fd5b612b06878286016127e1565b60608301525060808301516080820152612b2260a084016128f2565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b2757611b276128c9565b600081518084526020808501945080840160005b83811015612b935781516001600160a01b031687529582019590820190600101612b6e565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612bff610100840182612b5a565b905060a0840151601f198483030160e0850152611f92828261266b565b602081526000611852602083018461266b565b600060208284031215612c4157600080fd5b815161185281612190565b600060208284031215612c5e57600080fd5b8151801515811461185257600080fd5b60008251612c80818460208701612647565b919091019291505056fea2646970667358221220135d399163a8ec491063f7b03db139019b5c16a369b04f263128160be489ab7264736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/contracts/src/ERC20Source.sol b/contracts/src/ERC20Source.sol index 9b89096eb..157335d5c 100644 --- a/contracts/src/ERC20Source.sol +++ b/contracts/src/ERC20Source.sol @@ -76,6 +76,7 @@ contract ERC20Source is IERC20Bridge, TeleporterTokenSource { * @dev See {TeleportTokenSource-_withdraw} */ function _withdraw(address recipient, uint256 amount) internal override { + emit TokensWithdrawn(recipient, amount); token.safeTransfer(recipient, amount); } diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index 8da1a2e1f..87fcba11b 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -238,16 +238,16 @@ contract NativeTokenDestination is * @dev See {IWrappedNativeToken-deposit}. */ function deposit() public payable { - _mint(msg.sender, msg.value); emit Deposit(msg.sender, msg.value); + _mint(msg.sender, msg.value); } /** * @dev See {IWrappedNativeToken-withdraw}. */ function withdraw(uint256 amount) public { - _burn(msg.sender, amount); emit Withdrawal(msg.sender, amount); + _burn(msg.sender, amount); payable(msg.sender).transfer(amount); } diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index be44a6841..88a2f8668 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -337,7 +337,6 @@ abstract contract TeleporterTokenDestination is if (bridgeMessage.messageType == BridgeMessageType.SINGLE_HOP_SEND) { SingleHopSendMessage memory payload = abi.decode(bridgeMessage.payload, (SingleHopSendMessage)); - emit TokensWithdrawn(payload.recipient, scaledAmount); _withdraw(payload.recipient, scaledAmount); } else if (bridgeMessage.messageType == BridgeMessageType.SINGLE_HOP_CALL) { SingleHopCallMessage memory payload = diff --git a/contracts/src/TeleporterTokenSource.sol b/contracts/src/TeleporterTokenSource.sol index 0728b6d0e..9cda132b5 100644 --- a/contracts/src/TeleporterTokenSource.sol +++ b/contracts/src/TeleporterTokenSource.sol @@ -209,7 +209,6 @@ abstract contract TeleporterTokenSource is if (bridgeMessage.messageType == BridgeMessageType.SINGLE_HOP_SEND) { SingleHopSendMessage memory payload = abi.decode(bridgeMessage.payload, (SingleHopSendMessage)); - emit TokensWithdrawn(payload.recipient, bridgeMessage.amount); _withdraw(payload.recipient, bridgeMessage.amount); return; } else if (bridgeMessage.messageType == BridgeMessageType.SINGLE_HOP_CALL) { diff --git a/contracts/test/ERC20DestinationTests.t.sol b/contracts/test/ERC20DestinationTests.t.sol index 4b8e1ecdd..69b4d4a2c 100644 --- a/contracts/test/ERC20DestinationTests.t.sol +++ b/contracts/test/ERC20DestinationTests.t.sol @@ -124,6 +124,8 @@ contract ERC20DestinationTest is ERC20BridgeTest, TeleporterTokenDestinationTest } function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { + vm.expectEmit(true, true, true, true, address(tokenDestination)); + emit TokensWithdrawn(recipient, amount); vm.expectEmit(true, true, true, true, address(tokenDestination)); emit Transfer(address(0), recipient, amount); } diff --git a/contracts/test/ERC20SourceTests.t.sol b/contracts/test/ERC20SourceTests.t.sol index ced843f75..f69ab1f01 100644 --- a/contracts/test/ERC20SourceTests.t.sol +++ b/contracts/test/ERC20SourceTests.t.sol @@ -59,6 +59,8 @@ contract ERC20SourceTest is ERC20BridgeTest, TeleporterTokenSourceTest { } function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { + vm.expectEmit(true, true, true, true, address(tokenSource)); + emit TokensWithdrawn(recipient, amount); vm.expectCall( address(mockERC20), abi.encodeCall(IERC20.transfer, (address(recipient), amount)) ); diff --git a/contracts/test/NativeTokenDestinationTests.t.sol b/contracts/test/NativeTokenDestinationTests.t.sol index c7ed4394e..25a4809df 100644 --- a/contracts/test/NativeTokenDestinationTests.t.sol +++ b/contracts/test/NativeTokenDestinationTests.t.sol @@ -446,18 +446,20 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes assertTrue(app.isCollateralized()); } - function _checkExpectedWithdrawal(address addr, uint256 amount) internal override { + function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { uint256 scaledAmount = _scaleTokens(amount, true); + vm.expectEmit(true, true, true, true, address(tokenDestination)); + emit TokensWithdrawn(recipient, scaledAmount); vm.mockCall( NATIVE_MINTER_PRECOMPILE_ADDRESS, - abi.encodeCall(INativeMinter.mintNativeCoin, (addr, scaledAmount)), + abi.encodeCall(INativeMinter.mintNativeCoin, (recipient, scaledAmount)), new bytes(0) ); vm.expectCall( NATIVE_MINTER_PRECOMPILE_ADDRESS, - abi.encodeCall(INativeMinter.mintNativeCoin, (addr, scaledAmount)) + abi.encodeCall(INativeMinter.mintNativeCoin, (recipient, scaledAmount)) ); - vm.deal(addr, scaledAmount); + vm.deal(recipient, scaledAmount); } function _setUpMockMint(address recipient, uint256 amount) internal override { diff --git a/contracts/test/NativeTokenSourceTests.t.sol b/contracts/test/NativeTokenSourceTests.t.sol index adeedd104..9d0cb6c56 100644 --- a/contracts/test/NativeTokenSourceTests.t.sol +++ b/contracts/test/NativeTokenSourceTests.t.sol @@ -50,7 +50,9 @@ contract NativeTokenSourceTest is NativeTokenBridgeTest, TeleporterTokenSourceTe new NativeTokenSource(MOCK_TELEPORTER_REGISTRY_ADDRESS, address(this), address(0)); } - function _checkExpectedWithdrawal(address, uint256 amount) internal override { + function _checkExpectedWithdrawal(address recipient, uint256 amount) internal override { + vm.expectEmit(true, true, true, true, address(tokenSource)); + emit TokensWithdrawn(recipient, amount); vm.expectCall( address(mockWrappedToken), abi.encodeCall(IWrappedNativeToken.withdraw, (amount)) ); diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index c4589e598..ad5efe02a 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -144,10 +144,7 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { function testReceiveWithdrawSuccess() public { uint256 amount = 200; - uint256 scaledAmount = _scaleTokens(amount, true); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); - vm.expectEmit(true, true, true, true, address(tokenDestination)); - emit TokensWithdrawn(DEFAULT_RECIPIENT_ADDRESS, scaledAmount); _checkExpectedWithdrawal(DEFAULT_RECIPIENT_ADDRESS, amount); tokenDestination.receiveTeleporterMessage( DEFAULT_SOURCE_BLOCKCHAIN_ID, diff --git a/contracts/test/TeleporterTokenSourceTests.t.sol b/contracts/test/TeleporterTokenSourceTests.t.sol index 0ffdbfdfa..37d859b78 100644 --- a/contracts/test/TeleporterTokenSourceTests.t.sol +++ b/contracts/test/TeleporterTokenSourceTests.t.sol @@ -84,8 +84,6 @@ abstract contract TeleporterTokenSourceTest is TeleporterTokenBridgeTest { SendTokensInput memory input = _createDefaultReceiveTokensInput(); input.primaryFee = feeAmount; - vm.expectEmit(true, true, true, true, address(tokenSource)); - emit TokensWithdrawn(DEFAULT_RECIPIENT_ADDRESS, bridgeAmount); _checkExpectedWithdrawal(DEFAULT_RECIPIENT_ADDRESS, bridgeAmount); vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); tokenSource.receiveTeleporterMessage( From 9118c8d55f94a05eee1db2b5ecc7bb9c2c704e38 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 14:26:34 -0400 Subject: [PATCH 21/26] Add comment about multi-hop gas cost --- contracts/src/TeleporterTokenDestination.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/src/TeleporterTokenDestination.sol b/contracts/src/TeleporterTokenDestination.sol index afaa56f39..aca306d9b 100644 --- a/contracts/src/TeleporterTokenDestination.sol +++ b/contracts/src/TeleporterTokenDestination.sol @@ -304,6 +304,10 @@ abstract contract TeleporterTokenDestination is }) ) }); + + // The required gas limit for the first message sent back to the source chain + // needs to account for the number of words in the payload, which each use additional + // gas to send in a message to the final destination chain. messageRequiredGasLimit = MULTI_HOP_REQUIRED_GAS + (calculateNumWords(input.recipientPayload.length) * MULTI_HOP_CALL_GAS_PER_WORD); } From 1b3e76d29d830d1508eb4dad2ed2e9822cf68217 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 16:06:56 -0400 Subject: [PATCH 22/26] Comments and var naming --- .../NativeTokenDestination.go | 6 ++--- contracts/src/NativeTokenDestination.sol | 15 ++++++++----- .../test/NativeTokenDestinationTests.t.sol | 22 +++++++++---------- tests/utils/utils.go | 2 +- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 001dbe1d8..d466bc5cc 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -31,7 +31,7 @@ var ( // NativeTokenDestinationSettings is an auto generated low-level Go binding around an user-defined struct. type NativeTokenDestinationSettings struct { - Symbol string + NativeAssetSymbol string TeleporterRegistryAddress common.Address TeleporterManager common.Address SourceBlockchainID [32]byte @@ -67,8 +67,8 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5f38038062004b5f83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edc62000c63600039600081816104ca0152610d900152600081816105d5015261099001526000818161039801526110800152600081816106eb015281816110ab01526110dc01526000818161083301528181610ee9015281816116bf01528181611965015281816120200152818161226c01526127ec0152600081816103ec01528181610ec60152818161168f0152818161193f01528181611ff901528181612246015261277601526000818161076d015281816117fd01526120fc01526000818161034c0152818161111d015281816124d30152612b890152613edc6000f3fe60806040526004361061026a5760003560e01c806370a0823111610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461078f578063dd62ed3e146107a4578063ecd4ed1b146107c4578063f2fde38b146107e1578063f3f981d814610801578063f5ea06031461082157610279565b8063c452165e1461070d578063c868efaa14610725578063d0e30db014610279578063d10a5b8c14610745578063d127dc9b1461075b57610279565b80639731429711610108578063973142971461062a578063a2309ff814610663578063a457c2d714610679578063a9059cbb14610699578063b9448587146106b9578063ba3f5a12146106d957610279565b806370a0823114610578578063715018a6146105ae5780638ac7dd20146105c35780638da5cb5b146105f757806395d89b411461061557610279565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104b85780634511243e146104ec57806349e3284e1461050c578063525975e61461052157806355538c8b146105385780635eb995141461055857610279565b80632e1a7d4d1461042e57806330079bff1461044e578063313ce56714610461578063329c3e121461047d578063395093511461049857610279565b806318160ddd1161022f57806318160ddd146103255780631a7f5bec1461033a5780631ce220751461038657806323b872dd146103ba57806329b7b3fd146103da5780632b0d8f181461040e57610279565b8062d872ae1461028157806306fdde03146102aa578063095ea7b3146102cc578063146dfd3c146102fc57806315beb59f1461030f57610279565b3661027957610277610855565b005b610277610855565b34801561028d57600080fd5b50610297600a5481565b6040519081526020015b60405180910390f35b3480156102b657600080fd5b506102bf610896565b6040516102a191906132e1565b3480156102d857600080fd5b506102ec6102e7366004613314565b610928565b60405190151581526020016102a1565b61027761030a366004613340565b610942565b34801561031b57600080fd5b5061029761213481565b34801561033157600080fd5b50610297610978565b34801561034657600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a1565b34801561039257600080fd5b506102ec7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c657600080fd5b506102ec6103d5366004613358565b6109cf565b3480156103e657600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561041a57600080fd5b50610277610429366004613399565b6109f3565b34801561043a57600080fd5b506102776104493660046133b6565b610aec565b61027761045c3660046133cf565b610b5c565b34801561046d57600080fd5b50604051601281526020016102a1565b34801561048957600080fd5b5061036e6001600160991b0181565b3480156104a457600080fd5b506102ec6104b3366004613314565b610b8e565b3480156104c457600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b50610277610507366004613399565b610bb0565b34801561051857600080fd5b506102ec610cad565b34801561052d57600080fd5b5061029762035b6081565b34801561054457600080fd5b506102776105533660046133b6565b610cbe565b34801561056457600080fd5b506102776105733660046133b6565b610fbe565b34801561058457600080fd5b50610297610593366004613399565b6001600160a01b031660009081526020819052604090205490565b3480156105ba57600080fd5b50610277610fcf565b3480156105cf57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561060357600080fd5b506008546001600160a01b031661036e565b34801561062157600080fd5b506102bf610fe1565b34801561063657600080fd5b506102ec610645366004613399565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066f57600080fd5b50610297600b5481565b34801561068557600080fd5b506102ec610694366004613314565b610ff0565b3480156106a557600080fd5b506102ec6106b4366004613314565b61106b565b3480156106c557600080fd5b506102976106d4366004613419565b611079565b3480156106e557600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561071957600080fd5b5061036e600160981b81565b34801561073157600080fd5b50610277610740366004613449565b611108565b34801561075157600080fd5b50610297600c5481565b34801561076757600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561079b57600080fd5b50600754610297565b3480156107b057600080fd5b506102976107bf3660046134d2565b6112d2565b3480156107d057600080fd5b5061036e62010203600160981b0181565b3480156107ed57600080fd5b506102776107fc366004613399565b6112fd565b34801561080d57600080fd5b5061029761081c3660046133b6565b611373565b34801561082d57600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2610894333461139c565b565b6060600380546108a590613500565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613500565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b60003361093681858561145b565b60019150505b92915050565b600a541561096b5760405162461bcd60e51b815260040161096290613534565b60405180910390fd5b6109758134611580565b50565b60008061098a47600160981b3161359e565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109bc919061359e565b90506109c882826135b1565b9250505090565b6000336109dd858285611a6b565b6109e8858585611adf565b506001949350505050565b6109fb611c83565b6001600160a01b038116610a215760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff1615610aa05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610962565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b2b3382611c8b565b604051339082156108fc029083906000818181858888f19350505050158015610b58573d6000803e3d6000fd5b5050565b600a5415610b7c5760405162461bcd60e51b815260040161096290613534565b610975610b8882613701565b34611dba565b600033610936818585610ba183836112d2565b610bab919061359e565b61145b565b610bb8611c83565b6001600160a01b038116610bde5760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff16610c585760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610962565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cb9600a541590565b905090565b600160095414610ce05760405162461bcd60e51b8152600401610962906137af565b6002600955600c54600160981b31908111610d755760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610962565b6000600c5482610d8591906135b1565b905060006064610db57f0000000000000000000000000000000000000000000000000000000000000000846137f3565b610dbf9190613820565b90506000610dcd82846135b1565b600c85905590508115610def57610de4308361231e565b610ded826123a0565b505b6000610dfc826000611079565b905060008111610e745760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610962565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f7391906080820190815260200184604051602001610f5c919061384a565b6040516020818303038152906040528152506123b0565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fa791815260200190565b60405180910390a250506001600955505050505050565b610fc6611c83565b610975816124cf565b610fd761266f565b61089460006126c9565b6060600480546108a590613500565b60003381610ffe82866112d2565b90508381101561105e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610962565b6109e8828686840361145b565b600033610936818585611adf565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110d7576110d07f0000000000000000000000000000000000000000000000000000000000000000846137f3565b905061093c565b6111017f000000000000000000000000000000000000000000000000000000000000000084613820565b9392505050565b61111061271b565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613899565b10156112125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610962565b61121b33610645565b156112815760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610962565b6112c2848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277492505050565b6112cc6001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61130561266f565b6001600160a01b03811661136a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b610975816126c9565b600080611381602084613820565b905061138e6020846138b2565b1561093c57611101816138c6565b6001600160a01b0382166113f25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610962565b8060026000828254611404919061359e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610962565b6001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610962565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115a25760405162461bcd60e51b8152600401610962906137af565b600260095560006115b96060840160408501613399565b6001600160a01b0316036116185760405162461bcd60e51b81526020600482015260326024820152600080516020613e6783398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610962565b60008260a001351161163c5760405162461bcd60e51b8152600401610962906138df565b61166182356116516040850160208601613399565b838560600135866080013561298a565b90506116886040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117fb576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166116ef6040860160208701613399565b6001600160a01b0316146117155760405162461bcd60e51b815260040161096290613920565b6080840135156117825760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610962565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117b99190613399565b6001600160a01b031690526040516117e2919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061192d565b7f000000000000000000000000000000000000000000000000000000000000000084350361185a57306118346040860160208701613399565b6001600160a01b03160361185a5760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061189b9190613399565b6001600160a01b031681526020016118b96060890160408a01613399565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a196040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b604051908082528060200260200182016040528015611a02578160200160208202803683370190505b50815260200185604051602001610f5c919061384a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a5792919061396b565b60405180910390a350506001600955505050565b6000611a7784846112d2565b905060001981146112cc5781811015611ad25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610962565b6112cc848484840361145b565b6001600160a01b038316611b435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610962565b6001600160a01b038216611ba55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610962565b6001600160a01b03831660009081526020819052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610962565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112cc565b61089461266f565b6001600160a01b038216611ceb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610962565b6001600160a01b03821660009081526020819052604090205481811015611d5f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610962565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611573565b505050565b600160095414611ddc5760405162461bcd60e51b8152600401610962906137af565b600260095560408201516001600160a01b0316611e4f5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610962565b6000826080015111611e735760405162461bcd60e51b8152600401610962906138df565b60008260a0015111611ed25760405162461bcd60e51b81526020600482015260346024820152600080516020613e67833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610962565b81608001518260a0015110611f3d5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8783398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610962565b60c08201516001600160a01b0316611fab5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610962565b611fc982600001518360200151838560e0015186610100015161298a565b9050611ff06040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120735760405162461bcd60e51b815260040161096290613920565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016120df91906139ce565b6040516020818303038152906040528152509150612234565b83517f0000000000000000000000000000000000000000000000000000000000000000900361215657306001600160a01b031684602001516001600160a01b0316036121565760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121f59190613a20565b604051602081830303815290604052815250915061213461221a856060015151611373565b61222491906137f3565b6122319062035b6061359e565b90505b60006122e06040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a57929190613ab0565b80600b6000828254612330919061359e565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b505050505050565b60006123ac308361139c565b5090565b6000806123bb612b84565b60408401516020015190915015612460576040830151516001600160a01b031661243d5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610962565b604083015160208101519051612460916001600160a01b03909116908390612c98565b604051630624488560e41b81526001600160a01b0382169063624488509061248c908690600401613b9d565b6020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190613899565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125539190613899565b600754909150818311156125c35760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610962565b8083116126385760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610962565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60026005540361276d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127ea5760405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610962565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461287f5760405162461bcd60e51b81526020600482015260386024820152600080516020613e8783398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610962565b6000818060200190518101906128959190613c69565b905060006128a882602001516001611079565b90506000825160038111156128bf576128bf613834565b036128f457600082604001518060200190518101906128de9190613d0d565b90506128ee816000015183612d6c565b50612983565b60018251600381111561290957612909613834565b0361293457600082604001518060200190518101906129289190613d59565b90506128ee8183612e6b565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610962565b5050505050565b6000856129ed5760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610962565b6001600160a01b038516612a575760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610962565b612a60846123a0565b9350612a6c828461359e565b8411612ae05760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610962565b612aea83856135b1565b9350612af584612fbb565b6000612b02856000611079565b905060008111612b7a5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610962565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c099190613e10565b9050612c2d816001600160a01b031660009081526006602052604090205460ff1690565b15612c935760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610962565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613899565b612d17919061359e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112cc908590612fc5565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612da791815260200190565b60405180910390a2600a5481908015612e615780831115612e115760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612e0581836135b1565b6000600a559150612e61565b6000612e1d84836135b1565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112cc848361231e565b600a5415612e8157610b58826060015182612d6c565b612e8b308261231e565b60008260200151604051602401612ea291906132e1565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ee39190859085613097565b90508015612f375783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f2a91815260200190565b60405180910390a26112cc565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f7691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612983573d6000803e3d6000fd5b6109753082611c8b565b600061301a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661316e9092919063ffffffff16565b805190915015611db557808060200190518101906130389190613e2d565b611db55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610962565b6000845a10156130e95760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610962565b834710156131395760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610962565b826001600160a01b03163b60000361315357506000613166565b600080600084516020860188888bf19150505b949350505050565b6060613166848460008585600080866001600160a01b031685876040516131959190613e4a565b60006040518083038185875af1925050503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b50915091506131e8878383876131f3565b979650505050505050565b6060831561326257825160000361325b576001600160a01b0385163b61325b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610962565b5081613166565b61316683838151156132775781518083602001fd5b8060405162461bcd60e51b815260040161096291906132e1565b60005b838110156132ac578181015183820152602001613294565b50506000910152565b600081518084526132cd816020860160208601613291565b601f01601f19169290920160200192915050565b60208152600061110160208301846132b5565b6001600160a01b038116811461097557600080fd5b8035612c93816132f4565b6000806040838503121561332757600080fd5b8235613332816132f4565b946020939093013593505050565b600060c0828403121561335257600080fd5b50919050565b60008060006060848603121561336d57600080fd5b8335613378816132f4565b92506020840135613388816132f4565b929592945050506040919091013590565b6000602082840312156133ab57600080fd5b8135611101816132f4565b6000602082840312156133c857600080fd5b5035919050565b6000602082840312156133e157600080fd5b813567ffffffffffffffff8111156133f857600080fd5b8201610120818503121561110157600080fd5b801515811461097557600080fd5b6000806040838503121561342c57600080fd5b82359150602083013561343e8161340b565b809150509250929050565b6000806000806060858703121561345f57600080fd5b843593506020850135613471816132f4565b9250604085013567ffffffffffffffff8082111561348e57600080fd5b818701915087601f8301126134a257600080fd5b8135818111156134b157600080fd5b8860208285010111156134c357600080fd5b95989497505060200194505050565b600080604083850312156134e557600080fd5b82356134f0816132f4565b9150602083013561343e816132f4565b600181811c9082168061351457607f821691505b60208210810361335257634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093c5761093c613588565b8181038181111561093c5761093c613588565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561364c5761364c613612565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561367b5761367b613612565b604052919050565b600067ffffffffffffffff82111561369d5761369d613612565b50601f01601f191660200190565b600082601f8301126136bc57600080fd5b81356136cf6136ca82613683565b613652565b8181528460208386010111156136e457600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561371457600080fd5b61371c613628565b8235815261372c60208401613309565b602082015261373d60408401613309565b6040820152606083013567ffffffffffffffff81111561375c57600080fd5b613768368286016136ab565b6060830152506080830135608082015260a083013560a082015261378e60c08401613309565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b808202811582820484141761093c5761093c613588565b634e487b7160e01b600052601260045260246000fd5b60008261382f5761382f61380a565b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061387057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261316660808401826132b5565b6000602082840312156138ab57600080fd5b5051919050565b6000826138c1576138c161380a565b500690565b6000600182016138d8576138d8613588565b5060010190565b6020808252603390820152600080516020613e67833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8783398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613981816132f4565b6001600160a01b0390811660208401526040850135906139a0826132f4565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139fd60a08501826132b5565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6b6101208501836132b5565b9150608085015160a085015260a0850151613a9160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ad760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b086101608501836132b5565b9150608086015160c085015260a086015160e085015260c0860151610100613b3a818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b925781516001600160a01b031687529582019590820190600101613b6d565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bfe610100840182613b59565b905060a0840151601f198483030160e0850152613c1b82826132b5565b95945050505050565b600082601f830112613c3557600080fd5b8151613c436136ca82613683565b818152846020838601011115613c5857600080fd5b613166826020830160208701613291565b600060208284031215613c7b57600080fd5b815167ffffffffffffffff80821115613c9357600080fd5b9083019060608286031215613ca757600080fd5b604051606081018181108382111715613cc257613cc2613612565b604052825160048110613cd457600080fd5b815260208381015190820152604083015182811115613cf257600080fd5b613cfe87828601613c24565b60408301525095945050505050565b600060208284031215613d1f57600080fd5b6040516020810181811067ffffffffffffffff82111715613d4257613d42613612565b6040528251613d50816132f4565b81529392505050565b600060208284031215613d6b57600080fd5b815167ffffffffffffffff80821115613d8357600080fd5b9083019060808286031215613d9757600080fd5b604051608081018181108382111715613db257613db2613612565b6040528251613dc0816132f4565b8152602083015182811115613dd457600080fd5b613de087828601613c24565b6020830152506040830151604082015260608301519250613e00836132f4565b6060810192909252509392505050565b600060208284031215613e2257600080fd5b8151611101816132f4565b600060208284031215613e3f57600080fd5b81516111018161340b565b60008251613e5c818460208701613291565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122032c1fa7e263ef3d29bd2d36302537339d678e8d046ec2a9284c73e37b980c0cc64736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5f38038062004b5f83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edc62000c63600039600081816104ca0152610d900152600081816105d5015261099001526000818161039801526110800152600081816106eb015281816110ab01526110dc01526000818161083301528181610ee9015281816116bf01528181611965015281816120200152818161226c01526127ec0152600081816103ec01528181610ec60152818161168f0152818161193f01528181611ff901528181612246015261277601526000818161076d015281816117fd01526120fc01526000818161034c0152818161111d015281816124d30152612b890152613edc6000f3fe60806040526004361061026a5760003560e01c806370a0823111610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461078f578063dd62ed3e146107a4578063ecd4ed1b146107c4578063f2fde38b146107e1578063f3f981d814610801578063f5ea06031461082157610279565b8063c452165e1461070d578063c868efaa14610725578063d0e30db014610279578063d10a5b8c14610745578063d127dc9b1461075b57610279565b80639731429711610108578063973142971461062a578063a2309ff814610663578063a457c2d714610679578063a9059cbb14610699578063b9448587146106b9578063ba3f5a12146106d957610279565b806370a0823114610578578063715018a6146105ae5780638ac7dd20146105c35780638da5cb5b146105f757806395d89b411461061557610279565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104b85780634511243e146104ec57806349e3284e1461050c578063525975e61461052157806355538c8b146105385780635eb995141461055857610279565b80632e1a7d4d1461042e57806330079bff1461044e578063313ce56714610461578063329c3e121461047d578063395093511461049857610279565b806318160ddd1161022f57806318160ddd146103255780631a7f5bec1461033a5780631ce220751461038657806323b872dd146103ba57806329b7b3fd146103da5780632b0d8f181461040e57610279565b8062d872ae1461028157806306fdde03146102aa578063095ea7b3146102cc578063146dfd3c146102fc57806315beb59f1461030f57610279565b3661027957610277610855565b005b610277610855565b34801561028d57600080fd5b50610297600a5481565b6040519081526020015b60405180910390f35b3480156102b657600080fd5b506102bf610896565b6040516102a191906132e1565b3480156102d857600080fd5b506102ec6102e7366004613314565b610928565b60405190151581526020016102a1565b61027761030a366004613340565b610942565b34801561031b57600080fd5b5061029761213481565b34801561033157600080fd5b50610297610978565b34801561034657600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a1565b34801561039257600080fd5b506102ec7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c657600080fd5b506102ec6103d5366004613358565b6109cf565b3480156103e657600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561041a57600080fd5b50610277610429366004613399565b6109f3565b34801561043a57600080fd5b506102776104493660046133b6565b610aec565b61027761045c3660046133cf565b610b5c565b34801561046d57600080fd5b50604051601281526020016102a1565b34801561048957600080fd5b5061036e6001600160991b0181565b3480156104a457600080fd5b506102ec6104b3366004613314565b610b8e565b3480156104c457600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b50610277610507366004613399565b610bb0565b34801561051857600080fd5b506102ec610cad565b34801561052d57600080fd5b5061029762035b6081565b34801561054457600080fd5b506102776105533660046133b6565b610cbe565b34801561056457600080fd5b506102776105733660046133b6565b610fbe565b34801561058457600080fd5b50610297610593366004613399565b6001600160a01b031660009081526020819052604090205490565b3480156105ba57600080fd5b50610277610fcf565b3480156105cf57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561060357600080fd5b506008546001600160a01b031661036e565b34801561062157600080fd5b506102bf610fe1565b34801561063657600080fd5b506102ec610645366004613399565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066f57600080fd5b50610297600b5481565b34801561068557600080fd5b506102ec610694366004613314565b610ff0565b3480156106a557600080fd5b506102ec6106b4366004613314565b61106b565b3480156106c557600080fd5b506102976106d4366004613419565b611079565b3480156106e557600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561071957600080fd5b5061036e600160981b81565b34801561073157600080fd5b50610277610740366004613449565b611108565b34801561075157600080fd5b50610297600c5481565b34801561076757600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561079b57600080fd5b50600754610297565b3480156107b057600080fd5b506102976107bf3660046134d2565b6112d2565b3480156107d057600080fd5b5061036e62010203600160981b0181565b3480156107ed57600080fd5b506102776107fc366004613399565b6112fd565b34801561080d57600080fd5b5061029761081c3660046133b6565b611373565b34801561082d57600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2610894333461139c565b565b6060600380546108a590613500565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613500565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b60003361093681858561145b565b60019150505b92915050565b600a541561096b5760405162461bcd60e51b815260040161096290613534565b60405180910390fd5b6109758134611580565b50565b60008061098a47600160981b3161359e565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109bc919061359e565b90506109c882826135b1565b9250505090565b6000336109dd858285611a6b565b6109e8858585611adf565b506001949350505050565b6109fb611c83565b6001600160a01b038116610a215760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff1615610aa05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610962565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b2b3382611c8b565b604051339082156108fc029083906000818181858888f19350505050158015610b58573d6000803e3d6000fd5b5050565b600a5415610b7c5760405162461bcd60e51b815260040161096290613534565b610975610b8882613701565b34611dba565b600033610936818585610ba183836112d2565b610bab919061359e565b61145b565b610bb8611c83565b6001600160a01b038116610bde5760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff16610c585760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610962565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cb9600a541590565b905090565b600160095414610ce05760405162461bcd60e51b8152600401610962906137af565b6002600955600c54600160981b31908111610d755760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610962565b6000600c5482610d8591906135b1565b905060006064610db57f0000000000000000000000000000000000000000000000000000000000000000846137f3565b610dbf9190613820565b90506000610dcd82846135b1565b600c85905590508115610def57610de4308361231e565b610ded826123a0565b505b6000610dfc826000611079565b905060008111610e745760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610962565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f7391906080820190815260200184604051602001610f5c919061384a565b6040516020818303038152906040528152506123b0565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fa791815260200190565b60405180910390a250506001600955505050505050565b610fc6611c83565b610975816124cf565b610fd761266f565b61089460006126c9565b6060600480546108a590613500565b60003381610ffe82866112d2565b90508381101561105e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610962565b6109e8828686840361145b565b600033610936818585611adf565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110d7576110d07f0000000000000000000000000000000000000000000000000000000000000000846137f3565b905061093c565b6111017f000000000000000000000000000000000000000000000000000000000000000084613820565b9392505050565b61111061271b565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613899565b10156112125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610962565b61121b33610645565b156112815760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610962565b6112c2848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277492505050565b6112cc6001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61130561266f565b6001600160a01b03811661136a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b610975816126c9565b600080611381602084613820565b905061138e6020846138b2565b1561093c57611101816138c6565b6001600160a01b0382166113f25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610962565b8060026000828254611404919061359e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610962565b6001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610962565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115a25760405162461bcd60e51b8152600401610962906137af565b600260095560006115b96060840160408501613399565b6001600160a01b0316036116185760405162461bcd60e51b81526020600482015260326024820152600080516020613e6783398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610962565b60008260a001351161163c5760405162461bcd60e51b8152600401610962906138df565b61166182356116516040850160208601613399565b838560600135866080013561298a565b90506116886040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117fb576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166116ef6040860160208701613399565b6001600160a01b0316146117155760405162461bcd60e51b815260040161096290613920565b6080840135156117825760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610962565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117b99190613399565b6001600160a01b031690526040516117e2919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061192d565b7f000000000000000000000000000000000000000000000000000000000000000084350361185a57306118346040860160208701613399565b6001600160a01b03160361185a5760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061189b9190613399565b6001600160a01b031681526020016118b96060890160408a01613399565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a196040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b604051908082528060200260200182016040528015611a02578160200160208202803683370190505b50815260200185604051602001610f5c919061384a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a5792919061396b565b60405180910390a350506001600955505050565b6000611a7784846112d2565b905060001981146112cc5781811015611ad25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610962565b6112cc848484840361145b565b6001600160a01b038316611b435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610962565b6001600160a01b038216611ba55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610962565b6001600160a01b03831660009081526020819052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610962565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112cc565b61089461266f565b6001600160a01b038216611ceb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610962565b6001600160a01b03821660009081526020819052604090205481811015611d5f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610962565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611573565b505050565b600160095414611ddc5760405162461bcd60e51b8152600401610962906137af565b600260095560408201516001600160a01b0316611e4f5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610962565b6000826080015111611e735760405162461bcd60e51b8152600401610962906138df565b60008260a0015111611ed25760405162461bcd60e51b81526020600482015260346024820152600080516020613e67833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610962565b81608001518260a0015110611f3d5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8783398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610962565b60c08201516001600160a01b0316611fab5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610962565b611fc982600001518360200151838560e0015186610100015161298a565b9050611ff06040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120735760405162461bcd60e51b815260040161096290613920565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016120df91906139ce565b6040516020818303038152906040528152509150612234565b83517f0000000000000000000000000000000000000000000000000000000000000000900361215657306001600160a01b031684602001516001600160a01b0316036121565760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121f59190613a20565b604051602081830303815290604052815250915061213461221a856060015151611373565b61222491906137f3565b6122319062035b6061359e565b90505b60006122e06040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a57929190613ab0565b80600b6000828254612330919061359e565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b505050505050565b60006123ac308361139c565b5090565b6000806123bb612b84565b60408401516020015190915015612460576040830151516001600160a01b031661243d5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610962565b604083015160208101519051612460916001600160a01b03909116908390612c98565b604051630624488560e41b81526001600160a01b0382169063624488509061248c908690600401613b9d565b6020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190613899565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125539190613899565b600754909150818311156125c35760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610962565b8083116126385760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610962565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60026005540361276d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127ea5760405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610962565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461287f5760405162461bcd60e51b81526020600482015260386024820152600080516020613e8783398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610962565b6000818060200190518101906128959190613c69565b905060006128a882602001516001611079565b90506000825160038111156128bf576128bf613834565b036128f457600082604001518060200190518101906128de9190613d0d565b90506128ee816000015183612d6c565b50612983565b60018251600381111561290957612909613834565b0361293457600082604001518060200190518101906129289190613d59565b90506128ee8183612e6b565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610962565b5050505050565b6000856129ed5760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610962565b6001600160a01b038516612a575760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610962565b612a60846123a0565b9350612a6c828461359e565b8411612ae05760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610962565b612aea83856135b1565b9350612af584612fbb565b6000612b02856000611079565b905060008111612b7a5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610962565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c099190613e10565b9050612c2d816001600160a01b031660009081526006602052604090205460ff1690565b15612c935760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610962565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613899565b612d17919061359e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112cc908590612fc5565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612da791815260200190565b60405180910390a2600a5481908015612e615780831115612e115760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612e0581836135b1565b6000600a559150612e61565b6000612e1d84836135b1565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112cc848361231e565b600a5415612e8157610b58826060015182612d6c565b612e8b308261231e565b60008260200151604051602401612ea291906132e1565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ee39190859085613097565b90508015612f375783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f2a91815260200190565b60405180910390a26112cc565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f7691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612983573d6000803e3d6000fd5b6109753082611c8b565b600061301a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661316e9092919063ffffffff16565b805190915015611db557808060200190518101906130389190613e2d565b611db55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610962565b6000845a10156130e95760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610962565b834710156131395760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610962565b826001600160a01b03163b60000361315357506000613166565b600080600084516020860188888bf19150505b949350505050565b6060613166848460008585600080866001600160a01b031685876040516131959190613e4a565b60006040518083038185875af1925050503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b50915091506131e8878383876131f3565b979650505050505050565b6060831561326257825160000361325b576001600160a01b0385163b61325b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610962565b5081613166565b61316683838151156132775781518083602001fd5b8060405162461bcd60e51b815260040161096291906132e1565b60005b838110156132ac578181015183820152602001613294565b50506000910152565b600081518084526132cd816020860160208601613291565b601f01601f19169290920160200192915050565b60208152600061110160208301846132b5565b6001600160a01b038116811461097557600080fd5b8035612c93816132f4565b6000806040838503121561332757600080fd5b8235613332816132f4565b946020939093013593505050565b600060c0828403121561335257600080fd5b50919050565b60008060006060848603121561336d57600080fd5b8335613378816132f4565b92506020840135613388816132f4565b929592945050506040919091013590565b6000602082840312156133ab57600080fd5b8135611101816132f4565b6000602082840312156133c857600080fd5b5035919050565b6000602082840312156133e157600080fd5b813567ffffffffffffffff8111156133f857600080fd5b8201610120818503121561110157600080fd5b801515811461097557600080fd5b6000806040838503121561342c57600080fd5b82359150602083013561343e8161340b565b809150509250929050565b6000806000806060858703121561345f57600080fd5b843593506020850135613471816132f4565b9250604085013567ffffffffffffffff8082111561348e57600080fd5b818701915087601f8301126134a257600080fd5b8135818111156134b157600080fd5b8860208285010111156134c357600080fd5b95989497505060200194505050565b600080604083850312156134e557600080fd5b82356134f0816132f4565b9150602083013561343e816132f4565b600181811c9082168061351457607f821691505b60208210810361335257634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093c5761093c613588565b8181038181111561093c5761093c613588565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561364c5761364c613612565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561367b5761367b613612565b604052919050565b600067ffffffffffffffff82111561369d5761369d613612565b50601f01601f191660200190565b600082601f8301126136bc57600080fd5b81356136cf6136ca82613683565b613652565b8181528460208386010111156136e457600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561371457600080fd5b61371c613628565b8235815261372c60208401613309565b602082015261373d60408401613309565b6040820152606083013567ffffffffffffffff81111561375c57600080fd5b613768368286016136ab565b6060830152506080830135608082015260a083013560a082015261378e60c08401613309565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b808202811582820484141761093c5761093c613588565b634e487b7160e01b600052601260045260246000fd5b60008261382f5761382f61380a565b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061387057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261316660808401826132b5565b6000602082840312156138ab57600080fd5b5051919050565b6000826138c1576138c161380a565b500690565b6000600182016138d8576138d8613588565b5060010190565b6020808252603390820152600080516020613e67833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8783398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613981816132f4565b6001600160a01b0390811660208401526040850135906139a0826132f4565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139fd60a08501826132b5565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6b6101208501836132b5565b9150608085015160a085015260a0850151613a9160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ad760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b086101608501836132b5565b9150608086015160c085015260a086015160e085015260c0860151610100613b3a818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b925781516001600160a01b031687529582019590820190600101613b6d565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bfe610100840182613b59565b905060a0840151601f198483030160e0850152613c1b82826132b5565b95945050505050565b600082601f830112613c3557600080fd5b8151613c436136ca82613683565b818152846020838601011115613c5857600080fd5b613166826020830160208701613291565b600060208284031215613c7b57600080fd5b815167ffffffffffffffff80821115613c9357600080fd5b9083019060608286031215613ca757600080fd5b604051606081018181108382111715613cc257613cc2613612565b604052825160048110613cd457600080fd5b815260208381015190820152604083015182811115613cf257600080fd5b613cfe87828601613c24565b60408301525095945050505050565b600060208284031215613d1f57600080fd5b6040516020810181811067ffffffffffffffff82111715613d4257613d42613612565b6040528251613d50816132f4565b81529392505050565b600060208284031215613d6b57600080fd5b815167ffffffffffffffff80821115613d8357600080fd5b9083019060808286031215613d9757600080fd5b604051608081018181108382111715613db257613db2613612565b6040528251613dc0816132f4565b8152602083015182811115613dd457600080fd5b613de087828601613c24565b6020830152506040830151604082015260608301519250613e00836132f4565b6060810192909252509392505050565b600060208284031215613e2257600080fd5b8151611101816132f4565b600060208284031215613e3f57600080fd5b81516111018161340b565b60008251613e5c818460208701613291565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212206a6fc22944e57c2e85579fb45afd674d727953bd72515beb9db18ecfe30d042364736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index 87fcba11b..60dac62f4 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -38,7 +38,7 @@ import {CallUtils} from "./utils/CallUtils.sol"; */ struct NativeTokenDestinationSettings { - string symbol; + string nativeAssetSymbol; address teleporterRegistryAddress; address teleporterManager; bytes32 sourceBlockchainID; @@ -120,8 +120,8 @@ contract NativeTokenDestination is uint256 public lastestBurnedFeesReported; /** - * @dev When modifier is used, the function can only be called once the contract is fully collelateralized, - * account for the initialReserveImbalance. + * @dev When modifier is used, the function can only be called after the contract is fully collelateralized, + * accounting for the initialReserveImbalance. */ modifier onlyWhenCollateralized() { require(_isCollateralized(), "NativeTokenDestination: contract undercollateralized"); @@ -129,7 +129,7 @@ contract NativeTokenDestination is } constructor(NativeTokenDestinationSettings memory settings) - ERC20(string.concat("Wrapped ", settings.symbol), settings.symbol) + ERC20(string.concat("Wrapped ", settings.nativeAssetSymbol), settings.nativeAssetSymbol) TeleporterTokenDestination( settings.teleporterRegistryAddress, settings.teleporterManager, @@ -200,6 +200,9 @@ contract NativeTokenDestination is lastestBurnedFeesReported = burnAddressBalance; if (reward > 0) { + // Re-mint the native tokens to this contract, and then deposit them to be the wrapped + // native token (ERC20) representation, such that they can be used as a Teleporter + // message fee. _mintNativeCoin(address(this), reward); _deposit(reward); } @@ -273,8 +276,8 @@ contract NativeTokenDestination is * @dev See {TeleporterTokenDestination-_deposit} * * Native tokens to be deposited are sent via the payable {send} and {sendAndCall} functions, and - * remained locked in this contract. The full amount is credited as an ERC20 balance to this contract - * such that it can be used to pay for message fees if needed. + * remained locked in this contract. The internal call to {_mint} represents the full amount as + * the wrapped native asset (ERC20) token, such that it can be used to pay for message fess if needed. */ function _deposit(uint256 amount) internal override returns (uint256) { _mint(address(this), amount); diff --git a/contracts/test/NativeTokenDestinationTests.t.sol b/contracts/test/NativeTokenDestinationTests.t.sol index 25a4809df..daf58d619 100644 --- a/contracts/test/NativeTokenDestinationTests.t.sol +++ b/contracts/test/NativeTokenDestinationTests.t.sol @@ -32,7 +32,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes TeleporterTokenDestinationTest.setUp(); app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -55,7 +55,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes // Need a new instance since the default set up pre-collateralizes the contract. app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -102,7 +102,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testZeroInitialReserveImbalance() public { vm.expectRevert("NativeTokenDestination: zero initial reserve imbalance"); new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -117,7 +117,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testInvalidBurnedRewardPercentage() public { vm.expectRevert("NativeTokenDestination: invalid percentage"); new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -132,7 +132,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testZeroSourceBlockchainID() public { vm.expectRevert(_formatErrorMessage("zero source blockchain ID")); new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: address(this), sourceBlockchainID: bytes32(0), @@ -147,7 +147,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testSendBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -165,7 +165,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testSendAndCallBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -228,7 +228,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testScaleTokensMultiplyOnSend() public { uint8 decimalShift = 3; app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -245,7 +245,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testScaleTokensMultiplyOnReceive() public { uint8 decimalShift = 3; app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -343,7 +343,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testReportBurnFeesNoRewardSuccess() public { // Create a new destination instance with no rewards for reporting burned fees. app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, @@ -379,7 +379,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes function testReceiveSendAndCallBeforeCollateralized() public { // Need a new instance since the default set up pre-collateralizes the contract. app = new NativeTokenDestination(NativeTokenDestinationSettings({ - symbol: DEFAULT_SYMBOL, + nativeAssetSymbol: DEFAULT_SYMBOL, teleporterRegistryAddress: MOCK_TELEPORTER_REGISTRY_ADDRESS, teleporterManager: MOCK_TELEPORTER_MESSENGER_ADDRESS, sourceBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, diff --git a/tests/utils/utils.go b/tests/utils/utils.go index 38502895c..a66ce851e 100644 --- a/tests/utils/utils.go +++ b/tests/utils/utils.go @@ -149,7 +149,7 @@ func DeployNativeTokenDestination( opts, subnet.RPCClient, nativetokendestination.NativeTokenDestinationSettings{ - Symbol: symbol, + NativeAssetSymbol: symbol, TeleporterRegistryAddress: subnet.TeleporterRegistryAddress, TeleporterManager: teleporterManager, SourceBlockchainID: sourceBlockchainID, From 5f38dff5c807db31ae01a9e09367da062227be1a Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 17 Apr 2024 18:03:24 -0400 Subject: [PATCH 23/26] Separate totalNativeAssetSupply from wrapped native asset totalSupply() --- .../NativeTokenDestination.go | 66 ++++++++++++++++++- .../go/mocks/ExampleWAVAX/ExampleWAVAX.go | 2 +- contracts/src/NativeTokenDestination.sol | 65 +++++++++++------- .../interfaces/INativeTokenDestination.sol | 5 +- contracts/src/mocks/ExampleWAVAX.sol | 2 +- .../test/NativeTokenDestinationTests.t.sol | 22 ++++--- .../TeleporterTokenDestinationTests.t.sol | 3 + 7 files changed, 129 insertions(+), 36 deletions(-) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index d466bc5cc..4e2a078a6 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -67,8 +67,8 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004b5f38038062004b5f83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004b3f83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613edc62000c63600039600081816104ca0152610d900152600081816105d5015261099001526000818161039801526110800152600081816106eb015281816110ab01526110dc01526000818161083301528181610ee9015281816116bf01528181611965015281816120200152818161226c01526127ec0152600081816103ec01528181610ec60152818161168f0152818161193f01528181611ff901528181612246015261277601526000818161076d015281816117fd01526120fc01526000818161034c0152818161111d015281816124d30152612b890152613edc6000f3fe60806040526004361061026a5760003560e01c806370a0823111610144578063c452165e116100b6578063d2cc7a701161007a578063d2cc7a701461078f578063dd62ed3e146107a4578063ecd4ed1b146107c4578063f2fde38b146107e1578063f3f981d814610801578063f5ea06031461082157610279565b8063c452165e1461070d578063c868efaa14610725578063d0e30db014610279578063d10a5b8c14610745578063d127dc9b1461075b57610279565b80639731429711610108578063973142971461062a578063a2309ff814610663578063a457c2d714610679578063a9059cbb14610699578063b9448587146106b9578063ba3f5a12146106d957610279565b806370a0823114610578578063715018a6146105ae5780638ac7dd20146105c35780638da5cb5b146105f757806395d89b411461061557610279565b80632e1a7d4d116101dd5780633a23dfe2116101a15780633a23dfe2146104b85780634511243e146104ec57806349e3284e1461050c578063525975e61461052157806355538c8b146105385780635eb995141461055857610279565b80632e1a7d4d1461042e57806330079bff1461044e578063313ce56714610461578063329c3e121461047d578063395093511461049857610279565b806318160ddd1161022f57806318160ddd146103255780631a7f5bec1461033a5780631ce220751461038657806323b872dd146103ba57806329b7b3fd146103da5780632b0d8f181461040e57610279565b8062d872ae1461028157806306fdde03146102aa578063095ea7b3146102cc578063146dfd3c146102fc57806315beb59f1461030f57610279565b3661027957610277610855565b005b610277610855565b34801561028d57600080fd5b50610297600a5481565b6040519081526020015b60405180910390f35b3480156102b657600080fd5b506102bf610896565b6040516102a191906132e1565b3480156102d857600080fd5b506102ec6102e7366004613314565b610928565b60405190151581526020016102a1565b61027761030a366004613340565b610942565b34801561031b57600080fd5b5061029761213481565b34801561033157600080fd5b50610297610978565b34801561034657600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a1565b34801561039257600080fd5b506102ec7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c657600080fd5b506102ec6103d5366004613358565b6109cf565b3480156103e657600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561041a57600080fd5b50610277610429366004613399565b6109f3565b34801561043a57600080fd5b506102776104493660046133b6565b610aec565b61027761045c3660046133cf565b610b5c565b34801561046d57600080fd5b50604051601281526020016102a1565b34801561048957600080fd5b5061036e6001600160991b0181565b3480156104a457600080fd5b506102ec6104b3366004613314565b610b8e565b3480156104c457600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f857600080fd5b50610277610507366004613399565b610bb0565b34801561051857600080fd5b506102ec610cad565b34801561052d57600080fd5b5061029762035b6081565b34801561054457600080fd5b506102776105533660046133b6565b610cbe565b34801561056457600080fd5b506102776105733660046133b6565b610fbe565b34801561058457600080fd5b50610297610593366004613399565b6001600160a01b031660009081526020819052604090205490565b3480156105ba57600080fd5b50610277610fcf565b3480156105cf57600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561060357600080fd5b506008546001600160a01b031661036e565b34801561062157600080fd5b506102bf610fe1565b34801561063657600080fd5b506102ec610645366004613399565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066f57600080fd5b50610297600b5481565b34801561068557600080fd5b506102ec610694366004613314565b610ff0565b3480156106a557600080fd5b506102ec6106b4366004613314565b61106b565b3480156106c557600080fd5b506102976106d4366004613419565b611079565b3480156106e557600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561071957600080fd5b5061036e600160981b81565b34801561073157600080fd5b50610277610740366004613449565b611108565b34801561075157600080fd5b50610297600c5481565b34801561076757600080fd5b506102977f000000000000000000000000000000000000000000000000000000000000000081565b34801561079b57600080fd5b50600754610297565b3480156107b057600080fd5b506102976107bf3660046134d2565b6112d2565b3480156107d057600080fd5b5061036e62010203600160981b0181565b3480156107ed57600080fd5b506102776107fc366004613399565b6112fd565b34801561080d57600080fd5b5061029761081c3660046133b6565b611373565b34801561082d57600080fd5b5061036e7f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2610894333461139c565b565b6060600380546108a590613500565b80601f01602080910402602001604051908101604052809291908181526020018280546108d190613500565b801561091e5780601f106108f35761010080835404028352916020019161091e565b820191906000526020600020905b81548152906001019060200180831161090157829003601f168201915b5050505050905090565b60003361093681858561145b565b60019150505b92915050565b600a541561096b5760405162461bcd60e51b815260040161096290613534565b60405180910390fd5b6109758134611580565b50565b60008061098a47600160981b3161359e565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109bc919061359e565b90506109c882826135b1565b9250505090565b6000336109dd858285611a6b565b6109e8858585611adf565b506001949350505050565b6109fb611c83565b6001600160a01b038116610a215760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff1615610aa05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610962565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b2b3382611c8b565b604051339082156108fc029083906000818181858888f19350505050158015610b58573d6000803e3d6000fd5b5050565b600a5415610b7c5760405162461bcd60e51b815260040161096290613534565b610975610b8882613701565b34611dba565b600033610936818585610ba183836112d2565b610bab919061359e565b61145b565b610bb8611c83565b6001600160a01b038116610bde5760405162461bcd60e51b8152600401610962906135c4565b6001600160a01b03811660009081526006602052604090205460ff16610c585760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610962565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cb9600a541590565b905090565b600160095414610ce05760405162461bcd60e51b8152600401610962906137af565b6002600955600c54600160981b31908111610d755760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a401610962565b6000600c5482610d8591906135b1565b905060006064610db57f0000000000000000000000000000000000000000000000000000000000000000846137f3565b610dbf9190613820565b90506000610dcd82846135b1565b600c85905590508115610def57610de4308361231e565b610ded826123a0565b505b6000610dfc826000611079565b905060008111610e745760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e000000000000006064820152608401610962565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610f7391906080820190815260200184604051602001610f5c919061384a565b6040516020818303038152906040528152506123b0565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fa791815260200190565b60405180910390a250506001600955505050505050565b610fc6611c83565b610975816124cf565b610fd761266f565b61089460006126c9565b6060600480546108a590613500565b60003381610ffe82866112d2565b90508381101561105e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610962565b6109e8828686840361145b565b600033610936818585611adf565b60008115157f00000000000000000000000000000000000000000000000000000000000000001515036110d7576110d07f0000000000000000000000000000000000000000000000000000000000000000846137f3565b905061093c565b6111017f000000000000000000000000000000000000000000000000000000000000000084613820565b9392505050565b61111061271b565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ab9190613899565b10156112125760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610962565b61121b33610645565b156112815760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610962565b6112c2848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277492505050565b6112cc6001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61130561266f565b6001600160a01b03811661136a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b610975816126c9565b600080611381602084613820565b905061138e6020846138b2565b1561093c57611101816138c6565b6001600160a01b0382166113f25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610962565b8060026000828254611404919061359e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610962565b6001600160a01b03821661151e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610962565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115a25760405162461bcd60e51b8152600401610962906137af565b600260095560006115b96060840160408501613399565b6001600160a01b0316036116185760405162461bcd60e51b81526020600482015260326024820152600080516020613e6783398151915260448201527120726563697069656e74206164647265737360701b6064820152608401610962565b60008260a001351161163c5760405162461bcd60e51b8152600401610962906138df565b61166182356116516040850160208601613399565b838560600135866080013561298a565b90506116886040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036117fb576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166116ef6040860160208701613399565b6001600160a01b0316146117155760405162461bcd60e51b815260040161096290613920565b6080840135156117825760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b6064820152608401610962565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117b99190613399565b6001600160a01b031690526040516117e2919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061192d565b7f000000000000000000000000000000000000000000000000000000000000000084350361185a57306118346040860160208701613399565b6001600160a01b03160361185a5760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600281526020018481526020016040518060a001604052808760000135815260200187602001602081019061189b9190613399565b6001600160a01b031681526020016118b96060890160408a01613399565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a196040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b604051908082528060200260200182016040528015611a02578160200160208202803683370190505b50815260200185604051602001610f5c919061384a565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a5792919061396b565b60405180910390a350506001600955505050565b6000611a7784846112d2565b905060001981146112cc5781811015611ad25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610962565b6112cc848484840361145b565b6001600160a01b038316611b435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610962565b6001600160a01b038216611ba55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610962565b6001600160a01b03831660009081526020819052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610962565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36112cc565b61089461266f565b6001600160a01b038216611ceb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610962565b6001600160a01b03821660009081526020819052604090205481811015611d5f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610962565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611573565b505050565b600160095414611ddc5760405162461bcd60e51b8152600401610962906137af565b600260095560408201516001600160a01b0316611e4f5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f20726563697069656e7420636f6e7472616374206164647265737300000000006064820152608401610962565b6000826080015111611e735760405162461bcd60e51b8152600401610962906138df565b60008260a0015111611ed25760405162461bcd60e51b81526020600482015260346024820152600080516020613e67833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b6064820152608401610962565b81608001518260a0015110611f3d5760405162461bcd60e51b81526020600482015260376024820152600080516020613e8783398151915260448201527f6c696420726563697069656e7420676173206c696d69740000000000000000006064820152608401610962565b60c08201516001600160a01b0316611fab5760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2066616c6c6261636b20726563697069656e74206164647265737300000000006064820152608401610962565b611fc982600001518360200151838560e0015186610100015161298a565b9050611ff06040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036120f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120735760405162461bcd60e51b815260040161096290613920565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016120df91906139ce565b6040516020818303038152906040528152509150612234565b83517f0000000000000000000000000000000000000000000000000000000000000000900361215657306001600160a01b031684602001516001600160a01b0316036121565760405162461bcd60e51b815260040161096290613920565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152602001876080015181526020018761010001518152506040516020016121f59190613a20565b604051602081830303815290604052815250915061213461221a856060015151611373565b61222491906137f3565b6122319062035b6061359e565b90505b60006122e06040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156119d9576119d9613612565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a57929190613ab0565b80600b6000828254612330919061359e565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b505050505050565b60006123ac308361139c565b5090565b6000806123bb612b84565b60408401516020015190915015612460576040830151516001600160a01b031661243d5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610962565b604083015160208101519051612460916001600160a01b03909116908390612c98565b604051630624488560e41b81526001600160a01b0382169063624488509061248c908690600401613b9d565b6020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190613899565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125539190613899565b600754909150818311156125c35760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610962565b8083116126385760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610962565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60026005540361276d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600555565b7f000000000000000000000000000000000000000000000000000000000000000083146127ea5760405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f3634b21039b7bab931b29031b430b4b760811b6064820152608401610962565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461287f5760405162461bcd60e51b81526020600482015260386024820152600080516020613e8783398151915260448201527f6c696420746f6b656e20736f75726365206164647265737300000000000000006064820152608401610962565b6000818060200190518101906128959190613c69565b905060006128a882602001516001611079565b90506000825160038111156128bf576128bf613834565b036128f457600082604001518060200190518101906128de9190613d0d565b90506128ee816000015183612d6c565b50612983565b60018251600381111561290957612909613834565b0361293457600082604001518060200190518101906129289190613d59565b90506128ee8183612e6b565b60405162461bcd60e51b81526020600482015260306024820152600080516020613e8783398151915260448201526f6c6964206d657373616765207479706560801b6064820152608401610962565b5050505050565b6000856129ed5760405162461bcd60e51b815260206004820152603a6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e2049440000000000006064820152608401610962565b6001600160a01b038516612a575760405162461bcd60e51b815260206004820152603b6024820152600080516020613e6783398151915260448201527f2064657374696e6174696f6e20627269646765206164647265737300000000006064820152608401610962565b612a60846123a0565b9350612a6c828461359e565b8411612ae05760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f76657220666565730000006064820152608401610962565b612aea83856135b1565b9350612af584612fbb565b6000612b02856000611079565b905060008111612b7a5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e7366657200000000006064820152608401610962565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c099190613e10565b9050612c2d816001600160a01b031660009081526006602052604090205460ff1690565b15612c935760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610962565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190613899565b612d17919061359e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790529091506112cc908590612fc5565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b82604051612da791815260200190565b60405180910390a2600a5481908015612e615780831115612e115760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612e0581836135b1565b6000600a559150612e61565b6000612e1d84836135b1565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b6112cc848361231e565b600a5415612e8157610b58826060015182612d6c565b612e8b308261231e565b60008260200151604051602401612ea291906132e1565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612ee39190859085613097565b90508015612f375783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f2a91815260200190565b60405180910390a26112cc565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612f7691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f19350505050158015612983573d6000803e3d6000fd5b6109753082611c8b565b600061301a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661316e9092919063ffffffff16565b805190915015611db557808060200190518101906130389190613e2d565b611db55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610962565b6000845a10156130e95760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610962565b834710156131395760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610962565b826001600160a01b03163b60000361315357506000613166565b600080600084516020860188888bf19150505b949350505050565b6060613166848460008585600080866001600160a01b031685876040516131959190613e4a565b60006040518083038185875af1925050503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b50915091506131e8878383876131f3565b979650505050505050565b6060831561326257825160000361325b576001600160a01b0385163b61325b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610962565b5081613166565b61316683838151156132775781518083602001fd5b8060405162461bcd60e51b815260040161096291906132e1565b60005b838110156132ac578181015183820152602001613294565b50506000910152565b600081518084526132cd816020860160208601613291565b601f01601f19169290920160200192915050565b60208152600061110160208301846132b5565b6001600160a01b038116811461097557600080fd5b8035612c93816132f4565b6000806040838503121561332757600080fd5b8235613332816132f4565b946020939093013593505050565b600060c0828403121561335257600080fd5b50919050565b60008060006060848603121561336d57600080fd5b8335613378816132f4565b92506020840135613388816132f4565b929592945050506040919091013590565b6000602082840312156133ab57600080fd5b8135611101816132f4565b6000602082840312156133c857600080fd5b5035919050565b6000602082840312156133e157600080fd5b813567ffffffffffffffff8111156133f857600080fd5b8201610120818503121561110157600080fd5b801515811461097557600080fd5b6000806040838503121561342c57600080fd5b82359150602083013561343e8161340b565b809150509250929050565b6000806000806060858703121561345f57600080fd5b843593506020850135613471816132f4565b9250604085013567ffffffffffffffff8082111561348e57600080fd5b818701915087601f8301126134a257600080fd5b8135818111156134b157600080fd5b8860208285010111156134c357600080fd5b95989497505060200194505050565b600080604083850312156134e557600080fd5b82356134f0816132f4565b9150602083013561343e816132f4565b600181811c9082168061351457607f821691505b60208210810361335257634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561093c5761093c613588565b8181038181111561093c5761093c613588565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff8111828210171561364c5761364c613612565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561367b5761367b613612565b604052919050565b600067ffffffffffffffff82111561369d5761369d613612565b50601f01601f191660200190565b600082601f8301126136bc57600080fd5b81356136cf6136ca82613683565b613652565b8181528460208386010111156136e457600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561371457600080fd5b61371c613628565b8235815261372c60208401613309565b602082015261373d60408401613309565b6040820152606083013567ffffffffffffffff81111561375c57600080fd5b613768368286016136ab565b6060830152506080830135608082015260a083013560a082015261378e60c08401613309565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b808202811582820484141761093c5761093c613588565b634e487b7160e01b600052601260045260246000fd5b60008261382f5761382f61380a565b500490565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061387057634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261316660808401826132b5565b6000602082840312156138ab57600080fd5b5051919050565b6000826138c1576138c161380a565b500690565b6000600182016138d8576138d8613588565b5060010190565b6020808252603390820152600080516020613e67833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613e8783398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e081016020840135613981816132f4565b6001600160a01b0390811660208401526040850135906139a0826132f4565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b038084511660208401526020840151608060408501526139fd60a08501826132b5565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613a6b6101208501836132b5565b9150608085015160a085015260a0850151613a9160c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613ad760608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b086101608501836132b5565b9150608086015160c085015260a086015160e085015260c0860151610100613b3a818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613b925781516001600160a01b031687529582019590820190600101613b6d565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613bfe610100840182613b59565b905060a0840151601f198483030160e0850152613c1b82826132b5565b95945050505050565b600082601f830112613c3557600080fd5b8151613c436136ca82613683565b818152846020838601011115613c5857600080fd5b613166826020830160208701613291565b600060208284031215613c7b57600080fd5b815167ffffffffffffffff80821115613c9357600080fd5b9083019060608286031215613ca757600080fd5b604051606081018181108382111715613cc257613cc2613612565b604052825160048110613cd457600080fd5b815260208381015190820152604083015182811115613cf257600080fd5b613cfe87828601613c24565b60408301525095945050505050565b600060208284031215613d1f57600080fd5b6040516020810181811067ffffffffffffffff82111715613d4257613d42613612565b6040528251613d50816132f4565b81529392505050565b600060208284031215613d6b57600080fd5b815167ffffffffffffffff80821115613d8357600080fd5b9083019060808286031215613d9757600080fd5b604051608081018181108382111715613db257613db2613612565b6040528251613dc0816132f4565b8152602083015182811115613dd457600080fd5b613de087828601613c24565b6020830152506040830151604082015260608301519250613e00836132f4565b6060810192909252509392505050565b600060208284031215613e2257600080fd5b8151611101816132f4565b600060208284031215613e3f57600080fd5b81516111018161340b565b60008251613e5c818460208701613291565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212206a6fc22944e57c2e85579fb45afd674d727953bd72515beb9db18ecfe30d042364736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_FOR_BRIDGE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalNativeAssetSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220d24ec9cce445281042bb0036b2d4723c7a518a95a9721fedec387f8d863d695464736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. @@ -238,6 +238,37 @@ func (_NativeTokenDestination *NativeTokenDestinationTransactorRaw) Transact(opt return _NativeTokenDestination.Contract.contract.Transact(opts, method, params...) } +// BURNEDFORBRIDGEADDRESS is a free data retrieval call binding the contract method 0x47a9a22c. +// +// Solidity: function BURNED_FOR_BRIDGE_ADDRESS() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationCaller) BURNEDFORBRIDGEADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "BURNED_FOR_BRIDGE_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BURNEDFORBRIDGEADDRESS is a free data retrieval call binding the contract method 0x47a9a22c. +// +// Solidity: function BURNED_FOR_BRIDGE_ADDRESS() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationSession) BURNEDFORBRIDGEADDRESS() (common.Address, error) { + return _NativeTokenDestination.Contract.BURNEDFORBRIDGEADDRESS(&_NativeTokenDestination.CallOpts) +} + +// BURNEDFORBRIDGEADDRESS is a free data retrieval call binding the contract method 0x47a9a22c. +// +// Solidity: function BURNED_FOR_BRIDGE_ADDRESS() view returns(address) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) BURNEDFORBRIDGEADDRESS() (common.Address, error) { + return _NativeTokenDestination.Contract.BURNEDFORBRIDGEADDRESS(&_NativeTokenDestination.CallOpts) +} + // BURNEDTXFEESADDRESS is a free data retrieval call binding the contract method 0xc452165e. // // Solidity: function BURNED_TX_FEES_ADDRESS() view returns(address) @@ -1075,6 +1106,37 @@ func (_NativeTokenDestination *NativeTokenDestinationCallerSession) TotalMinted( return _NativeTokenDestination.Contract.TotalMinted(&_NativeTokenDestination.CallOpts) } +// TotalNativeAssetSupply is a free data retrieval call binding the contract method 0x1906529c. +// +// Solidity: function totalNativeAssetSupply() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCaller) TotalNativeAssetSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _NativeTokenDestination.contract.Call(opts, &out, "totalNativeAssetSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalNativeAssetSupply is a free data retrieval call binding the contract method 0x1906529c. +// +// Solidity: function totalNativeAssetSupply() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationSession) TotalNativeAssetSupply() (*big.Int, error) { + return _NativeTokenDestination.Contract.TotalNativeAssetSupply(&_NativeTokenDestination.CallOpts) +} + +// TotalNativeAssetSupply is a free data retrieval call binding the contract method 0x1906529c. +// +// Solidity: function totalNativeAssetSupply() view returns(uint256) +func (_NativeTokenDestination *NativeTokenDestinationCallerSession) TotalNativeAssetSupply() (*big.Int, error) { + return _NativeTokenDestination.Contract.TotalNativeAssetSupply(&_NativeTokenDestination.CallOpts) +} + // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. // // Solidity: function totalSupply() view returns(uint256) diff --git a/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go b/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go index 95ea6aa4e..f05706599 100644 --- a/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go +++ b/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go @@ -32,7 +32,7 @@ var ( // ExampleWAVAXMetaData contains all meta data concerning the ExampleWAVAX contract. var ExampleWAVAXMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040518060400160405280600c81526020016b0aee4c2e0e0cac84082ac82b60a31b815250604051806040016040528060058152602001640ae82ac82b60db1b815250816003908162000066919062000123565b50600462000075828262000123565b505050620001ef565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000a957607f821691505b602082108103620000ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011e57600081815260208120601f850160051c81016020861015620000f95750805b601f850160051c820191505b818110156200011a5782815560010162000105565b5050505b505050565b81516001600160401b038111156200013f576200013f6200007e565b620001578162000150845462000094565b84620000d0565b602080601f8311600181146200018f5760008415620001765750858301515b600019600386901b1c1916600185901b1785556200011a565b600085815260208120601f198616915b82811015620001c0578886015182559484019460019091019084016200019f565b5085821015620001df5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610be480620001ff6000396000f3fe6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021e578063a9059cbb1461023e578063d0e30db0146100d5578063dd62ed3e1461025e576100d5565b806339509351146101b357806370a08231146101d357806395d89b4114610209576100d5565b806306fdde03146100dd578063095ea7b31461010857806318160ddd1461013857806323b872dd146101575780632e1a7d4d14610177578063313ce56714610197576100d5565b366100d5576100d361027e565b005b6100d361027e565b3480156100e957600080fd5b506100f26102bf565b6040516100ff9190610a15565b60405180910390f35b34801561011457600080fd5b50610128610123366004610a7f565b610351565b60405190151581526020016100ff565b34801561014457600080fd5b506002545b6040519081526020016100ff565b34801561016357600080fd5b50610128610172366004610aa9565b61036b565b34801561018357600080fd5b506100d3610192366004610ae5565b61038f565b3480156101a357600080fd5b50604051601281526020016100ff565b3480156101bf57600080fd5b506101286101ce366004610a7f565b6103ff565b3480156101df57600080fd5b506101496101ee366004610afe565b6001600160a01b031660009081526020819052604090205490565b34801561021557600080fd5b506100f2610421565b34801561022a57600080fd5b50610128610239366004610a7f565b610430565b34801561024a57600080fd5b50610128610259366004610a7f565b6104b0565b34801561026a57600080fd5b50610149610279366004610b20565b6104be565b61028833346104e9565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b6060600380546102ce90610b53565b80601f01602080910402602001604051908101604052809291908181526020018280546102fa90610b53565b80156103475780601f1061031c57610100808354040283529160200191610347565b820191906000526020600020905b81548152906001019060200180831161032a57829003601f168201915b5050505050905090565b60003361035f8185856105a8565b60019150505b92915050565b6000336103798582856106cd565b610384858585610747565b506001949350505050565b61039933826108eb565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f193505050501580156103fb573d6000803e3d6000fd5b5050565b60003361035f81858561041283836104be565b61041c9190610b8d565b6105a8565b6060600480546102ce90610b53565b6000338161043e82866104be565b9050838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038482868684036105a8565b60003361035f818585610747565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661053f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b80600260008282546105519190610b8d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661060a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161049a565b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106d984846104be565b9050600019811461074157818110156107345760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b61074184848484036105a8565b50505050565b6001600160a01b0383166107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161049a565b6001600160a01b03821661080d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161049a565b6001600160a01b038316600090815260208190526040902054818110156108855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161049a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610741565b6001600160a01b03821661094b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161049a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b600060208083528351808285015260005b81811015610a4257858101830151858201604001528201610a26565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a7a57600080fd5b919050565b60008060408385031215610a9257600080fd5b610a9b83610a63565b946020939093013593505050565b600080600060608486031215610abe57600080fd5b610ac784610a63565b9250610ad560208501610a63565b9150604084013590509250925092565b600060208284031215610af757600080fd5b5035919050565b600060208284031215610b1057600080fd5b610b1982610a63565b9392505050565b60008060408385031215610b3357600080fd5b610b3c83610a63565b9150610b4a60208401610a63565b90509250929050565b600181811c90821680610b6757607f821691505b602082108103610b8757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036557634e487b7160e01b600052601160045260246000fdfea26469706673582212203076c289ec587f4d26e341055e08227798cf8d80398bb26e7bea7fd8d7cf235164736f6c63430008120033", + Bin: "0x60806040523480156200001157600080fd5b506040518060400160405280600c81526020016b0aee4c2e0e0cac84082ac82b60a31b815250604051806040016040528060058152602001640ae82ac82b60db1b815250816003908162000066919062000123565b50600462000075828262000123565b505050620001ef565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000a957607f821691505b602082108103620000ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011e57600081815260208120601f850160051c81016020861015620000f95750805b601f850160051c820191505b818110156200011a5782815560010162000105565b5050505b505050565b81516001600160401b038111156200013f576200013f6200007e565b620001578162000150845462000094565b84620000d0565b602080601f8311600181146200018f5760008415620001765750858301515b600019600386901b1c1916600185901b1785556200011a565b600085815260208120601f198616915b82811015620001c0578886015182559484019460019091019084016200019f565b5085821015620001df5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610be480620001ff6000396000f3fe6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021e578063a9059cbb1461023e578063d0e30db0146100d5578063dd62ed3e1461025e576100d5565b806339509351146101b357806370a08231146101d357806395d89b4114610209576100d5565b806306fdde03146100dd578063095ea7b31461010857806318160ddd1461013857806323b872dd146101575780632e1a7d4d14610177578063313ce56714610197576100d5565b366100d5576100d361027e565b005b6100d361027e565b3480156100e957600080fd5b506100f26102bf565b6040516100ff9190610a15565b60405180910390f35b34801561011457600080fd5b50610128610123366004610a7f565b610351565b60405190151581526020016100ff565b34801561014457600080fd5b506002545b6040519081526020016100ff565b34801561016357600080fd5b50610128610172366004610aa9565b61036b565b34801561018357600080fd5b506100d3610192366004610ae5565b61038f565b3480156101a357600080fd5b50604051601281526020016100ff565b3480156101bf57600080fd5b506101286101ce366004610a7f565b6103ff565b3480156101df57600080fd5b506101496101ee366004610afe565b6001600160a01b031660009081526020819052604090205490565b34801561021557600080fd5b506100f2610421565b34801561022a57600080fd5b50610128610239366004610a7f565b610430565b34801561024a57600080fd5b50610128610259366004610a7f565b6104b0565b34801561026a57600080fd5b50610149610279366004610b20565b6104be565b61028833346104e9565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b6060600380546102ce90610b53565b80601f01602080910402602001604051908101604052809291908181526020018280546102fa90610b53565b80156103475780601f1061031c57610100808354040283529160200191610347565b820191906000526020600020905b81548152906001019060200180831161032a57829003601f168201915b5050505050905090565b60003361035f8185856105a8565b60019150505b92915050565b6000336103798582856106cd565b610384858585610747565b506001949350505050565b61039933826108eb565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f193505050501580156103fb573d6000803e3d6000fd5b5050565b60003361035f81858561041283836104be565b61041c9190610b8d565b6105a8565b6060600480546102ce90610b53565b6000338161043e82866104be565b9050838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038482868684036105a8565b60003361035f818585610747565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661053f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b80600260008282546105519190610b8d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661060a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161049a565b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106d984846104be565b9050600019811461074157818110156107345760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b61074184848484036105a8565b50505050565b6001600160a01b0383166107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161049a565b6001600160a01b03821661080d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161049a565b6001600160a01b038316600090815260208190526040902054818110156108855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161049a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610741565b6001600160a01b03821661094b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161049a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b600060208083528351808285015260005b81811015610a4257858101830151858201604001528201610a26565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a7a57600080fd5b919050565b60008060408385031215610a9257600080fd5b610a9b83610a63565b946020939093013593505050565b600080600060608486031215610abe57600080fd5b610ac784610a63565b9250610ad560208501610a63565b9150604084013590509250925092565b600060208284031215610af757600080fd5b5035919050565b600060208284031215610b1057600080fd5b610b1982610a63565b9392505050565b60008060408385031215610b3357600080fd5b610b3c83610a63565b9150610b4a60208401610a63565b90509250929050565b600181811c90821680610b6757607f821691505b602082108103610b8757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036557634e487b7160e01b600052601160045260246000fdfea2646970667358221220295ee2f3aefa7ee615475100ec67b6f9a1358b45172dd8db4896cf577d8eb63664736f6c63430008120033", } // ExampleWAVAXABI is the input ABI used to generate the binding from. diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index 60dac62f4..c528aed78 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -74,6 +74,14 @@ contract NativeTokenDestination is */ address public constant BURNED_TX_FEES_ADDRESS = 0x0100000000000000000000000000000000000000; + /** + * @notice The address where native tokens are sent to be burned to bridge to other chains. + * This address is distinct from {BURNED_TX_FEES_ADDRESS} so that the amount of burned transaction + * fees and burned bridged amounts can be tracked separately. + * This address was chosen arbitrarily. + */ + address public constant BURNED_FOR_BRIDGE_ADDRESS = 0x0100000000000000000000000000000000010203; + /** * @notice Address used by the source chain to blackhole funds, effectively burning them. * @@ -155,16 +163,16 @@ contract NativeTokenDestination is } /** - * @dev Receives native token with no calldata provided. The tokens are credited to the sender - * by minting the amount of the IWrappedTokenNative representation. + * @dev Receives native token with no calldata provided. The tokens are credited to the sender's + * wrapped native token balance. */ receive() external payable { deposit(); } /** - * @dev Fallback function for receiving native tokens. The tokens are credited to the sender - * by minting the amount of the IWrappedTokenNative representation. + * @dev Fallback function for receiving native tokens. The tokens are credited to the sender's + * wrapped native token balance. */ fallback() external payable { deposit(); @@ -239,6 +247,11 @@ contract NativeTokenDestination is /** * @dev See {IWrappedNativeToken-deposit}. + * + * Note: {IWrappedNativeToken-deposit} should not be confused with {TeleporterTokenDestination-_deposit}. + * {IWrappedNativeToken-deposit} is the public method for converting native tokens into the wrapped native + * token (ERC20) representation. {TeleporterTokenDestination-_deposit} is the internal method used when + * processing bridge transfers. */ function deposit() public payable { emit Deposit(msg.sender, msg.value); @@ -247,27 +260,29 @@ contract NativeTokenDestination is /** * @dev See {IWrappedNativeToken-withdraw}. + * + * Note: {IWrappedNativeToken-withdraw} should not be confused with {TeleporterTokenDestination-_withdraw}. + * {IWrappedNativeToken-withdraw} is the external method to redeem a wrapped native token (ERC20) balance + * for the native token itself. {TeleporterTokenDestination-_withdraw} is the internal method used when + * processing bridge transfers. */ - function withdraw(uint256 amount) public { + function withdraw(uint256 amount) external { emit Withdrawal(msg.sender, amount); _burn(msg.sender, amount); payable(msg.sender).transfer(amount); } /** - * @dev See {INativeTokenDestination-totalSupply}. - * This implementation overrides the default ERC20 implementation. It provides the total - * supply of the native token, accounting for burned fees and tokens burnt to be transfered - * out to other chains. Native tokens transfered out to other chains are left locked in this - * contract forever, as the native minter precompile does not offer a "burnNativeCoin" interface. + * @dev See {INativeTokenDestination-totalNativeAssetSupply}. + * + * Note: {INativeTokenDestination-totalNativeAssetSupply} should not be confused with {IERC20-totalSupply} + * {INativeTokenDestination-totalNativeAssetSupply} returns the supply of the native asset of the chain, + * accounting for the amounts that have been bridged in and out of the chain as well as burnt transaction + * fees. {IERC20-totalSupply} returns the supply of the native asset held by this contract that is represented + * as an ERC20. */ - function totalSupply() - public - view - override (ERC20, IERC20, INativeTokenDestination) - returns (uint256) - { - uint256 burned = BURNED_TX_FEES_ADDRESS.balance + address(this).balance; + function totalNativeAssetSupply() public view returns (uint256) { + uint256 burned = BURNED_TX_FEES_ADDRESS.balance + BURNED_FOR_BRIDGE_ADDRESS.balance; uint256 created = totalMinted + initialReserveImbalance; return created - burned; } @@ -276,8 +291,9 @@ contract NativeTokenDestination is * @dev See {TeleporterTokenDestination-_deposit} * * Native tokens to be deposited are sent via the payable {send} and {sendAndCall} functions, and - * remained locked in this contract. The internal call to {_mint} represents the full amount as - * the wrapped native asset (ERC20) token, such that it can be used to pay for message fess if needed. + * remained locked in this contract. The internal call to {_mint} here credits the full amount as + * the wrapped native asset (ERC20) token by incrementing the ERC20 balance of this contract, such + * that it can be used to pay for message fees if needed. */ function _deposit(uint256 amount) internal override returns (uint256) { _mint(address(this), amount); @@ -288,8 +304,6 @@ contract NativeTokenDestination is * @dev See {TeleporterTokenDestination-_withdraw} */ function _withdraw(address recipient, uint256 amount) internal override { - emit TokensWithdrawn(recipient, amount); - // If the contract has not yet been collateralized, we will deduct as many tokens // as needed from the transfer as needed. If there are any excess tokens, they will // be minted and sent to the recipient. @@ -309,17 +323,24 @@ contract NativeTokenDestination is } // Call {_mintNativeCoin} even if the adjustedAmount is 0 to improve traceability. + emit TokensWithdrawn(recipient, adjustedAmount); _mintNativeCoin(recipient, adjustedAmount); } /** * @dev See {TeleporterTokenDestination-_burn} * - * The ERC20 representation of the native token is burnt by reducing the balance of this contract. + * This is the internal {_burn} method called when bridging tokens to another chain. + * The tokens to be burnt are already be held by this contract, and credited to this + * contract's balance of the wrapped native token. To burn the tokens, first burn the + * wrapped ERC20 representation of the native token (decreasing the totalSupply of the + * wrappen native token and reducing this contract's balance of it), and then send the + * native token amount to the BURNED_FOR_BRIDGE_ADDRESS. * */ function _burn(uint256 amount) internal override { _burn(address(this), amount); + payable(BURNED_FOR_BRIDGE_ADDRESS).transfer(amount); } /** diff --git a/contracts/src/interfaces/INativeTokenDestination.sol b/contracts/src/interfaces/INativeTokenDestination.sol index 7bb96d53e..d335a9cf3 100644 --- a/contracts/src/interfaces/INativeTokenDestination.sol +++ b/contracts/src/interfaces/INativeTokenDestination.sol @@ -35,7 +35,8 @@ interface INativeTokenDestination is INativeTokenBridge { function isCollateralized() external view returns (bool); /** - * @dev Returns a best-estimate (upper bound) of tokens in circulation on this chain. + * @dev Returns a best-estimate (upper bound) of the supply of the native asset + * in circulation on this chain. */ - function totalSupply() external view returns (uint256); + function totalNativeAssetSupply() external view returns (uint256); } diff --git a/contracts/src/mocks/ExampleWAVAX.sol b/contracts/src/mocks/ExampleWAVAX.sol index c060f7841..e2cbfd948 100644 --- a/contracts/src/mocks/ExampleWAVAX.sol +++ b/contracts/src/mocks/ExampleWAVAX.sol @@ -28,7 +28,7 @@ contract ExampleWAVAX is IWrappedNativeToken, ERC20 { emit Deposit(msg.sender, msg.value); } - function withdraw(uint256 amount) public { + function withdraw(uint256 amount) external { _burn(msg.sender, amount); emit Withdrawal(msg.sender, amount); payable(msg.sender).transfer(amount); diff --git a/contracts/test/NativeTokenDestinationTests.t.sol b/contracts/test/NativeTokenDestinationTests.t.sol index daf58d619..000409bee 100644 --- a/contracts/test/NativeTokenDestinationTests.t.sol +++ b/contracts/test/NativeTokenDestinationTests.t.sol @@ -46,7 +46,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes nativeTokenBridge = app; tokenBridge = app; feeToken = app; - assertEq(app.totalSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); + assertEq(app.totalNativeAssetSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); _collateralizeBridge(); } @@ -180,20 +180,26 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes app.sendAndCall{value: 100_000}(_createDefaultSendAndCallInput()); } - function testTotalSupply() public { - assertEq(app.totalSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); + function testTotalNativeAssetSupply() public { + assertEq(app.totalNativeAssetSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); // Mock tokens being burned as tx fees. vm.deal(app.BURNED_TX_FEES_ADDRESS(), _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1); - assertEq(app.totalSupply(), 1); + assertEq(app.totalNativeAssetSupply(), 1); // Reset the burned tx fee amount. vm.deal(app.BURNED_TX_FEES_ADDRESS(), 0); - assertEq(app.totalSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); + assertEq(app.totalNativeAssetSupply(), _DEFAULT_INITIAL_RESERVE_IMBALANCE); // Mock tokens being bridged out by crediting them to the native token destination contract - vm.deal(address(app), _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1); - assertEq(app.totalSupply(), 1); + vm.deal(app.BURNED_FOR_BRIDGE_ADDRESS(), _DEFAULT_INITIAL_RESERVE_IMBALANCE - 1); + assertEq(app.totalNativeAssetSupply(), 1); + + // Depositing native tokens into the contract to be wrapped native tokens shouldn't affect the supply + // of the native asset, but should be reflected in the total supply of the ERC20 representation. + app.deposit{value: 2}(); + assertEq(app.totalNativeAssetSupply(), 1); + assertEq(app.totalSupply(), 2); } function testTransferToSource() public { @@ -536,7 +542,7 @@ contract NativeTokenDestinationTest is NativeTokenBridgeTest, TeleporterTokenDes } function _getTotalSupply() internal view override returns (uint256) { - return app.totalSupply(); + return app.totalNativeAssetSupply(); } function _scaleTokens( diff --git a/contracts/test/TeleporterTokenDestinationTests.t.sol b/contracts/test/TeleporterTokenDestinationTests.t.sol index fbad89e0e..a27406f0f 100644 --- a/contracts/test/TeleporterTokenDestinationTests.t.sol +++ b/contracts/test/TeleporterTokenDestinationTests.t.sol @@ -146,11 +146,14 @@ abstract contract TeleporterTokenDestinationTest is TeleporterTokenBridgeTest { uint256 amount = 200; vm.prank(MOCK_TELEPORTER_MESSENGER_ADDRESS); _checkExpectedWithdrawal(DEFAULT_RECIPIENT_ADDRESS, amount); + uint256 initialSupply = _getTotalSupply(); + uint256 scaledAmount = _scaleTokens(amount, true); tokenDestination.receiveTeleporterMessage( DEFAULT_SOURCE_BLOCKCHAIN_ID, TOKEN_SOURCE_ADDRESS, _encodeSingleHopSendMessage(amount, DEFAULT_RECIPIENT_ADDRESS) ); + assertEq(_getTotalSupply(), initialSupply + scaledAmount); } function testReceiveSendAndCallSuccess() public { From 4cda851b7c46bd9fc2aceeff5ecb4b0ef8e8dfce Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 18 Apr 2024 09:40:40 -0400 Subject: [PATCH 24/26] Expand README. Lint --- .../NativeTokenDestination.go | 2 +- .../go/mocks/ExampleWAVAX/ExampleWAVAX.go | 2 +- contracts/README.md | 15 +++++++--- contracts/src/NativeTokenDestination.sol | 29 +++++++++---------- contracts/src/mocks/ExampleWAVAX.sol | 10 +++---- 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 4e2a078a6..54fb4d4d0 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_FOR_BRIDGE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalNativeAssetSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220d24ec9cce445281042bb0036b2d4723c7a518a95a9721fedec387f8d863d695464736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220a177e5cb61411d48161dbc7e966fd76a733ecade442d8d8708e4e099d8c39c4964736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go b/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go index f05706599..605090d97 100644 --- a/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go +++ b/abi-bindings/go/mocks/ExampleWAVAX/ExampleWAVAX.go @@ -32,7 +32,7 @@ var ( // ExampleWAVAXMetaData contains all meta data concerning the ExampleWAVAX contract. var ExampleWAVAXMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040518060400160405280600c81526020016b0aee4c2e0e0cac84082ac82b60a31b815250604051806040016040528060058152602001640ae82ac82b60db1b815250816003908162000066919062000123565b50600462000075828262000123565b505050620001ef565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000a957607f821691505b602082108103620000ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011e57600081815260208120601f850160051c81016020861015620000f95750805b601f850160051c820191505b818110156200011a5782815560010162000105565b5050505b505050565b81516001600160401b038111156200013f576200013f6200007e565b620001578162000150845462000094565b84620000d0565b602080601f8311600181146200018f5760008415620001765750858301515b600019600386901b1c1916600185901b1785556200011a565b600085815260208120601f198616915b82811015620001c0578886015182559484019460019091019084016200019f565b5085821015620001df5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610be480620001ff6000396000f3fe6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021e578063a9059cbb1461023e578063d0e30db0146100d5578063dd62ed3e1461025e576100d5565b806339509351146101b357806370a08231146101d357806395d89b4114610209576100d5565b806306fdde03146100dd578063095ea7b31461010857806318160ddd1461013857806323b872dd146101575780632e1a7d4d14610177578063313ce56714610197576100d5565b366100d5576100d361027e565b005b6100d361027e565b3480156100e957600080fd5b506100f26102bf565b6040516100ff9190610a15565b60405180910390f35b34801561011457600080fd5b50610128610123366004610a7f565b610351565b60405190151581526020016100ff565b34801561014457600080fd5b506002545b6040519081526020016100ff565b34801561016357600080fd5b50610128610172366004610aa9565b61036b565b34801561018357600080fd5b506100d3610192366004610ae5565b61038f565b3480156101a357600080fd5b50604051601281526020016100ff565b3480156101bf57600080fd5b506101286101ce366004610a7f565b6103ff565b3480156101df57600080fd5b506101496101ee366004610afe565b6001600160a01b031660009081526020819052604090205490565b34801561021557600080fd5b506100f2610421565b34801561022a57600080fd5b50610128610239366004610a7f565b610430565b34801561024a57600080fd5b50610128610259366004610a7f565b6104b0565b34801561026a57600080fd5b50610149610279366004610b20565b6104be565b61028833346104e9565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b6060600380546102ce90610b53565b80601f01602080910402602001604051908101604052809291908181526020018280546102fa90610b53565b80156103475780601f1061031c57610100808354040283529160200191610347565b820191906000526020600020905b81548152906001019060200180831161032a57829003601f168201915b5050505050905090565b60003361035f8185856105a8565b60019150505b92915050565b6000336103798582856106cd565b610384858585610747565b506001949350505050565b61039933826108eb565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f193505050501580156103fb573d6000803e3d6000fd5b5050565b60003361035f81858561041283836104be565b61041c9190610b8d565b6105a8565b6060600480546102ce90610b53565b6000338161043e82866104be565b9050838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038482868684036105a8565b60003361035f818585610747565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661053f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b80600260008282546105519190610b8d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661060a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161049a565b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106d984846104be565b9050600019811461074157818110156107345760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b61074184848484036105a8565b50505050565b6001600160a01b0383166107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161049a565b6001600160a01b03821661080d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161049a565b6001600160a01b038316600090815260208190526040902054818110156108855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161049a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610741565b6001600160a01b03821661094b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161049a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b600060208083528351808285015260005b81811015610a4257858101830151858201604001528201610a26565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a7a57600080fd5b919050565b60008060408385031215610a9257600080fd5b610a9b83610a63565b946020939093013593505050565b600080600060608486031215610abe57600080fd5b610ac784610a63565b9250610ad560208501610a63565b9150604084013590509250925092565b600060208284031215610af757600080fd5b5035919050565b600060208284031215610b1057600080fd5b610b1982610a63565b9392505050565b60008060408385031215610b3357600080fd5b610b3c83610a63565b9150610b4a60208401610a63565b90509250929050565b600181811c90821680610b6757607f821691505b602082108103610b8757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036557634e487b7160e01b600052601160045260246000fdfea2646970667358221220295ee2f3aefa7ee615475100ec67b6f9a1358b45172dd8db4896cf577d8eb63664736f6c63430008120033", + Bin: "0x60806040523480156200001157600080fd5b506040518060400160405280600c81526020016b0aee4c2e0e0cac84082ac82b60a31b815250604051806040016040528060058152602001640ae82ac82b60db1b815250816003908162000066919062000123565b50600462000075828262000123565b505050620001ef565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000a957607f821691505b602082108103620000ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011e57600081815260208120601f850160051c81016020861015620000f95750805b601f850160051c820191505b818110156200011a5782815560010162000105565b5050505b505050565b81516001600160401b038111156200013f576200013f6200007e565b620001578162000150845462000094565b84620000d0565b602080601f8311600181146200018f5760008415620001765750858301515b600019600386901b1c1916600185901b1785556200011a565b600085815260208120601f198616915b82811015620001c0578886015182559484019460019091019084016200019f565b5085821015620001df5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610be480620001ff6000396000f3fe6080604052600436106100c65760003560e01c8063395093511161007f578063a457c2d711610059578063a457c2d71461021e578063a9059cbb1461023e578063d0e30db0146100d5578063dd62ed3e1461025e576100d5565b806339509351146101b357806370a08231146101d357806395d89b4114610209576100d5565b806306fdde03146100dd578063095ea7b31461010857806318160ddd1461013857806323b872dd146101575780632e1a7d4d14610177578063313ce56714610197576100d5565b366100d5576100d361027e565b005b6100d361027e565b3480156100e957600080fd5b506100f26102bf565b6040516100ff9190610a15565b60405180910390f35b34801561011457600080fd5b50610128610123366004610a7f565b610351565b60405190151581526020016100ff565b34801561014457600080fd5b506002545b6040519081526020016100ff565b34801561016357600080fd5b50610128610172366004610aa9565b61036b565b34801561018357600080fd5b506100d3610192366004610ae5565b61038f565b3480156101a357600080fd5b50604051601281526020016100ff565b3480156101bf57600080fd5b506101286101ce366004610a7f565b6103ff565b3480156101df57600080fd5b506101496101ee366004610afe565b6001600160a01b031660009081526020819052604090205490565b34801561021557600080fd5b506100f2610421565b34801561022a57600080fd5b50610128610239366004610a7f565b610430565b34801561024a57600080fd5b50610128610259366004610a7f565b6104b0565b34801561026a57600080fd5b50610149610279366004610b20565b6104be565b61028833346104e9565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b6060600380546102ce90610b53565b80601f01602080910402602001604051908101604052809291908181526020018280546102fa90610b53565b80156103475780601f1061031c57610100808354040283529160200191610347565b820191906000526020600020905b81548152906001019060200180831161032a57829003601f168201915b5050505050905090565b60003361035f8185856105a8565b60019150505b92915050565b6000336103798582856106cd565b610384858585610747565b506001949350505050565b61039933826108eb565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2604051339082156108fc029083906000818181858888f193505050501580156103fb573d6000803e3d6000fd5b5050565b60003361035f81858561041283836104be565b61041c9190610b8d565b6105a8565b6060600480546102ce90610b53565b6000338161043e82866104be565b9050838110156104a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038482868684036105a8565b60003361035f818585610747565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661053f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161049a565b80600260008282546105519190610b8d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b03831661060a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161049a565b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161049a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006106d984846104be565b9050600019811461074157818110156107345760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161049a565b61074184848484036105a8565b50505050565b6001600160a01b0383166107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161049a565b6001600160a01b03821661080d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161049a565b6001600160a01b038316600090815260208190526040902054818110156108855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161049a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610741565b6001600160a01b03821661094b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161049a565b6001600160a01b038216600090815260208190526040902054818110156109bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161049a565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016106c0565b600060208083528351808285015260005b81811015610a4257858101830151858201604001528201610a26565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a7a57600080fd5b919050565b60008060408385031215610a9257600080fd5b610a9b83610a63565b946020939093013593505050565b600080600060608486031215610abe57600080fd5b610ac784610a63565b9250610ad560208501610a63565b9150604084013590509250925092565b600060208284031215610af757600080fd5b5035919050565b600060208284031215610b1057600080fd5b610b1982610a63565b9392505050565b60008060408385031215610b3357600080fd5b610b3c83610a63565b9150610b4a60208401610a63565b90509250929050565b600181811c90821680610b6757607f821691505b602082108103610b8757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036557634e487b7160e01b600052601160045260246000fdfea2646970667358221220bdae509ef9a2e012da78f2d3e91265a830f1b0b6efac76526bcb3e976886d95864736f6c63430008120033", } // ExampleWAVAXABI is the input ABI used to generate the binding from. diff --git a/contracts/README.md b/contracts/README.md index 043444af0..680476415 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -11,6 +11,10 @@ Interfaces that define the external functions for interacting with bridge contra ### `TeleporterTokenSource` An abstract implementation of `ITeleporterTokenBridge` for a bridge contract on the home chain with the asset to be bridged. Handles locking tokens to be sent to destination chains, as well as receiving bridge messages to either redeem tokens it holds as collateral (i.e unlock), or route them to another chain (i.e. "multi-hop"). In the case of a multi-hop transfer, the `TeleporterTokenSource` already has the collateral locked from when the tokens were originally bridged to the first destination chain, so it simply updates the accounting of the transferred balances to each respective destination. +It is intended for there to be a single `TeleporterTokenSource` implementation and instance per asset issued on one blockchain to be bridge to other chains. The single source contract instance supports arbitrarily many destinations on other blockchains. + +Note that the term "source" in reference to bridge contracts refers to the home chain of a given asset, where the collateral is locked to be bridged. It is unrelated to the source and destination chain of an individual Teleporter message. `TeleporterTokenSource` instances both send and receive Teleporter messages. + ### `ERC20Source` A concrete implementation of `TeleporterTokenSource` and `IERC20Bridge` that handles the locking and releasing of an ERC20 asset on the home chain. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in the source ERC20 asset that it facilitates the bridging of. @@ -24,11 +28,15 @@ All messages sent by `TeleporterTokenDestination` instances are sent to the spec `TeleporterTokenDestination` contracts allow for scaling token amounts, if the representative "wrapped" token is not a 1-to-1 equivalent of the backing asset. This token scaling can be used when the destination chain asset has a higher or lower denomincation than the source asset, such as allowing for a ERC20 source asset with a denomination of 6 to be used as the native EVM asset on a destination chain (with a denomination of 18). +Note that the term "destination" in reference to bridge contracts refers to a non-home chain of a given asset where a representative asset is minted, backed the collateral locked on the home (source) chain. It is unrelated to the destination of an individual Teleporter message. `TeleporterTokenDestination` instances both send and receive Teleporter messages. + ### `ERC20Destination` A concrete implementation of `TeleporterTokenDestination`, `IERC20Bridge`, and `IERC20` that handles the minting and burning of a destination chain asset. Note that the `ERC20Destination` contract _is_ the "wrapped" ERC20 implementation itself, which is why it takes the `tokenName`, `tokenSymbol`, and `tokenDecimals` in its constructor. All of the ERC20 interface implementations are inherited from the standard OpenZeppelin ERC20 implementation, and can be overriden in other implementations if desired. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid in kind, since the contract is an ERC20 token itself. ### `NativeTokenDestination` -A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, and `IWrappedNativeToken` that handles the minting and burning the native EVM on the destination chain using the native minter precompile. Deployments of this contract must be given the permission mint native coins in the chains configuration. Note that the `NativeTokenDestination` is also an implementation of `IWrappedNativeToken` itself, which is why the `symbol` must be provided in its constructor. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid using the wrapped native token that the contract implements. +A concrete implementation of `TeleporterTokenDestination`, `INativeTokenBridge`, and `IWrappedNativeToken` that handles the minting and burning the native EVM on the destination chain using the native minter precompile. Deployments of this contract must be given the permission mint native coins in the chains configuration. Note that the `NativeTokenDestination` is also an implementation of `IWrappedNativeToken` itself, which is why the `nativeAssetSymbol` must be provided in its constructor. The optional Teleporter message fees used to incentivize a relayer for messages sent by this contract are all paid using the wrapped native token that the contract implements. + +The [native minter precompile](https://docs.avax.network/build/subnet/upgrade/customize-a-subnet#minting-native-coins) must be configured to allow the contract address of the `NativeTokenDestination` instance to call `mintNativeCoin`. The correctness of a native token bridge implemented using `NativeTokenDestination` relies on no other accounts being allowed to call `mintNativeCoin`, which could result in the bridge becoming undercollateralized. Example initialization steps for a `NativeTokenDestination` instance are shown below. Since the native minter precompile does not provide an interface for burning the native EVM asset, the "burn" functionality is implemented by locking the native asset in the contract itself in an un-redeemable manner. The contract also provides a `reportBurnedTxFees` interface in order to burn the home chain collateral that should also be made un-redeemable to account for tokens burnt on the destination chain to pay for transaction fees. @@ -39,9 +47,8 @@ To account for the need to bootstrap the chain using a bridged asset as its nati 3. Bridge at least 100 source tokens from the home chain to the new blockchain. The first 100 tokens bridged, which are possibly moved in multiple independent transfers, will not be minted on the destination since they were pre-allocated in the genesis file. Instead, a `CollateralAdded` event will be emitted by the `NativeTokenDestination` contract. 4. Now that the `NativeTokenDestination` contract is fully collateralized, tokens can be moved normally in both directions across the bridge contracts. -The `totalSupply` implementation of `NativeTokenDestination` takes into account: +The `totalNativeAssetSupply` implementation of `NativeTokenDestination` takes into account: - the initial reserve imbalance - the number of native tokens that it has minted - the number of native tokens that have been burned to pay for transaction fees -- the number of native tokens "burned" to be bridged back to the home chain, which are locked in the `NativeTokenDestination` contract in perpetuity - +- the number of native tokens "burned" to be bridged back to the home chain, which are sent to a pre-defined `BURNED_FOR_BRIDGE_ADDRESS`. diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index c528aed78..d672153d1 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -28,7 +28,6 @@ import { SingleHopCallMessage } from "./interfaces/ITeleporterTokenBridge.sol"; import {ERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/ERC20.sol"; -import {IERC20} from "@openzeppelin/contracts@4.8.1/token/ERC20/IERC20.sol"; import {SendReentrancyGuard} from "./utils/SendReentrancyGuard.sol"; import {CallUtils} from "./utils/CallUtils.sol"; @@ -238,6 +237,20 @@ contract NativeTokenDestination is emit ReportBurnedTxFees({teleporterMessageID: messageID, feesBurned: burnedTxFees}); } + /** + * @dev See {IWrappedNativeToken-withdraw}. + * + * Note: {IWrappedNativeToken-withdraw} should not be confused with {TeleporterTokenDestination-_withdraw}. + * {IWrappedNativeToken-withdraw} is the external method to redeem a wrapped native token (ERC20) balance + * for the native token itself. {TeleporterTokenDestination-_withdraw} is the internal method used when + * processing bridge transfers. + */ + function withdraw(uint256 amount) external { + emit Withdrawal(msg.sender, amount); + _burn(msg.sender, amount); + payable(msg.sender).transfer(amount); + } + /** * @dev See {INativeTokenDestination-isCollateralized}. */ @@ -258,20 +271,6 @@ contract NativeTokenDestination is _mint(msg.sender, msg.value); } - /** - * @dev See {IWrappedNativeToken-withdraw}. - * - * Note: {IWrappedNativeToken-withdraw} should not be confused with {TeleporterTokenDestination-_withdraw}. - * {IWrappedNativeToken-withdraw} is the external method to redeem a wrapped native token (ERC20) balance - * for the native token itself. {TeleporterTokenDestination-_withdraw} is the internal method used when - * processing bridge transfers. - */ - function withdraw(uint256 amount) external { - emit Withdrawal(msg.sender, amount); - _burn(msg.sender, amount); - payable(msg.sender).transfer(amount); - } - /** * @dev See {INativeTokenDestination-totalNativeAssetSupply}. * diff --git a/contracts/src/mocks/ExampleWAVAX.sol b/contracts/src/mocks/ExampleWAVAX.sol index e2cbfd948..b22b2ec27 100644 --- a/contracts/src/mocks/ExampleWAVAX.sol +++ b/contracts/src/mocks/ExampleWAVAX.sol @@ -23,14 +23,14 @@ contract ExampleWAVAX is IWrappedNativeToken, ERC20 { deposit(); } - function deposit() public payable { - _mint(msg.sender, msg.value); - emit Deposit(msg.sender, msg.value); - } - function withdraw(uint256 amount) external { _burn(msg.sender, amount); emit Withdrawal(msg.sender, amount); payable(msg.sender).transfer(amount); } + + function deposit() public payable { + _mint(msg.sender, msg.value); + emit Deposit(msg.sender, msg.value); + } } From 1e90cfe29b4c970deb481ea2b4a3d660d3ad3524 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 18 Apr 2024 10:05:19 -0400 Subject: [PATCH 25/26] Make internal implementations virtual. Add comment --- abi-bindings/go/ERC20Destination/ERC20Destination.go | 2 +- abi-bindings/go/ERC20Source/ERC20Source.go | 2 +- .../NativeTokenDestination/NativeTokenDestination.go | 2 +- .../go/NativeTokenSource/NativeTokenSource.go | 2 +- contracts/src/ERC20Destination.sol | 11 ++++++----- contracts/src/ERC20Source.sol | 6 +++--- contracts/src/NativeTokenDestination.sol | 8 ++++---- contracts/src/NativeTokenSource.sol | 6 +++--- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/abi-bindings/go/ERC20Destination/ERC20Destination.go b/abi-bindings/go/ERC20Destination/ERC20Destination.go index 477275857..0f38b301f 100644 --- a/abi-bindings/go/ERC20Destination/ERC20Destination.go +++ b/abi-bindings/go/ERC20Destination/ERC20Destination.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20DestinationMetaData contains all meta data concerning the ERC20Destination contract. var ERC20DestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101606040523480156200001257600080fd5b50604051620040de380380620040de833981016040819052620000359162000628565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006f0565b60025550620001573362000417565b620001628162000469565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006f0565b60a052836200024c5760405162461bcd60e51b81526020600482015260356024820152600080516020620040be83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b81526020600482015260356024820152600080516020620040be83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003b15760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003d082600a6200081f565b610100521515610120525060089350620003f19250859150839050620008c6565b506009620004008282620008c6565b50505060ff16610140525062000992945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000473620004e8565b6001600160a01b038116620004da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e58162000417565b50565b6003546001600160a01b03163314620005445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058b57600080fd5b81516001600160401b0380821115620005a857620005a862000563565b604051601f8301601f19908116603f01168101908282118183101715620005d357620005d362000563565b81604052838152602092508683858801011115620005f057600080fd5b600091505b83821015620006145785820183015181830184015290820190620005f5565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064457600080fd5b6200064f8862000546565b96506200065f6020890162000546565b955060408801519450620006766060890162000546565b60808901519094506001600160401b03808211156200069457600080fd5b620006a28b838c0162000579565b945060a08a0151915080821115620006b957600080fd5b50620006c88a828b0162000579565b92505060c088015160ff81168114620006e057600080fd5b8091505092959891949750929550565b6000602082840312156200070357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007615781600019048211156200074557620007456200070a565b808516156200075357918102915b93841c939080029062000725565b509250929050565b6000826200077a5750600162000819565b81620007895750600062000819565b8160018114620007a25760028114620007ad57620007cd565b600191505062000819565b60ff841115620007c157620007c16200070a565b50506001821b62000819565b5060208310610133831016604e8410600b8410161715620007f2575081810a62000819565b620007fe838362000720565b80600019048211156200081557620008156200070a565b0290505b92915050565b60006200083060ff84168362000769565b9392505050565b600181811c908216806200084c57607f821691505b6020821081036200086d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c157600081815260208120601f850160051c810160208610156200089c5750805b601f850160051c820191505b81811015620008bd57828155600101620008a8565b5050505b505050565b81516001600160401b03811115620008e257620008e262000563565b620008fa81620008f3845462000837565b8462000873565b602080601f831160018114620009325760008415620009195750858301515b600019600386901b1c1916600185901b178555620008bd565b600085815260208120601f198616915b82811015620009635788860151825594840194600190910190840162000942565b5085821015620009825787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161365362000a6b600039600061031101526000818161029901526108f70152600081816104580152818161092201526109530152600081816104fa0152818161109d015281816113430152818161191201528181611b5e0152611ce10152600081816102d30152818161106d0152818161131d015281816118eb01528181611b380152611c6b015260008181610492015281816111db01526119ee01526000818161025a0152818161099401528181611464015261235c01526136536000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104bc578063f2fde38b146104cf578063f3f981d8146104e2578063f5ea0603146104f557600080fd5b8063ba3f5a1214610453578063c868efaa1461047a578063d127dc9b1461048d578063d2cc7a70146104b457600080fd5b8063a457c2d7116100de578063a457c2d714610407578063a9059cbb1461041a578063b51cff1b1461042d578063b94485871461044057600080fd5b8063715018a6146103ba5780638da5cb5b146103c257806395d89b41146103d357806397314297146103db57600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e14610361578063525975e6146103745780635eb995141461037e57806370a082311461039157600080fd5b80632b0d8f18146102f5578063313ce5671461030a57806332709bc11461033b578063395093511461034e57600080fd5b80631a7f5bec116101c35780631a7f5bec146102555780631ce220751461029457806323b872dd146102bb57806329b7b3fd146102ce57600080fd5b806306fdde03146101f5578063095ea7b31461021357806315beb59f1461023657806318160ddd1461024d575b600080fd5b6101fd61051c565b60405161020a9190612a65565b60405180910390f35b610226610221366004612a98565b6105ae565b604051901515815260200161020a565b61023f61213481565b60405190815260200161020a565b60075461023f565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b6102266102c9366004612ac4565b6105c8565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610303366004612b05565b6105ec565b005b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020a565b610308610349366004612b22565b6106f1565b61022661035c366004612a98565b6106ff565b61030861036f366004612b05565b610721565b61023f62035b6081565b61030861038c366004612b53565b61081e565b61023f61039f366004612b05565b6001600160a01b031660009081526005602052604090205490565b610308610832565b6003546001600160a01b031661027c565b6101fd610846565b6102266103e9366004612b05565b6001600160a01b031660009081526001602052604090205460ff1690565b610226610415366004612a98565b610855565b610226610428366004612a98565b6108d0565b61030861043b366004612b6c565b6108de565b61023f61044e366004612bb7565b6108f0565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610488366004612be7565b61097f565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461023f565b61023f6104ca366004612c70565b610b49565b6103086104dd366004612b05565b610b74565b61023f6104f0366004612b53565b610bea565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b60606008805461052b90612c9e565b80601f016020809104026020016040519081016040528092919081815260200182805461055790612c9e565b80156105a45780601f10610579576101008083540402835291602001916105a4565b820191906000526020600020905b81548152906001019060200180831161058757829003601f168201915b5050505050905090565b6000336105bc818585610c13565b60019150505b92915050565b6000336105d6858285610d37565b6105e1858585610dab565b506001949350505050565b6105f4610f56565b6001600160a01b0381166106235760405162461bcd60e51b815260040161061a90612cd8565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161061a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106fb8282610f5e565b5050565b6000336105bc8185856107128383610b49565b61071c9190612d3c565b610c13565b610729610f56565b6001600160a01b03811661074f5760405162461bcd60e51b815260040161061a90612cd8565b6001600160a01b03811660009081526001602052604090205460ff166107c95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161061a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610826610f56565b61082f81611460565b50565b61083a611600565b610844600061165a565b565b60606009805461052b90612c9e565b600033816108638286610b49565b9050838110156108c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161061a565b6105e18286868403610c13565b6000336105bc818585610dab565b6106fb6108ea83612e3e565b826116ac565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361094e576109477f000000000000000000000000000000000000000000000000000000000000000084612eec565b90506105c2565b6109787f000000000000000000000000000000000000000000000000000000000000000084612f19565b9392505050565b610987611c10565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190612f2d565b1015610a895760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161061a565b610a92336103e9565b15610af85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161061a565b610b39848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c6992505050565b610b436001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b7c611600565b6001600160a01b038116610be15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061a565b61082f8161165a565b600080610bf8602084612f19565b9050610c05602084612f46565b156105c25761097881612f5a565b6001600160a01b038316610c755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161061a565b6001600160a01b038216610cd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161061a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610d438484610b49565b90506000198114610b435781811015610d9e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161061a565b610b438484848403610c13565b6001600160a01b038316610e0f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161061a565b6001600160a01b038216610e715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161061a565b6001600160a01b03831660009081526005602052604090205481811015610ee95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161061a565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f499086815260200190565b60405180910390a3610b43565b610844611600565b600160045414610f805760405162461bcd60e51b815260040161061a90612f73565b60026004556000610f976060840160408501612b05565b6001600160a01b031603610ff65760405162461bcd60e51b815260206004820152603260248201526000805160206135de83398151915260448201527120726563697069656e74206164647265737360701b606482015260840161061a565b60008260a001351161101a5760405162461bcd60e51b815260040161061a90612fb7565b61103f823561102f6040850160208601612b05565b8385606001358660800135611e84565b90506110666040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036111d9576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110cd6040860160208701612b05565b6001600160a01b0316146110f35760405162461bcd60e51b815260040161061a90612ff8565b6080840135156111605760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161061a565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906111979190612b05565b6001600160a01b031690526040516111c0919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061130b565b7f000000000000000000000000000000000000000000000000000000000000000084350361123857306112126040860160208701612b05565b6001600160a01b0316036112385760405162461bcd60e51b815260040161061a90612ff8565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906112799190612b05565b6001600160a01b031681526020016112976060890160408a01612b05565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b600061140e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d4f565b6040519080825280602002602001820160405280156113e0578160200160208202803683370190505b508152602001856040516020016113f79190613059565b60405160208183030381529060405281525061207e565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161144c9291906130a8565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190612f2d565b600254909150818311156115545760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161061a565b8083116115c95760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161061a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116ce5760405162461bcd60e51b815260040161061a90612f73565b600260045560408201516001600160a01b03166117415760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161061a565b60008260800151116117655760405162461bcd60e51b815260040161061a90612fb7565b60008260a00151116117c45760405162461bcd60e51b815260206004820152603460248201526000805160206135de833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161061a565b81608001518260a001511061182f5760405162461bcd60e51b815260206004820152603760248201526000805160206135fe83398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161061a565b60c08201516001600160a01b031661189d5760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161061a565b6118bb82600001518360200151838560e00151866101000151611e84565b90506118e26040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036119ea577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146119655760405162461bcd60e51b815260040161061a90612ff8565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016119d1919061310b565b6040516020818303038152906040528152509150611b26565b83517f00000000000000000000000000000000000000000000000000000000000000009003611a4857306001600160a01b031684602001516001600160a01b031603611a485760405162461bcd60e51b815260040161061a90612ff8565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611ae7919061315d565b6040516020818303038152906040528152509150612134611b0c856060015151610bea565b611b169190612eec565b611b239062035b60612d3c565b90505b6000611bd26040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d4f565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e66562878760405161144c9291906131ed565b600260005403611c625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161061a565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611cdf5760405162461bcd60e51b815260206004820152603060248201526000805160206135fe83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161061a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d745760405162461bcd60e51b815260206004820152603860248201526000805160206135fe83398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161061a565b600081806020019051810190611d8a91906132db565b90506000611d9d826020015160016108f0565b9050600082516003811115611db457611db4613043565b03611de95760008260400151806020019051810190611dd3919061337f565b9050611de381600001518361219d565b50611e78565b600182516003811115611dfe57611dfe613043565b03611e295760008260400151806020019051810190611e1d91906133cb565b9050611de381836121ea565b60405162461bcd60e51b815260206004820152603060248201526000805160206135fe83398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161061a565b5050505050565b505050565b600085611ee75760405162461bcd60e51b815260206004820152603a60248201526000805160206135de83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161061a565b6001600160a01b038516611f515760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161061a565b611f5a84612331565b9350611f668284612d3c565b8411611fda5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161061a565b611fe48385613482565b9350611fef8461234d565b6000611ffc8560006108f0565b9050600081116120745760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161061a565b9695505050505050565b600080612089612357565b6040840151602001519091501561212e576040830151516001600160a01b031661210b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161061a565b60408301516020810151905161212e916001600160a01b0390911690839061246b565b604051630624488560e41b81526001600160a01b0382169063624488509061215a9086906004016134d9565b6020604051808303816000875af1158015612179573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190612f2d565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121d891815260200190565b60405180910390a26106fb828261253f565b6121f4308261253f565b61220330836000015183610c13565b60003082846020015160405160240161221e93929190613560565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161225e919084612600565b90506000612270308660000151610b49565b90506122823086600001516000610c13565b81156122d45784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122c791815260200190565b60405180910390a261231c565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161231391815260200190565b60405180910390a25b8015611e7857611e7830866060015183610dab565b600061233e333084610d37565b612349333084610dab565b5090565b61082f3082612617565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190613587565b9050612400816001600160a01b031660009081526001602052604090205460ff1690565b156124665760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161061a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e09190612f2d565b6124ea9190612d3c565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b4390859061274b565b6001600160a01b0382166125955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161061a565b80600760008282546125a79190612d3c565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061260f846000858561281d565b949350505050565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161061a565b6001600160a01b038216600090815260056020526040902054818110156126eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161061a565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006127a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128f29092919063ffffffff16565b805190915015611e7f57808060200190518101906127be91906135a4565b611e7f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161061a565b6000845a101561286f5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161061a565b834710156128bf5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161061a565b826001600160a01b03163b6000036128d95750600061260f565b600080600084516020860188888bf19695505050505050565b606061260f848460008585600080866001600160a01b0316858760405161291991906135c1565b60006040518083038185875af1925050503d8060008114612956576040519150601f19603f3d011682016040523d82523d6000602084013e61295b565b606091505b509150915061296c87838387612977565b979650505050505050565b606083156129e65782516000036129df576001600160a01b0385163b6129df5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161061a565b508161260f565b61260f83838151156129fb5781518083602001fd5b8060405162461bcd60e51b815260040161061a9190612a65565b60005b83811015612a30578181015183820152602001612a18565b50506000910152565b60008151808452612a51816020860160208601612a15565b601f01601f19169290920160200192915050565b6020815260006109786020830184612a39565b6001600160a01b038116811461082f57600080fd5b803561246681612a78565b60008060408385031215612aab57600080fd5b8235612ab681612a78565b946020939093013593505050565b600080600060608486031215612ad957600080fd5b8335612ae481612a78565b92506020840135612af481612a78565b929592945050506040919091013590565b600060208284031215612b1757600080fd5b813561097881612a78565b60008082840360e0811215612b3657600080fd5b60c0811215612b4457600080fd5b50919360c08501359350915050565b600060208284031215612b6557600080fd5b5035919050565b60008060408385031215612b7f57600080fd5b823567ffffffffffffffff811115612b9657600080fd5b83016101208186031215612ab657600080fd5b801515811461082f57600080fd5b60008060408385031215612bca57600080fd5b823591506020830135612bdc81612ba9565b809150509250929050565b60008060008060608587031215612bfd57600080fd5b843593506020850135612c0f81612a78565b9250604085013567ffffffffffffffff80821115612c2c57600080fd5b818701915087601f830112612c4057600080fd5b813581811115612c4f57600080fd5b886020828501011115612c6157600080fd5b95989497505060200194505050565b60008060408385031215612c8357600080fd5b8235612c8e81612a78565b91506020830135612bdc81612a78565b600181811c90821680612cb257607f821691505b602082108103612cd257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105c2576105c2612d26565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d8957612d89612d4f565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612db857612db8612d4f565b604052919050565b600067ffffffffffffffff821115612dda57612dda612d4f565b50601f01601f191660200190565b600082601f830112612df957600080fd5b8135612e0c612e0782612dc0565b612d8f565b818152846020838601011115612e2157600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e5157600080fd5b612e59612d65565b82358152612e6960208401612a8d565b6020820152612e7a60408401612a8d565b6040820152606083013567ffffffffffffffff811115612e9957600080fd5b612ea536828601612de8565b6060830152506080830135608082015260a083013560a0820152612ecb60c08401612a8d565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105c2576105c2612d26565b634e487b7160e01b600052601260045260246000fd5b600082612f2857612f28612f03565b500490565b600060208284031215612f3f57600080fd5b5051919050565b600082612f5557612f55612f03565b500690565b600060018201612f6c57612f6c612d26565b5060010190565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b60208082526033908201526000805160206135de833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135fe83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061307f57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261260f6080840182612a39565b8235815260e0810160208401356130be81612a78565b6001600160a01b0390811660208401526040850135906130dd82612a78565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b0380845116602084015260208401516080604085015261313a60a0850182612a39565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b038082166040850152806040860151166060850152505060608301516101008060808501526131a8610120850183612a39565b9150608085015160a085015260a08501516131ce60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161321460608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613245610160850183612a39565b9150608086015160c085015260a086015160e085015260c0860151610100613277818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126132a757600080fd5b81516132b5612e0782612dc0565b8181528460208386010111156132ca57600080fd5b61260f826020830160208701612a15565b6000602082840312156132ed57600080fd5b815167ffffffffffffffff8082111561330557600080fd5b908301906060828603121561331957600080fd5b60405160608101818110838211171561333457613334612d4f565b60405282516004811061334657600080fd5b81526020838101519082015260408301518281111561336457600080fd5b61337087828601613296565b60408301525095945050505050565b60006020828403121561339157600080fd5b6040516020810181811067ffffffffffffffff821117156133b4576133b4612d4f565b60405282516133c281612a78565b81529392505050565b6000602082840312156133dd57600080fd5b815167ffffffffffffffff808211156133f557600080fd5b908301906080828603121561340957600080fd5b60405160808101818110838211171561342457613424612d4f565b604052825161343281612a78565b815260208301518281111561344657600080fd5b61345287828601613296565b602083015250604083015160408201526060830151925061347283612a78565b6060810192909252509392505050565b818103818111156105c2576105c2612d26565b600081518084526020808501945080840160005b838110156134ce5781516001600160a01b0316875295820195908201906001016134a9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261353a610100840182613495565b905060a0840151601f198483030160e08501526135578282612a39565b95945050505050565b60018060a01b03841681528260208201526060604082015260006135576060830184612a39565b60006020828403121561359957600080fd5b815161097881612a78565b6000602082840312156135b657600080fd5b815161097881612ba9565b600082516135d3818460208701612a15565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a264697066735822122003a79ac99828f2b782781127f862ef1399cffa34cb749a0f18a708b8575975d164736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101606040523480156200001257600080fd5b50604051620040de380380620040de833981016040819052620000359162000628565b828288888888600080858581600160008190555060006001600160a01b0316816001600160a01b031603620000d75760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620006f0565b60025550620001573362000417565b620001628162000469565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e59190620006f0565b60a052836200024c5760405162461bcd60e51b81526020600482015260356024820152600080516020620040be83398151915260448201527f20736f7572636520626c6f636b636861696e20494400000000000000000000006064820152608401620000ce565b60a0518403620002d45760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a401620000ce565b6001600160a01b038316620003415760405162461bcd60e51b81526020600482015260356024820152600080516020620040be83398151915260448201527f20746f6b656e20736f75726365206164647265737300000000000000000000006064820152608401620000ce565b60128260ff161115620003b15760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b6064820152608401620000ce565b60c08490526001600160a01b03831660e052620003d082600a6200081f565b610100521515610120525060089350620003f19250859150839050620008c6565b506009620004008282620008c6565b50505060ff16610140525062000992945050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000473620004e8565b6001600160a01b038116620004da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ce565b620004e58162000417565b50565b6003546001600160a01b03163314620005445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ce565b565b80516001600160a01b03811681146200055e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200058b57600080fd5b81516001600160401b0380821115620005a857620005a862000563565b604051601f8301601f19908116603f01168101908282118183101715620005d357620005d362000563565b81604052838152602092508683858801011115620005f057600080fd5b600091505b83821015620006145785820183015181830184015290820190620005f5565b600093810190920192909252949350505050565b600080600080600080600060e0888a0312156200064457600080fd5b6200064f8862000546565b96506200065f6020890162000546565b955060408801519450620006766060890162000546565b60808901519094506001600160401b03808211156200069457600080fd5b620006a28b838c0162000579565b945060a08a0151915080821115620006b957600080fd5b50620006c88a828b0162000579565b92505060c088015160ff81168114620006e057600080fd5b8091505092959891949750929550565b6000602082840312156200070357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007615781600019048211156200074557620007456200070a565b808516156200075357918102915b93841c939080029062000725565b509250929050565b6000826200077a5750600162000819565b81620007895750600062000819565b8160018114620007a25760028114620007ad57620007cd565b600191505062000819565b60ff841115620007c157620007c16200070a565b50506001821b62000819565b5060208310610133831016604e8410600b8410161715620007f2575081810a62000819565b620007fe838362000720565b80600019048211156200081557620008156200070a565b0290505b92915050565b60006200083060ff84168362000769565b9392505050565b600181811c908216806200084c57607f821691505b6020821081036200086d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008c157600081815260208120601f850160051c810160208610156200089c5750805b601f850160051c820191505b81811015620008bd57828155600101620008a8565b5050505b505050565b81516001600160401b03811115620008e257620008e262000563565b620008fa81620008f3845462000837565b8462000873565b602080601f831160018114620009325760008415620009195750858301515b600019600386901b1c1916600185901b178555620008bd565b600085815260208120601f198616915b82811015620009635788860151825594840194600190910190840162000942565b5085821015620009825787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161365362000a6b600039600061031101526000818161029901526108f70152600081816104580152818161092201526109530152600081816104fa0152818161109d015281816113430152818161191201528181611b5e0152611ce10152600081816102d30152818161106d0152818161131d015281816118eb01528181611b380152611c6b015260008181610492015281816111db01526119ee01526000818161025a0152818161099401528181611464015261235c01526136536000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063ba3f5a12116100a2578063dd62ed3e11610071578063dd62ed3e146104bc578063f2fde38b146104cf578063f3f981d8146104e2578063f5ea0603146104f557600080fd5b8063ba3f5a1214610453578063c868efaa1461047a578063d127dc9b1461048d578063d2cc7a70146104b457600080fd5b8063a457c2d7116100de578063a457c2d714610407578063a9059cbb1461041a578063b51cff1b1461042d578063b94485871461044057600080fd5b8063715018a6146103ba5780638da5cb5b146103c257806395d89b41146103d357806397314297146103db57600080fd5b80632b0d8f18116101875780634511243e116101565780634511243e14610361578063525975e6146103745780635eb995141461037e57806370a082311461039157600080fd5b80632b0d8f18146102f5578063313ce5671461030a57806332709bc11461033b578063395093511461034e57600080fd5b80631a7f5bec116101c35780631a7f5bec146102555780631ce220751461029457806323b872dd146102bb57806329b7b3fd146102ce57600080fd5b806306fdde03146101f5578063095ea7b31461021357806315beb59f1461023657806318160ddd1461024d575b600080fd5b6101fd61051c565b60405161020a9190612a65565b60405180910390f35b610226610221366004612a98565b6105ae565b604051901515815260200161020a565b61023f61213481565b60405190815260200161020a565b60075461023f565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b6102266102c9366004612ac4565b6105c8565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610303366004612b05565b6105ec565b005b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161020a565b610308610349366004612b22565b6106f1565b61022661035c366004612a98565b6106ff565b61030861036f366004612b05565b610721565b61023f62035b6081565b61030861038c366004612b53565b61081e565b61023f61039f366004612b05565b6001600160a01b031660009081526005602052604090205490565b610308610832565b6003546001600160a01b031661027c565b6101fd610846565b6102266103e9366004612b05565b6001600160a01b031660009081526001602052604090205460ff1690565b610226610415366004612a98565b610855565b610226610428366004612a98565b6108d0565b61030861043b366004612b6c565b6108de565b61023f61044e366004612bb7565b6108f0565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b610308610488366004612be7565b61097f565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b60025461023f565b61023f6104ca366004612c70565b610b49565b6103086104dd366004612b05565b610b74565b61023f6104f0366004612b53565b610bea565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b60606008805461052b90612c9e565b80601f016020809104026020016040519081016040528092919081815260200182805461055790612c9e565b80156105a45780601f10610579576101008083540402835291602001916105a4565b820191906000526020600020905b81548152906001019060200180831161058757829003601f168201915b5050505050905090565b6000336105bc818585610c13565b60019150505b92915050565b6000336105d6858285610d37565b6105e1858585610dab565b506001949350505050565b6105f4610f56565b6001600160a01b0381166106235760405162461bcd60e51b815260040161061a90612cd8565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156106a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161061a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6106fb8282610f5e565b5050565b6000336105bc8185856107128383610b49565b61071c9190612d3c565b610c13565b610729610f56565b6001600160a01b03811661074f5760405162461bcd60e51b815260040161061a90612cd8565b6001600160a01b03811660009081526001602052604090205460ff166107c95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161061a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610826610f56565b61082f81611460565b50565b61083a611600565b610844600061165a565b565b60606009805461052b90612c9e565b600033816108638286610b49565b9050838110156108c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161061a565b6105e18286868403610c13565b6000336105bc818585610dab565b6106fb6108ea83612e3e565b826116ac565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361094e576109477f000000000000000000000000000000000000000000000000000000000000000084612eec565b90506105c2565b6109787f000000000000000000000000000000000000000000000000000000000000000084612f19565b9392505050565b610987611c10565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190612f2d565b1015610a895760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161061a565b610a92336103e9565b15610af85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161061a565b610b39848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c6992505050565b610b436001600055565b50505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b610b7c611600565b6001600160a01b038116610be15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061a565b61082f8161165a565b600080610bf8602084612f19565b9050610c05602084612f46565b156105c25761097881612f5a565b6001600160a01b038316610c755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161061a565b6001600160a01b038216610cd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161061a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610d438484610b49565b90506000198114610b435781811015610d9e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161061a565b610b438484848403610c13565b6001600160a01b038316610e0f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161061a565b6001600160a01b038216610e715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161061a565b6001600160a01b03831660009081526005602052604090205481811015610ee95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161061a565b6001600160a01b0380851660008181526005602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f499086815260200190565b60405180910390a3610b43565b610844611600565b600160045414610f805760405162461bcd60e51b815260040161061a90612f73565b60026004556000610f976060840160408501612b05565b6001600160a01b031603610ff65760405162461bcd60e51b815260206004820152603260248201526000805160206135de83398151915260448201527120726563697069656e74206164647265737360701b606482015260840161061a565b60008260a001351161101a5760405162461bcd60e51b815260040161061a90612fb7565b61103f823561102f6040850160208601612b05565b8385606001358660800135611e84565b90506110666040805160608101909152806000815260200160008152602001606081525090565b60a08301357f00000000000000000000000000000000000000000000000000000000000000008435036111d9576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166110cd6040860160208701612b05565b6001600160a01b0316146110f35760405162461bcd60e51b815260040161061a90612ff8565b6080840135156111605760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161061a565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906111979190612b05565b6001600160a01b031690526040516111c0919060200190516001600160a01b0316815260200190565b604051602081830303815290604052815250915061130b565b7f000000000000000000000000000000000000000000000000000000000000000084350361123857306112126040860160208701612b05565b6001600160a01b0316036112385760405162461bcd60e51b815260040161061a90612ff8565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906112799190612b05565b6001600160a01b031681526020016112976060890160408a01612b05565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b600061140e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d4f565b6040519080825280602002602001820160405280156113e0578160200160208202803683370190505b508152602001856040516020016113f79190613059565b60405160208183030381529060405281525061207e565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b878760405161144c9291906130a8565b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190612f2d565b600254909150818311156115545760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161061a565b8083116115c95760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161061a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146108445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600454146116ce5760405162461bcd60e51b815260040161061a90612f73565b600260045560408201516001600160a01b03166117415760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161061a565b60008260800151116117655760405162461bcd60e51b815260040161061a90612fb7565b60008260a00151116117c45760405162461bcd60e51b815260206004820152603460248201526000805160206135de833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161061a565b81608001518260a001511061182f5760405162461bcd60e51b815260206004820152603760248201526000805160206135fe83398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161061a565b60c08201516001600160a01b031661189d5760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161061a565b6118bb82600001518360200151838560e00151866101000151611e84565b90506118e26040805160608101909152806000815260200160008152602001606081525090565b608083015183517f000000000000000000000000000000000000000000000000000000000000000090036119ea577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146119655760405162461bcd60e51b815260040161061a90612ff8565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016119d1919061310b565b6040516020818303038152906040528152509150611b26565b83517f00000000000000000000000000000000000000000000000000000000000000009003611a4857306001600160a01b031684602001516001600160a01b031603611a485760405162461bcd60e51b815260040161061a90612ff8565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815260200187608001518152602001876101000151815250604051602001611ae7919061315d565b6040516020818303038152906040528152509150612134611b0c856060015151610bea565b611b169190612eec565b611b239062035b60612d3c565b90505b6000611bd26040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff8111156113b7576113b7612d4f565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e66562878760405161144c9291906131ed565b600260005403611c625760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161061a565b6002600055565b7f00000000000000000000000000000000000000000000000000000000000000008314611cdf5760405162461bcd60e51b815260206004820152603060248201526000805160206135fe83398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161061a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d745760405162461bcd60e51b815260206004820152603860248201526000805160206135fe83398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161061a565b600081806020019051810190611d8a91906132db565b90506000611d9d826020015160016108f0565b9050600082516003811115611db457611db4613043565b03611de95760008260400151806020019051810190611dd3919061337f565b9050611de381600001518361219d565b50611e78565b600182516003811115611dfe57611dfe613043565b03611e295760008260400151806020019051810190611e1d91906133cb565b9050611de381836121ea565b60405162461bcd60e51b815260206004820152603060248201526000805160206135fe83398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161061a565b5050505050565b505050565b600085611ee75760405162461bcd60e51b815260206004820152603a60248201526000805160206135de83398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161061a565b6001600160a01b038516611f515760405162461bcd60e51b815260206004820152603b60248201526000805160206135de83398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161061a565b611f5a84612331565b9350611f668284612d3c565b8411611fda5760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161061a565b611fe48385613482565b9350611fef8461234d565b6000611ffc8560006108f0565b9050600081116120745760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161061a565b9695505050505050565b600080612089612357565b6040840151602001519091501561212e576040830151516001600160a01b031661210b5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161061a565b60408301516020810151905161212e916001600160a01b0390911690839061246b565b604051630624488560e41b81526001600160a01b0382169063624488509061215a9086906004016134d9565b6020604051808303816000875af1158015612179573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190612f2d565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516121d891815260200190565b60405180910390a26106fb828261253f565b6121f4308261253f565b61220330836000015183610c13565b60003082846020015160405160240161221e93929190613560565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161225e919084612600565b90506000612270308660000151610b49565b90506122823086600001516000610c13565b81156122d45784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff4856040516122c791815260200190565b60405180910390a261231c565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161231391815260200190565b60405180910390a25b8015611e7857611e7830866060015183610dab565b600061233e333084610d37565b612349333084610dab565b5090565b61082f3082612617565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190613587565b9050612400816001600160a01b031660009081526001602052604090205460ff1690565b156124665760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161061a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156124bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e09190612f2d565b6124ea9190612d3c565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610b4390859061274b565b6001600160a01b0382166125955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161061a565b80600760008282546125a79190612d3c565b90915550506001600160a01b0382166000818152600560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061260f846000858561281d565b949350505050565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161061a565b6001600160a01b038216600090815260056020526040902054818110156126eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161061a565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006127a0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128f29092919063ffffffff16565b805190915015611e7f57808060200190518101906127be91906135a4565b611e7f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161061a565b6000845a101561286f5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161061a565b834710156128bf5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161061a565b826001600160a01b03163b6000036128d95750600061260f565b600080600084516020860188888bf19695505050505050565b606061260f848460008585600080866001600160a01b0316858760405161291991906135c1565b60006040518083038185875af1925050503d8060008114612956576040519150601f19603f3d011682016040523d82523d6000602084013e61295b565b606091505b509150915061296c87838387612977565b979650505050505050565b606083156129e65782516000036129df576001600160a01b0385163b6129df5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161061a565b508161260f565b61260f83838151156129fb5781518083602001fd5b8060405162461bcd60e51b815260040161061a9190612a65565b60005b83811015612a30578181015183820152602001612a18565b50506000910152565b60008151808452612a51816020860160208601612a15565b601f01601f19169290920160200192915050565b6020815260006109786020830184612a39565b6001600160a01b038116811461082f57600080fd5b803561246681612a78565b60008060408385031215612aab57600080fd5b8235612ab681612a78565b946020939093013593505050565b600080600060608486031215612ad957600080fd5b8335612ae481612a78565b92506020840135612af481612a78565b929592945050506040919091013590565b600060208284031215612b1757600080fd5b813561097881612a78565b60008082840360e0811215612b3657600080fd5b60c0811215612b4457600080fd5b50919360c08501359350915050565b600060208284031215612b6557600080fd5b5035919050565b60008060408385031215612b7f57600080fd5b823567ffffffffffffffff811115612b9657600080fd5b83016101208186031215612ab657600080fd5b801515811461082f57600080fd5b60008060408385031215612bca57600080fd5b823591506020830135612bdc81612ba9565b809150509250929050565b60008060008060608587031215612bfd57600080fd5b843593506020850135612c0f81612a78565b9250604085013567ffffffffffffffff80821115612c2c57600080fd5b818701915087601f830112612c4057600080fd5b813581811115612c4f57600080fd5b886020828501011115612c6157600080fd5b95989497505060200194505050565b60008060408385031215612c8357600080fd5b8235612c8e81612a78565b91506020830135612bdc81612a78565b600181811c90821680612cb257607f821691505b602082108103612cd257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105c2576105c2612d26565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715612d8957612d89612d4f565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612db857612db8612d4f565b604052919050565b600067ffffffffffffffff821115612dda57612dda612d4f565b50601f01601f191660200190565b600082601f830112612df957600080fd5b8135612e0c612e0782612dc0565b612d8f565b818152846020838601011115612e2157600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215612e5157600080fd5b612e59612d65565b82358152612e6960208401612a8d565b6020820152612e7a60408401612a8d565b6040820152606083013567ffffffffffffffff811115612e9957600080fd5b612ea536828601612de8565b6060830152506080830135608082015260a083013560a0820152612ecb60c08401612a8d565b60c082015260e0838101359082015261010092830135928101929092525090565b80820281158282048414176105c2576105c2612d26565b634e487b7160e01b600052601260045260246000fd5b600082612f2857612f28612f03565b500490565b600060208284031215612f3f57600080fd5b5051919050565b600082612f5557612f55612f03565b500690565b600060018201612f6c57612f6c612d26565b5060010190565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b60208082526033908201526000805160206135de833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e908201526000805160206135fe83398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208152600082516004811061307f57634e487b7160e01b600052602160045260246000fd5b8060208401525060208301516040830152604083015160608084015261260f6080840182612a39565b8235815260e0810160208401356130be81612a78565b6001600160a01b0390811660208401526040850135906130dd82612a78565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b0380845116602084015260208401516080604085015261313a60a0850182612a39565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b038082166040850152806040860151166060850152505060608301516101008060808501526131a8610120850183612a39565b9150608085015160a085015260a08501516131ce60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b60408152825160408201526000602084015161321460608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613245610160850183612a39565b9150608086015160c085015260a086015160e085015260c0860151610100613277818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126132a757600080fd5b81516132b5612e0782612dc0565b8181528460208386010111156132ca57600080fd5b61260f826020830160208701612a15565b6000602082840312156132ed57600080fd5b815167ffffffffffffffff8082111561330557600080fd5b908301906060828603121561331957600080fd5b60405160608101818110838211171561333457613334612d4f565b60405282516004811061334657600080fd5b81526020838101519082015260408301518281111561336457600080fd5b61337087828601613296565b60408301525095945050505050565b60006020828403121561339157600080fd5b6040516020810181811067ffffffffffffffff821117156133b4576133b4612d4f565b60405282516133c281612a78565b81529392505050565b6000602082840312156133dd57600080fd5b815167ffffffffffffffff808211156133f557600080fd5b908301906080828603121561340957600080fd5b60405160808101818110838211171561342457613424612d4f565b604052825161343281612a78565b815260208301518281111561344657600080fd5b61345287828601613296565b602083015250604083015160408201526060830151925061347283612a78565b6060810192909252509392505050565b818103818111156105c2576105c2612d26565b600081518084526020808501945080840160005b838110156134ce5781516001600160a01b0316875295820195908201906001016134a9565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c084015261353a610100840182613495565b905060a0840151601f198483030160e08501526135578282612a39565b95945050505050565b60018060a01b03841681528260208201526060604082015260006135576060830184612a39565b60006020828403121561359957600080fd5b815161097881612a78565b6000602082840312156135b657600080fd5b815161097881612ba9565b600082516135d3818460208701612a15565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212201bfdafe385b5f1d89416fc2d54685db7c4d1c6afd5a47a95700434cfbf814dc864736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // ERC20DestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/ERC20Source/ERC20Source.go b/abi-bindings/go/ERC20Source/ERC20Source.go index 4eb0acd75..b1612551f 100644 --- a/abi-bindings/go/ERC20Source/ERC20Source.go +++ b/abi-bindings/go/ERC20Source/ERC20Source.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // ERC20SourceMetaData contains all meta data concerning the ERC20Source contract. var ERC20SourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b50604051620031ff380380620031ff8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d59620004a6600039600081816102b90152818161176d01528181611799015281816117c70152818161186b015281816118df015281816119bd01526119eb01526000818161023d0152818161095a0152610fee01526000818161027701526114240152600081816101480152818161054c01528181610aa40152611a1b0152612d596000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b6101306101133660046121fa565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019561019036600461222a565b6102db565b005b6101956101a5366004612247565b6103e0565b6101956101b836600461222a565b6103fe565b6101956101cb366004612278565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f736600461222a565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612291565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122db565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af36600461222a565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b815260040161030990612363565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f236849003840184612443565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b815260040161030990612363565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f8361254b565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da91906125f8565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b815260040161030990612655565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb83600001518460200151848660600151856113b5565b915060006040518060600160405280600060038111156108dd576108dd6126a3565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b1565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612709565b6040516020818303038152906040528152506115f7565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906125f8565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b815260040161030990612655565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e00151856113b5565b91506000604051806060016040528060016003811115610f4257610f426126a3565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612758565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127aa565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f89190612898565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612951565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126a3565b0361121057600082604001518060200190518101906111f4919061296f565b90506112088160000151846020015161171d565b505050505050565b600182516003811115611225576112256126a3565b03611254576000826040015180602001905181019061124491906129ba565b9050611208818460200151611794565b600282516003811115611269576112696126a3565b036112ed57600082604001518060200190518101906112889190612a70565b90506112086040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b600382516003811115611302576113026126a3565b036113ae57600082604001518060200190518101906113219190612aee565b90506112086040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b6000856114225760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114ac5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b0385166115215760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b816115325761152f846119e4565b93505b8284116115a75760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115b18385612951565b60008781526005602090815260408083206001600160a01b038a1684529091528120805492965086929091906115e8908490612bb9565b90915550939695505050505050565b600080611602611a16565b604084015160200151909150156116a7576040830151516001600160a01b03166116845760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116a7916001600160a01b03909116908390611b2a565b604051630624488560e41b81526001600160a01b038216906362448850906116d3908690600401612c10565b6020604051808303816000875af11580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171691906125f8565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161175891815260200190565b60405180910390a26103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c0f565b6117c37f0000000000000000000000000000000000000000000000000000000000000000836000015183611b2a565b60007f00000000000000000000000000000000000000000000000000000000000000008284602001516040516024016117fe93929190612c8e565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161183e919084611c44565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d891906125f8565b905061190a7f000000000000000000000000000000000000000000000000000000000000000086600001516000611c5b565b811561195c5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161194f91815260200190565b60405180910390a26119a4565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161199b91815260200190565b60405180910390a25b80156113ae5760608501516113ae906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c0f565b6000611a107f000000000000000000000000000000000000000000000000000000000000000083611d70565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b9190612cb5565b9050611abf816001600160a01b031660009081526001602052604090205460ff1690565b15611b255760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f91906125f8565b611ba99190612bb9565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed8565b6040516001600160a01b038316602482015260448101829052611c3f90849063a9059cbb60e01b90606401611bd8565b505050565b6000611c538460008585611faa565b949350505050565b801580611cd55750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd391906125f8565b155b611d405760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c3f90849063095ea7b360e01b90606401611bd8565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd91906125f8565b9050611df46001600160a01b03851633308661207f565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f91906125f8565b9050818111611ec55760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ecf8282612951565b95945050505050565b6000611f2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b79092919063ffffffff16565b805190915015611c3f5780806020019051810190611f4b9190612cd2565b611c3f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a1015611ffc5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b8347101561204c5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206657506000611c53565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611bd8565b6060611c53848460008585600080866001600160a01b031685876040516120de9190612cf4565b60006040518083038185875af1925050503d806000811461211b576040519150601f19603f3d011682016040523d82523d6000602084013e612120565b606091505b50915091506121318783838761213c565b979650505050505050565b606083156121ab5782516000036121a4576001600160a01b0385163b6121a45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c53565b611c5383838151156121c05781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d10565b6001600160a01b038116811461050c57600080fd5b8035611b25816121da565b6000806040838503121561220d57600080fd5b82359150602083013561221f816121da565b809150509250929050565b60006020828403121561223c57600080fd5b8135611716816121da565b60008082840360e081121561225b57600080fd5b60c081121561226957600080fd5b50919360c08501359350915050565b60006020828403121561228a57600080fd5b5035919050565b600080604083850312156122a457600080fd5b82356001600160401b038111156122ba57600080fd5b830161012081860312156122cd57600080fd5b946020939093013593505050565b600080600080606085870312156122f157600080fd5b843593506020850135612303816121da565b925060408501356001600160401b038082111561231f57600080fd5b818701915087601f83011261233357600080fd5b81358181111561234257600080fd5b88602082850101111561235457600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123ea576123ea6123b1565b60405290565b60405161010081016001600160401b03811182821017156123ea576123ea6123b1565b604051601f8201601f191681016001600160401b038111828210171561243b5761243b6123b1565b604052919050565b600060c0828403121561245557600080fd5b60405160c081018181106001600160401b0382111715612477576124776123b1565b60405282358152602083013561248c816121da565b6020820152604083013561249f816121da565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124e7576124e76123b1565b50601f01601f191660200190565b600082601f83011261250657600080fd5b8135612519612514826124ce565b612413565b81815284602083860101111561252e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561255e57600080fd5b6125666123c7565b82358152612576602084016121ef565b6020820152612587604084016121ef565b604082015260608301356001600160401b038111156125a557600080fd5b6125b1368286016124f5565b6060830152506080830135608082015260a083013560a08201526125d760c084016121ef565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561260a57600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126d45781810151838201526020016126bc565b50506000910152565b600081518084526126f58160208601602086016126b9565b601f01601f19169290920160200192915050565b60208152600082516004811061272f57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5360808401826126dd565b60208152600060018060a01b0380845116602084015260208401516080604085015261278760a08501826126dd565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d160608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526128026101608501836126dd565b9150608086015160c085015260a086015160e085015260c0860151610100612834818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286457600080fd5b8151612872612514826124ce565b81815284602083860101111561288757600080fd5b611c538260208301602087016126b9565b6000602082840312156128aa57600080fd5b81516001600160401b03808211156128c157600080fd5b90830190606082860312156128d557600080fd5b6040516060810181811083821117156128f0576128f06123b1565b60405282516004811061290257600080fd5b81526020838101519082015260408301518281111561292057600080fd5b61292c87828601612853565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1057611a1061293b565b8051611b25816121da565b60006020828403121561298157600080fd5b604051602081018181106001600160401b03821117156129a3576129a36123b1565b60405282516129b1816121da565b81529392505050565b6000602082840312156129cc57600080fd5b81516001600160401b03808211156129e357600080fd5b90830190608082860312156129f757600080fd5b604051608081018181108382111715612a1257612a126123b1565b6040528251612a20816121da565b8152602083015182811115612a3457600080fd5b612a4087828601612853565b6020830152506040830151604082015260608301519250612a60836121da565b6060810192909252509392505050565b600060a08284031215612a8257600080fd5b60405160a081018181106001600160401b0382111715612aa457612aa46123b1565b604052825181526020830151612ab9816121da565b60208201526040830151612acc816121da565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0057600080fd5b81516001600160401b0380821115612b1757600080fd5b908301906101008286031215612b2c57600080fd5b612b346123f0565b82518152612b4460208401612964565b6020820152612b5560408401612964565b6040820152606083015182811115612b6c57600080fd5b612b7887828601612853565b60608301525060808301516080820152612b9460a08401612964565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1057611a1061293b565b600081518084526020808501945080840160005b83811015612c055781516001600160a01b031687529582019590820190600101612be0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c71610100840182612bcc565b905060a0840151601f198483030160e0850152611ecf82826126dd565b60018060a01b0384168152826020820152606060408201526000611ecf60608301846126dd565b600060208284031215612cc757600080fd5b8151611716816121da565b600060208284031215612ce457600080fd5b8151801515811461171657600080fd5b60008251612d068184602087016126b9565b9190910192915050565b60208152600061171660208301846126dd56fea264697066735822122055eaa641c6e090849537661b122859420ea9da414da4b0a253ea02502a6ae51664736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b50604051620031ff380380620031ff8339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612d59620004a6600039600081816102b90152818161176d01528181611799015281816117c70152818161186b015281816118df015281816119bd01526119eb01526000818161023d0152818161095a0152610fee01526000818161027701526114240152600081816101480152818161054c01528181610aa40152611a1b0152612d596000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639731429711610097578063d127dc9b11610066578063d127dc9b14610272578063d2cc7a7014610299578063f2fde38b146102a1578063fc0c546a146102b457600080fd5b806397314297146101e9578063b51cff1b14610225578063b8df0dea14610238578063c868efaa1461025f57600080fd5b80634511243e116100d35780634511243e146101aa5780635eb99514146101bd578063715018a6146101d05780638da5cb5b146101d857600080fd5b806302ee3e9c146101055780631a7f5bec146101435780632b0d8f181461018257806332709bc114610197575b600080fd5b6101306101133660046121fa565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161013a565b61019561019036600461222a565b6102db565b005b6101956101a5366004612247565b6103e0565b6101956101b836600461222a565b6103fe565b6101956101cb366004612278565b6104fb565b61019561050f565b6003546001600160a01b031661016a565b6102156101f736600461222a565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161013a565b610195610233366004612291565b610523565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b61019561026d3660046122db565b610537565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b600254610130565b6101956102af36600461222a565b610701565b61016a7f000000000000000000000000000000000000000000000000000000000000000081565b6102e3610777565b6001600160a01b0381166103125760405162461bcd60e51b815260040161030990612363565b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16156103915760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b6064820152608401610309565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b6103fa6103f236849003840184612443565b82600061077f565b5050565b610406610777565b6001600160a01b03811661042c5760405162461bcd60e51b815260040161030990612363565b6001600160a01b03811660009081526001602052604090205460ff166104a65760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b6064820152608401610309565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610503610777565b61050c81610aa0565b50565b610517610c40565b6105216000610c9a565b565b6103fa61052f8361254b565b826000610cec565b61053f611089565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da91906125f8565b10156106415760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b6064820152608401610309565b61064a336101f7565b156106b05760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b6064820152608401610309565b6106f1848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e292505050565b6106fb6001600055565b50505050565b610709610c40565b6001600160a01b03811661076e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610309565b61050c81610c9a565b610521610c40565b6001600454146107a15760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b03166108165760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b6064820152608401610309565b60008360a001511161083a5760405162461bcd60e51b815260040161030990612655565b6080830151156108a25760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b6064820152608401610309565b6108bb83600001518460200151848660600151856113b5565b915060006040518060600160405280600060038111156108dd576108dd6126a3565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610a0e6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b038111156109b7576109b76123b1565b6040519080825280602002602001820160405280156109e0578160200160208202803683370190505b508152602001846040516020016109f79190612709565b6040516020818303038152906040528152506115f7565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906125f8565b60025490915081831115610b945760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b6064820152608401610309565b808311610c095760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e006064820152608401610309565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146105215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610309565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600160045414610d0e5760405162461bcd60e51b815260040161030990612611565b600260045560408301516001600160a01b0316610d8c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b6064820152608401610309565b6000836080015111610db05760405162461bcd60e51b815260040161030990612655565b60008360a0015111610e1c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b6064820152608401610309565b82608001518360a0015110610e8e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b6064820152608401610309565b60c08301516001600160a01b0316610f075760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b6064820152608401610309565b610f2083600001518460200151848660e00151856113b5565b91506000604051806060016040528060016003811115610f4257610f426126a3565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610fa09190612758565b6040516020818303038152906040528152509050600061104b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b038111156109b7576109b76123b1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610a8c9291906127aa565b6002600054036110db5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610309565b6002600055565b6000818060200190518101906110f89190612898565b60008581526005602090815260408083206001600160a01b0388168452825290912054908201519192509081101561118d5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b6064820152608401610309565b602082015161119c9082612951565b60008681526005602090815260408083206001600160a01b0389168452909152812091909155825160038111156111d5576111d56126a3565b0361121057600082604001518060200190518101906111f4919061296f565b90506112088160000151846020015161171d565b505050505050565b600182516003811115611225576112256126a3565b03611254576000826040015180602001905181019061124491906129ba565b9050611208818460200151611794565b600282516003811115611269576112696126a3565b036112ed57600082604001518060200190518101906112889190612a70565b90506112086040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020016000815260200183608001518152508460200151600161077f565b600382516003811115611302576113026126a3565b036113ae57600082604001518060200190518101906113219190612aee565b90506112086040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610cec565b5050505050565b6000856114225760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b6064820152608401610309565b7f000000000000000000000000000000000000000000000000000000000000000086036114ac5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b6064820152608401610309565b6001600160a01b0385166115215760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b6064820152608401610309565b816115325761152f846119e4565b93505b8284116115a75760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f766572206665657300000000000000006064820152608401610309565b6115b18385612951565b60008781526005602090815260408083206001600160a01b038a1684529091528120805492965086929091906115e8908490612bb9565b90915550939695505050505050565b600080611602611a16565b604084015160200151909150156116a7576040830151516001600160a01b03166116845760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401610309565b6040830151602081015190516116a7916001600160a01b03909116908390611b2a565b604051630624488560e41b81526001600160a01b038216906362448850906116d3908690600401612c10565b6020604051808303816000875af11580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171691906125f8565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161175891815260200190565b60405180910390a26103fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611c0f565b6117c37f0000000000000000000000000000000000000000000000000000000000000000836000015183611b2a565b60007f00000000000000000000000000000000000000000000000000000000000000008284602001516040516024016117fe93929190612c8e565b60408051601f198184030181529181526020820180516001600160e01b03166345e0f03b60e11b179052840151845191925060009161183e919084611c44565b8451604051636eb1769f60e11b81523060048201526001600160a01b0391821660248201529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d891906125f8565b905061190a7f000000000000000000000000000000000000000000000000000000000000000086600001516000611c5b565b811561195c5784600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff48560405161194f91815260200190565b60405180910390a26119a4565b84600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb08560405161199b91815260200190565b60405180910390a25b80156113ae5760608501516113ae906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611c0f565b6000611a107f000000000000000000000000000000000000000000000000000000000000000083611d70565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9b9190612cb5565b9050611abf816001600160a01b031660009081526001602052604090205460ff1690565b15611b255760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b6064820152608401610309565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f91906125f8565b611ba99190612bb9565b6040516001600160a01b0385166024820152604481018290529091506106fb90859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ed8565b6040516001600160a01b038316602482015260448101829052611c3f90849063a9059cbb60e01b90606401611bd8565b505050565b6000611c538460008585611faa565b949350505050565b801580611cd55750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd391906125f8565b155b611d405760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610309565b6040516001600160a01b038316602482015260448101829052611c3f90849063095ea7b360e01b90606401611bd8565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd91906125f8565b9050611df46001600160a01b03851633308661207f565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f91906125f8565b9050818111611ec55760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610309565b611ecf8282612951565b95945050505050565b6000611f2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b79092919063ffffffff16565b805190915015611c3f5780806020019051810190611f4b9190612cd2565b611c3f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610309565b6000845a1015611ffc5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e742067617300000000006044820152606401610309565b8347101561204c5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c75650000006044820152606401610309565b826001600160a01b03163b60000361206657506000611c53565b600080600084516020860188888bf19695505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106fb9085906323b872dd60e01b90608401611bd8565b6060611c53848460008585600080866001600160a01b031685876040516120de9190612cf4565b60006040518083038185875af1925050503d806000811461211b576040519150601f19603f3d011682016040523d82523d6000602084013e612120565b606091505b50915091506121318783838761213c565b979650505050505050565b606083156121ab5782516000036121a4576001600160a01b0385163b6121a45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610309565b5081611c53565b611c5383838151156121c05781518083602001fd5b8060405162461bcd60e51b81526004016103099190612d10565b6001600160a01b038116811461050c57600080fd5b8035611b25816121da565b6000806040838503121561220d57600080fd5b82359150602083013561221f816121da565b809150509250929050565b60006020828403121561223c57600080fd5b8135611716816121da565b60008082840360e081121561225b57600080fd5b60c081121561226957600080fd5b50919360c08501359350915050565b60006020828403121561228a57600080fd5b5035919050565b600080604083850312156122a457600080fd5b82356001600160401b038111156122ba57600080fd5b830161012081860312156122cd57600080fd5b946020939093013593505050565b600080600080606085870312156122f157600080fd5b843593506020850135612303816121da565b925060408501356001600160401b038082111561231f57600080fd5b818701915087601f83011261233357600080fd5b81358181111561234257600080fd5b88602082850101111561235457600080fd5b95989497505060200194505050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123ea576123ea6123b1565b60405290565b60405161010081016001600160401b03811182821017156123ea576123ea6123b1565b604051601f8201601f191681016001600160401b038111828210171561243b5761243b6123b1565b604052919050565b600060c0828403121561245557600080fd5b60405160c081018181106001600160401b0382111715612477576124776123b1565b60405282358152602083013561248c816121da565b6020820152604083013561249f816121da565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b60006001600160401b038211156124e7576124e76123b1565b50601f01601f191660200190565b600082601f83011261250657600080fd5b8135612519612514826124ce565b612413565b81815284602083860101111561252e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561255e57600080fd5b6125666123c7565b82358152612576602084016121ef565b6020820152612587604084016121ef565b604082015260608301356001600160401b038111156125a557600080fd5b6125b1368286016124f5565b6060830152506080830135608082015260a083013560a08201526125d760c084016121ef565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561260a57600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b838110156126d45781810151838201526020016126bc565b50506000910152565b600081518084526126f58160208601602086016126b9565b601f01601f19169290920160200192915050565b60208152600082516004811061272f57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611c5360808401826126dd565b60208152600060018060a01b0380845116602084015260208401516080604085015261278760a08501826126dd565b905060408501516060850152816060860151166080850152809250505092915050565b6040815282516040820152600060208401516127d160608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a084018190526128026101608501836126dd565b9150608086015160c085015260a086015160e085015260c0860151610100612834818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f83011261286457600080fd5b8151612872612514826124ce565b81815284602083860101111561288757600080fd5b611c538260208301602087016126b9565b6000602082840312156128aa57600080fd5b81516001600160401b03808211156128c157600080fd5b90830190606082860312156128d557600080fd5b6040516060810181811083821117156128f0576128f06123b1565b60405282516004811061290257600080fd5b81526020838101519082015260408301518281111561292057600080fd5b61292c87828601612853565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a1057611a1061293b565b8051611b25816121da565b60006020828403121561298157600080fd5b604051602081018181106001600160401b03821117156129a3576129a36123b1565b60405282516129b1816121da565b81529392505050565b6000602082840312156129cc57600080fd5b81516001600160401b03808211156129e357600080fd5b90830190608082860312156129f757600080fd5b604051608081018181108382111715612a1257612a126123b1565b6040528251612a20816121da565b8152602083015182811115612a3457600080fd5b612a4087828601612853565b6020830152506040830151604082015260608301519250612a60836121da565b6060810192909252509392505050565b600060a08284031215612a8257600080fd5b60405160a081018181106001600160401b0382111715612aa457612aa46123b1565b604052825181526020830151612ab9816121da565b60208201526040830151612acc816121da565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612b0057600080fd5b81516001600160401b0380821115612b1757600080fd5b908301906101008286031215612b2c57600080fd5b612b346123f0565b82518152612b4460208401612964565b6020820152612b5560408401612964565b6040820152606083015182811115612b6c57600080fd5b612b7887828601612853565b60608301525060808301516080820152612b9460a08401612964565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611a1057611a1061293b565b600081518084526020808501945080840160005b83811015612c055781516001600160a01b031687529582019590820190600101612be0565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612c71610100840182612bcc565b905060a0840151601f198483030160e0850152611ecf82826126dd565b60018060a01b0384168152826020820152606060408201526000611ecf60608301846126dd565b600060208284031215612cc757600080fd5b8151611716816121da565b600060208284031215612ce457600080fd5b8151801515811461171657600080fd5b60008251612d068184602087016126b9565b9190910192915050565b60208152600061171660208301846126dd56fea2646970667358221220ec716eb479b44ef8e3b5da09e185d38f08ffb058bf1267532affb5c0505188e964736f6c63430008120033", } // ERC20SourceABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 54fb4d4d0..8a3377d1e 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_FOR_BRIDGE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalNativeAssetSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220a177e5cb61411d48161dbc7e966fd76a733ecade442d8d8708e4e099d8c39c4964736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212208270e05085d363a67dd05ba280a49d58b5627e01268cf831c362c89557bd724064736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go index a6fefe071..ac6a11855 100644 --- a/abi-bindings/go/NativeTokenSource/NativeTokenSource.go +++ b/abi-bindings/go/NativeTokenSource/NativeTokenSource.go @@ -55,7 +55,7 @@ type SendTokensInput struct { // NativeTokenSourceMetaData contains all meta data concerning the NativeTokenSource contract. var NativeTokenSourceMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeTokenAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"}],\"name\":\"bridgedBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIWrappedNativeToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162003151380380620031518339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612cc06200049160003960008181610402015281816118b2015281816119670152611b020152600081816101070152818161034501528181610a8e0152610ede015260008181610399015261156001526000818161020a0152818161068801528181610f7d0152611b320152612cc06000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121b0565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f33660046121e0565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f3660046121f8565b610441565b610193610272366004612215565b61053d565b34801561028357600080fd5b506101936102923660046121f8565b610551565b3480156102a357600080fd5b506101936102b2366004612250565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b506103236103053660046121f8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b50610193610382366004612269565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb3660046121f8565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e61043636839003830183612383565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e610549826124d9565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190612586565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a906125e3565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef83600001518460200151848660600151856114f1565b91506000604051806060016040528060006003811115610a1157610a11612631565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb6122f1565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b9190612697565b604051602081830303815290604052815250611733565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a906125e3565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e00151856114f1565b91506000604051806060016040528060016003811115610e3257610e32612631565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e9091906126e6565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb6122f1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612738565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190612586565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612826565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d890826128df565b60008681526005602090815260408083206001600160a01b03891684529091528120919091558251600381111561131157611311612631565b0361134c576000826040015180602001905181019061133091906128fd565b905061134481600001518460200151611859565b505050505050565b60018251600381111561136157611361612631565b0361139057600082604001518060200190518101906113809190612948565b9050611344818460200151611951565b6002825160038111156113a5576113a5612631565b0361142957600082604001518060200190518101906113c491906129fe565b90506113446040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b60038251600381111561143e5761143e612631565b036114ea576000826040015180602001905181019061145d9190612a7c565b90506113446040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b60008561155e5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036115e85760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b03851661165d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b8161166e5761166b84611afb565b93505b8284116116e35760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6116ed83856128df565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611724908490612b47565b90915550939695505050505050565b60008061173e611b2d565b604084015160200151909150156117e3576040830151516001600160a01b03166117c05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b6040830151602081015190516117e3916001600160a01b03909116908390611c41565b604051630624488560e41b81526001600160a01b0382169063624488509061180f908690600401612b9e565b6020604051808303816000875af115801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190612586565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161189491815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118fe57600080fd5b505af1158015611912573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f1935050505015801561194c573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050600082602001516040516024016119e29190612c1c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a239190859085611d15565b90508015611a775783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611a6a91815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611ab691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156114ea573d6000803e3d6000fd5b6000611b277f000000000000000000000000000000000000000000000000000000000000000083611dec565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190612c2f565b9050611bd6816001600160a01b031660009081526001602052604090205460ff1690565b15611c3c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190612586565b611cc09190612b47565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611f9b565b6000845a1015611d675760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611db75760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611dd157506000611de4565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190612586565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1a9190612586565b9050818111611f885760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611f9282826128df565b95945050505050565b6000611ff0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661206d9092919063ffffffff16565b80519091501561194c578080602001905181019061200e9190612c4c565b61194c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611de4848460008585600080866001600160a01b031685876040516120949190612c6e565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e7878383876120f2565b979650505050505050565b6060831561216157825160000361215a576001600160a01b0385163b61215a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611de4565b611de483838151156121765781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c1c565b6001600160a01b038116811461043e57600080fd5b8035611c3c81612190565b600080604083850312156121c357600080fd5b8235915060208301356121d581612190565b809150509250929050565b600060c082840312156121f257600080fd5b50919050565b60006020828403121561220a57600080fd5b813561185281612190565b60006020828403121561222757600080fd5b81356001600160401b0381111561223d57600080fd5b8201610120818503121561185257600080fd5b60006020828403121561226257600080fd5b5035919050565b6000806000806060858703121561227f57600080fd5b84359350602085013561229181612190565b925060408501356001600160401b03808211156122ad57600080fd5b818701915087601f8301126122c157600080fd5b8135818111156122d057600080fd5b8860208285010111156122e257600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561232a5761232a6122f1565b60405290565b60405161010081016001600160401b038111828210171561232a5761232a6122f1565b604051601f8201601f191681016001600160401b038111828210171561237b5761237b6122f1565b604052919050565b600060c0828403121561239557600080fd5b60405160c081018181106001600160401b03821117156123b7576123b76122f1565b6040528235815260208301356123cc81612190565b602082015260408301356123df81612190565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b03821115612475576124756122f1565b50601f01601f191660200190565b600082601f83011261249457600080fd5b81356124a76124a28261245c565b612353565b8181528460208386010111156124bc57600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156124ec57600080fd5b6124f4612307565b82358152612504602084016121a5565b6020820152612515604084016121a5565b604082015260608301356001600160401b0381111561253357600080fd5b61253f36828601612483565b6060830152506080830135608082015260a083013560a082015261256560c084016121a5565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561259857600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b8381101561266257818101518382015260200161264a565b50506000910152565b60008151808452612683816020860160208601612647565b601f01601f19169290920160200192915050565b6020815260008251600481106126bd57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611de4608084018261266b565b60208152600060018060a01b0380845116602084015260208401516080604085015261271560a085018261266b565b905060408501516060850152816060860151166080850152809250505092915050565b60408152825160408201526000602084015161275f60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261279061016085018361266b565b9150608086015160c085015260a086015160e085015260c08601516101006127c2818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126127f257600080fd5b81516128006124a28261245c565b81815284602083860101111561281557600080fd5b611de4826020830160208701612647565b60006020828403121561283857600080fd5b81516001600160401b038082111561284f57600080fd5b908301906060828603121561286357600080fd5b60405160608101818110838211171561287e5761287e6122f1565b60405282516004811061289057600080fd5b8152602083810151908201526040830151828111156128ae57600080fd5b6128ba878286016127e1565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b2757611b276128c9565b8051611c3c81612190565b60006020828403121561290f57600080fd5b604051602081018181106001600160401b0382111715612931576129316122f1565b604052825161293f81612190565b81529392505050565b60006020828403121561295a57600080fd5b81516001600160401b038082111561297157600080fd5b908301906080828603121561298557600080fd5b6040516080810181811083821117156129a0576129a06122f1565b60405282516129ae81612190565b81526020830151828111156129c257600080fd5b6129ce878286016127e1565b60208301525060408301516040820152606083015192506129ee83612190565b6060810192909252509392505050565b600060a08284031215612a1057600080fd5b60405160a081018181106001600160401b0382111715612a3257612a326122f1565b604052825181526020830151612a4781612190565b60208201526040830151612a5a81612190565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612a8e57600080fd5b81516001600160401b0380821115612aa557600080fd5b908301906101008286031215612aba57600080fd5b612ac2612330565b82518152612ad2602084016128f2565b6020820152612ae3604084016128f2565b6040820152606083015182811115612afa57600080fd5b612b06878286016127e1565b60608301525060808301516080820152612b2260a084016128f2565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b2757611b276128c9565b600081518084526020808501945080840160005b83811015612b935781516001600160a01b031687529582019590820190600101612b6e565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612bff610100840182612b5a565b905060a0840151601f198483030160e0850152611f92828261266b565b602081526000611852602083018461266b565b600060208284031215612c4157600080fd5b815161185281612190565b600060208284031215612c5e57600080fd5b8151801515811461185257600080fd5b60008251612c80818460208701612647565b919091019291505056fea2646970667358221220135d399163a8ec491063f7b03db139019b5c16a369b04f263128160be489ab7264736f6c63430008120033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162003151380380620031518339810160408190526200003591620003ad565b60016000558282828282816001600160a01b038116620000c25760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620003f7565b60025550620001423362000261565b6200014d81620002b3565b505060016004819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d09190620003f7565b60a0526001600160a01b038116620002415760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f206665652060448201526c746f6b656e206164647265737360981b6064820152608401620000b9565b6001600160a01b0390811660c0529290921660e052506200041192505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002bd62000332565b6001600160a01b038116620003245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000b9565b6200032f8162000261565b50565b6003546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000b9565b565b80516001600160a01b0381168114620003a857600080fd5b919050565b600080600060608486031215620003c357600080fd5b620003ce8462000390565b9250620003de6020850162000390565b9150620003ee6040850162000390565b90509250925092565b6000602082840312156200040a57600080fd5b5051919050565b60805160a05160c05160e051612cc06200049160003960008181610402015281816118b2015281816119670152611b020152600081816101070152818161034501528181610a8e0152610ede015260008181610399015261156001526000818161020a0152818161068801528181610f7d0152611b320152612cc06000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063d127dc9b11610059578063d127dc9b14610387578063d2cc7a70146103bb578063f2fde38b146103d0578063fc0c546a146103f057600080fd5b80638da5cb5b146102cc57806397314297146102ea578063b8df0dea14610333578063c868efaa1461036757600080fd5b806330079bff116100c657806330079bff146102645780634511243e146102775780635eb9951414610297578063715018a6146102b757600080fd5b806302ee3e9c1461019a578063146dfd3c146101e55780631a7f5bec146101f85780632b0d8f181461024457600080fd5b3661019557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101935760405162461bcd60e51b815260206004820152603160248201527f4e6174697665546f6b656e536f757263653a20696e76616c69642072656365696044820152703b32903830bcb0b136329039b2b73232b960791b60648201526084015b60405180910390fd5b005b600080fd5b3480156101a657600080fd5b506101d26101b53660046121b0565b600560209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101936101f33660046121e0565b610424565b34801561020457600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b34801561025057600080fd5b5061019361025f3660046121f8565b610441565b610193610272366004612215565b61053d565b34801561028357600080fd5b506101936102923660046121f8565b610551565b3480156102a357600080fd5b506101936102b2366004612250565b61064e565b3480156102c357600080fd5b5061019361065f565b3480156102d857600080fd5b506003546001600160a01b031661022c565b3480156102f657600080fd5b506103236103053660046121f8565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016101dc565b34801561033f57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b50610193610382366004612269565b610673565b34801561039357600080fd5b506101d27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c757600080fd5b506002546101d2565b3480156103dc57600080fd5b506101936103eb3660046121f8565b61083d565b3480156103fc57600080fd5b5061022c7f000000000000000000000000000000000000000000000000000000000000000081565b61043e61043636839003830183612383565b3460006108b3565b50565b610449610bd4565b6001600160a01b03811661046f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff16156104ee5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161018a565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b61043e610549826124d9565b346000610bdc565b610559610bd4565b6001600160a01b03811661057f5760405162461bcd60e51b815260040161018a9061240e565b6001600160a01b03811660009081526001602052604090205460ff166105f95760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161018a565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600160205260409020805460ff19169055565b610656610bd4565b61043e81610f79565b610667611119565b6106716000611173565b565b61067b6111c5565b6002546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190612586565b101561077d5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161018a565b61078633610305565b156107ec5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161018a565b61082d848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061121e92505050565b6108376001600055565b50505050565b610845611119565b6001600160a01b0381166108aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161018a565b61043e81611173565b6001600454146108d55760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b031661094a5760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526c7069656e74206164647265737360981b606482015260840161018a565b60008360a001511161096e5760405162461bcd60e51b815260040161018a906125e3565b6080830151156109d65760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f72746572546f6b656e536f757263653a206e6f6e2d7a65726f2060448201526c7365636f6e646172792066656560981b606482015260840161018a565b6109ef83600001518460200151848660600151856114f1565b91506000604051806060016040528060006003811115610a1157610a11612631565b81526020808201869052604080518083018252888201516001600160a01b031690819052815192830152918201910160405160208183030381529060405281525090506000610b426040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602001896060015181525081526020018760a00151815260200160006001600160401b03811115610aeb57610aeb6122f1565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50815260200184604051602001610b2b9190612697565b604051602081830303815290604052815250611733565b60408051875181526020808901516001600160a01b0390811691830191909152828901511691810191909152606080880151908201526080808801519082015260a0808801519082015260c08101869052909150339082907f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b9060e0015b60405180910390a350506001600455505050565b610671611119565b600160045414610bfe5760405162461bcd60e51b815260040161018a9061259f565b600260045560408301516001600160a01b0316610c7c5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20726563696044820152757069656e7420636f6e7472616374206164647265737360501b606482015260840161018a565b6000836080015111610ca05760405162461bcd60e51b815260040161018a906125e3565b60008360a0015111610d0c5760405162461bcd60e51b815260206004820152602f60248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265636960448201526e1c1a595b9d0819d85cc81b1a5b5a5d608a1b606482015260840161018a565b82608001518360a0015110610d7e5760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e76616c696420726044820152711958da5c1a595b9d0819d85cc81b1a5b5a5d60721b606482015260840161018a565b60c08301516001600160a01b0316610df75760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2066616c6c6044820152756261636b20726563697069656e74206164647265737360501b606482015260840161018a565b610e1083600001518460200151848660e00151856114f1565b91506000604051806060016040528060016003811115610e3257610e32612631565b8152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b0316815250604051602001610e9091906126e6565b60405160208183030381529060405281525090506000610f3b6040518060c001604052808760000151815260200187602001516001600160a01b0316815260200160405180604001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018960e0015181525081526020018760800151815260200160006001600160401b03811115610aeb57610aeb6122f1565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051610bc0929190612738565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190612586565b6002549091508183111561106d5760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161018a565b8083116110e25760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161018a565b6002839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6003546001600160a01b031633146106715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161018a565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600054036112175760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161018a565b6002600055565b6000818060200190518101906112349190612826565b60008581526005602090815260408083206001600160a01b038816845282529091205490820151919250908110156112c95760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a20696e73756666696369604482015271656e74206272696467652062616c616e636560701b606482015260840161018a565b60208201516112d890826128df565b60008681526005602090815260408083206001600160a01b03891684529091528120919091558251600381111561131157611311612631565b0361134c576000826040015180602001905181019061133091906128fd565b905061134481600001518460200151611859565b505050505050565b60018251600381111561136157611361612631565b0361139057600082604001518060200190518101906113809190612948565b9050611344818460200151611951565b6002825160038111156113a5576113a5612631565b0361142957600082604001518060200190518101906113c491906129fe565b90506113446040518060c001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001600081526020018360800151815250846020015160016108b3565b60038251600381111561143e5761143e612631565b036114ea576000826040015180602001905181019061145d9190612a7c565b90506113446040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b03168152602001836060015181526020018360c001518152602001836080015181526020018360a001516001600160a01b031681526020018360e001518152602001600081525084602001516001610bdc565b5050505050565b60008561155e5760405162461bcd60e51b815260206004820152603560248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f20646573746044820152741a5b985d1a5bdb88189b1bd8dad8da185a5b881251605a1b606482015260840161018a565b7f000000000000000000000000000000000000000000000000000000000000000086036115e85760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e536f757263653a2063616e6e6f7420627260448201527134b233b2903a379039b0b6b29031b430b4b760711b606482015260840161018a565b6001600160a01b03851661165d5760405162461bcd60e51b815260206004820152603660248201527f54656c65706f72746572546f6b656e536f757263653a207a65726f2064657374604482015275696e6174696f6e20627269646765206164647265737360501b606482015260840161018a565b8161166e5761166b84611afb565b93505b8284116116e35760405162461bcd60e51b815260206004820152603860248201527f54656c65706f72746572546f6b656e536f757263653a20696e7375666669636960448201527f656e7420616d6f756e7420746f20636f76657220666565730000000000000000606482015260840161018a565b6116ed83856128df565b60008781526005602090815260408083206001600160a01b038a168452909152812080549296508692909190611724908490612b47565b90915550939695505050505050565b60008061173e611b2d565b604084015160200151909150156117e3576040830151516001600160a01b03166117c05760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161018a565b6040830151602081015190516117e3916001600160a01b03909116908390611c41565b604051630624488560e41b81526001600160a01b0382169063624488509061180f908690600401612b9e565b6020604051808303816000875af115801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190612586565b9392505050565b816001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b8260405161189491815260200190565b60405180910390a2604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118fe57600080fd5b505af1158015611912573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f1935050505015801561194c573d6000803e3d6000fd5b505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050600082602001516040516024016119e29190612c1c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091611a239190859085611d15565b90508015611a775783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051611a6a91815260200190565b60405180910390a2610837565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051611ab691815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156114ea573d6000803e3d6000fd5b6000611b277f000000000000000000000000000000000000000000000000000000000000000083611dec565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb29190612c2f565b9050611bd6816001600160a01b031660009081526001602052604090205460ff1690565b15611c3c5760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161018a565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190612586565b611cc09190612b47565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150610837908590611f9b565b6000845a1015611d675760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161018a565b83471015611db75760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161018a565b826001600160a01b03163b600003611dd157506000611de4565b600080600084516020860188888bf19150505b949350505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190612586565b9050836001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03881692506370a082319150602401602060405180830381865afa158015611ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1a9190612586565b9050818111611f885760405162461bcd60e51b815260206004820152603460248201527f53616665577261707065644e6174697665546f6b656e4465706f7369743a2062604482015273185b185b98d9481b9bdd081a5b98dc99585cd95960621b606482015260840161018a565b611f9282826128df565b95945050505050565b6000611ff0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661206d9092919063ffffffff16565b80519091501561194c578080602001905181019061200e9190612c4c565b61194c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161018a565b6060611de4848460008585600080866001600160a01b031685876040516120949190612c6e565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e7878383876120f2565b979650505050505050565b6060831561216157825160000361215a576001600160a01b0385163b61215a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161018a565b5081611de4565b611de483838151156121765781518083602001fd5b8060405162461bcd60e51b815260040161018a9190612c1c565b6001600160a01b038116811461043e57600080fd5b8035611c3c81612190565b600080604083850312156121c357600080fd5b8235915060208301356121d581612190565b809150509250929050565b600060c082840312156121f257600080fd5b50919050565b60006020828403121561220a57600080fd5b813561185281612190565b60006020828403121561222757600080fd5b81356001600160401b0381111561223d57600080fd5b8201610120818503121561185257600080fd5b60006020828403121561226257600080fd5b5035919050565b6000806000806060858703121561227f57600080fd5b84359350602085013561229181612190565b925060408501356001600160401b03808211156122ad57600080fd5b818701915087601f8301126122c157600080fd5b8135818111156122d057600080fd5b8860208285010111156122e257600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561232a5761232a6122f1565b60405290565b60405161010081016001600160401b038111828210171561232a5761232a6122f1565b604051601f8201601f191681016001600160401b038111828210171561237b5761237b6122f1565b604052919050565b600060c0828403121561239557600080fd5b60405160c081018181106001600160401b03821117156123b7576123b76122f1565b6040528235815260208301356123cc81612190565b602082015260408301356123df81612190565b80604083015250606083013560608201526080830135608082015260a083013560a08201528091505092915050565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b60006001600160401b03821115612475576124756122f1565b50601f01601f191660200190565b600082601f83011261249457600080fd5b81356124a76124a28261245c565b612353565b8181528460208386010111156124bc57600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156124ec57600080fd5b6124f4612307565b82358152612504602084016121a5565b6020820152612515604084016121a5565b604082015260608301356001600160401b0381111561253357600080fd5b61253f36828601612483565b6060830152506080830135608082015260a083013560a082015261256560c084016121a5565b60c082015260e0838101359082015261010092830135928101929092525090565b60006020828403121561259857600080fd5b5051919050565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b6020808252602e908201527f54656c65706f72746572546f6b656e536f757263653a207a65726f207265717560408201526d1a5c99590819d85cc81b1a5b5a5d60921b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60005b8381101561266257818101518382015260200161264a565b50506000910152565b60008151808452612683816020860160208601612647565b601f01601f19169290920160200192915050565b6020815260008251600481106126bd57634e487b7160e01b600052602160045260246000fd5b80602084015250602083015160408301526040830151606080840152611de4608084018261266b565b60208152600060018060a01b0380845116602084015260208401516080604085015261271560a085018261266b565b905060408501516060850152816060860151166080850152809250505092915050565b60408152825160408201526000602084015161275f60608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a0840181905261279061016085018361266b565b9150608086015160c085015260a086015160e085015260c08601516101006127c2818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600082601f8301126127f257600080fd5b81516128006124a28261245c565b81815284602083860101111561281557600080fd5b611de4826020830160208701612647565b60006020828403121561283857600080fd5b81516001600160401b038082111561284f57600080fd5b908301906060828603121561286357600080fd5b60405160608101818110838211171561287e5761287e6122f1565b60405282516004811061289057600080fd5b8152602083810151908201526040830151828111156128ae57600080fd5b6128ba878286016127e1565b60408301525095945050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611b2757611b276128c9565b8051611c3c81612190565b60006020828403121561290f57600080fd5b604051602081018181106001600160401b0382111715612931576129316122f1565b604052825161293f81612190565b81529392505050565b60006020828403121561295a57600080fd5b81516001600160401b038082111561297157600080fd5b908301906080828603121561298557600080fd5b6040516080810181811083821117156129a0576129a06122f1565b60405282516129ae81612190565b81526020830151828111156129c257600080fd5b6129ce878286016127e1565b60208301525060408301516040820152606083015192506129ee83612190565b6060810192909252509392505050565b600060a08284031215612a1057600080fd5b60405160a081018181106001600160401b0382111715612a3257612a326122f1565b604052825181526020830151612a4781612190565b60208201526040830151612a5a81612190565b6040820152606083810151908201526080928301519281019290925250919050565b600060208284031215612a8e57600080fd5b81516001600160401b0380821115612aa557600080fd5b908301906101008286031215612aba57600080fd5b612ac2612330565b82518152612ad2602084016128f2565b6020820152612ae3604084016128f2565b6040820152606083015182811115612afa57600080fd5b612b06878286016127e1565b60608301525060808301516080820152612b2260a084016128f2565b60a082015260c083015160c082015260e083015160e082015280935050505092915050565b80820180821115611b2757611b276128c9565b600081518084526020808501945080840160005b83811015612b935781516001600160a01b031687529582019590820190600101612b6e565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152612bff610100840182612b5a565b905060a0840151601f198483030160e0850152611f92828261266b565b602081526000611852602083018461266b565b600060208284031215612c4157600080fd5b815161185281612190565b600060208284031215612c5e57600080fd5b8151801515811461185257600080fd5b60008251612c80818460208701612647565b919091019291505056fea2646970667358221220ec1eaf495464f75a19aaa22ead6bd5bf11bd68d87c9105c5909b1342e799078b64736f6c63430008120033", } // NativeTokenSourceABI is the input ABI used to generate the binding from. diff --git a/contracts/src/ERC20Destination.sol b/contracts/src/ERC20Destination.sol index 71fea60c9..1dd7bc88f 100644 --- a/contracts/src/ERC20Destination.sol +++ b/contracts/src/ERC20Destination.sol @@ -91,9 +91,10 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { * * Note: The amount returned must be the amount credited as a result of the transfer. * For a standard ERC20 implementation such as this contract, that is equal to the full amount given. - * For fee/burn on transfer tokens, that amount could be less. + * Child contracts with different {_transfer} implementations may need to override this + * implemenation to ensure the amount returned is correct. */ - function _deposit(uint256 amount) internal override returns (uint256) { + function _deposit(uint256 amount) internal virtual override returns (uint256) { _spendAllowance(msg.sender, address(this), amount); _transfer(msg.sender, address(this), amount); return amount; @@ -102,7 +103,7 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { /** * @dev See {TeleporterTokenDestination-_withdraw} */ - function _withdraw(address recipient, uint256 amount) internal override { + function _withdraw(address recipient, uint256 amount) internal virtual override { emit TokensWithdrawn(recipient, amount); _mint(recipient, amount); } @@ -112,7 +113,7 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { * * Calls {ERC20-_burn} to burn tokens from this contract. */ - function _burn(uint256 amount) internal override { + function _burn(uint256 amount) internal virtual override { _burn(address(this), amount); } @@ -127,7 +128,7 @@ contract ERC20Destination is IERC20Bridge, TeleporterTokenDestination, ERC20 { function _handleSendAndCall( SingleHopCallMessage memory message, uint256 amount - ) internal override { + ) internal virtual override { // Mint the tokens to this contract address. _mint(address(this), amount); diff --git a/contracts/src/ERC20Source.sol b/contracts/src/ERC20Source.sol index 157335d5c..582710ea4 100644 --- a/contracts/src/ERC20Source.sol +++ b/contracts/src/ERC20Source.sol @@ -68,14 +68,14 @@ contract ERC20Source is IERC20Bridge, TeleporterTokenSource { /** * @dev See {TeleportTokenSource-_deposit} */ - function _deposit(uint256 amount) internal override returns (uint256) { + function _deposit(uint256 amount) internal virtual override returns (uint256) { return SafeERC20TransferFrom.safeTransferFrom(token, amount); } /** * @dev See {TeleportTokenSource-_withdraw} */ - function _withdraw(address recipient, uint256 amount) internal override { + function _withdraw(address recipient, uint256 amount) internal virtual override { emit TokensWithdrawn(recipient, amount); token.safeTransfer(recipient, amount); } @@ -91,7 +91,7 @@ contract ERC20Source is IERC20Bridge, TeleporterTokenSource { function _handleSendAndCall( SingleHopCallMessage memory message, uint256 amount - ) internal override { + ) internal virtual override { // Approve the destination contract to spend the amount from the collateral. SafeERC20.safeIncreaseAllowance(token, message.recipientContract, amount); diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index d672153d1..b21892d51 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -294,7 +294,7 @@ contract NativeTokenDestination is * the wrapped native asset (ERC20) token by incrementing the ERC20 balance of this contract, such * that it can be used to pay for message fees if needed. */ - function _deposit(uint256 amount) internal override returns (uint256) { + function _deposit(uint256 amount) internal virtual override returns (uint256) { _mint(address(this), amount); return amount; } @@ -302,7 +302,7 @@ contract NativeTokenDestination is /** * @dev See {TeleporterTokenDestination-_withdraw} */ - function _withdraw(address recipient, uint256 amount) internal override { + function _withdraw(address recipient, uint256 amount) internal virtual override { // If the contract has not yet been collateralized, we will deduct as many tokens // as needed from the transfer as needed. If there are any excess tokens, they will // be minted and sent to the recipient. @@ -337,7 +337,7 @@ contract NativeTokenDestination is * native token amount to the BURNED_FOR_BRIDGE_ADDRESS. * */ - function _burn(uint256 amount) internal override { + function _burn(uint256 amount) internal virtual override { _burn(address(this), amount); payable(BURNED_FOR_BRIDGE_ADDRESS).transfer(amount); } @@ -356,7 +356,7 @@ contract NativeTokenDestination is function _handleSendAndCall( SingleHopCallMessage memory message, uint256 amount - ) internal override { + ) internal virtual override { // If the contract is not yet fully collateralized, the use of send and call is not allowed // because it could result in unexpected behavior given that the amount of tokens used to make the // call to "receiveTokens" is less than expected. Instead, the amount is handled as a normal bridge diff --git a/contracts/src/NativeTokenSource.sol b/contracts/src/NativeTokenSource.sol index 4cf314a48..7088974d1 100644 --- a/contracts/src/NativeTokenSource.sol +++ b/contracts/src/NativeTokenSource.sol @@ -72,7 +72,7 @@ contract NativeTokenSource is INativeTokenBridge, TeleporterTokenSource { * @dev See {TeleportTokenSource-_deposit} * Deposits the native tokens sent to this contract */ - function _deposit(uint256 amount) internal override returns (uint256) { + function _deposit(uint256 amount) internal virtual override returns (uint256) { return SafeWrappedNativeTokenDeposit.safeDeposit(token, amount); } @@ -81,7 +81,7 @@ contract NativeTokenSource is INativeTokenBridge, TeleporterTokenSource { * Withdraws the wrapped tokens for native tokens, * and sends them to the recipient. */ - function _withdraw(address recipient, uint256 amount) internal override { + function _withdraw(address recipient, uint256 amount) internal virtual override { emit TokensWithdrawn(recipient, amount); token.withdraw(amount); payable(recipient).transfer(amount); @@ -98,7 +98,7 @@ contract NativeTokenSource is INativeTokenBridge, TeleporterTokenSource { function _handleSendAndCall( SingleHopCallMessage memory message, uint256 amount - ) internal override { + ) internal virtual override { // Withdraw the native token from the wrapped native token contract. token.withdraw(amount); From c21eab30354f8b49746032962e71e002d72b4973 Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Thu, 18 Apr 2024 11:58:04 -0400 Subject: [PATCH 26/26] Update comments --- .../go/NativeTokenDestination/NativeTokenDestination.go | 2 +- contracts/src/NativeTokenDestination.sol | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go index 8a3377d1e..678d9f630 100644 --- a/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go +++ b/abi-bindings/go/NativeTokenDestination/NativeTokenDestination.go @@ -68,7 +68,7 @@ type SendTokensInput struct { // NativeTokenDestinationMetaData contains all meta data concerning the NativeTokenDestination contract. var NativeTokenDestinationMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"nativeAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"teleporterRegistryAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"teleporterManager\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenSourceAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialReserveImbalance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"decimalsShift\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"multiplyOnReceive\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"burnedFeesReportingRewardPercentage\",\"type\":\"uint256\"}],\"internalType\":\"structNativeTokenDestinationSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"name\":\"CollateralAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldMinTeleporterVersion\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMinTeleporterVersion\",\"type\":\"uint256\"}],\"name\":\"MinTeleporterVersionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feesBurned\",\"type\":\"uint256\"}],\"name\":\"ReportBurnedTxFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"TeleporterAddressUnpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensAndCallSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"teleporterMessageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"BURNED_FOR_BRIDGE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BURNED_TX_FEES_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_CALL_GAS_PER_WORD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MULTI_HOP_REQUIRED_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOURCE_CHAIN_BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedFeesReportingRewardPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"payloadSize\",\"type\":\"uint256\"}],\"name\":\"calculateNumWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinTeleporterVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialReserveImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"isTeleporterAddressPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastestBurnedFeesReported\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplyOnReceive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"pauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"name\":\"reportBurnedTxFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isReceive\",\"type\":\"bool\"}],\"name\":\"scaleTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structSendTokensInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipientContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"recipientPayload\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"recipientGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"fallbackRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"primaryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryFee\",\"type\":\"uint256\"}],\"internalType\":\"structSendAndCallInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"sendAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"teleporterRegistry\",\"outputs\":[{\"internalType\":\"contractTeleporterRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenSourceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalNativeAssetSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teleporterAddress\",\"type\":\"address\"}],\"name\":\"unpauseTeleporterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"updateMinTeleporterVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a26469706673582212208270e05085d363a67dd05ba280a49d58b5627e01268cf831c362c89557bd724064736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004bca38038062004bca83398101604081905262000035916200079a565b80602001518160400151826060015183608001518460c001518560e0015185858189600001516040516020016200006d91906200088f565b60408051601f198184030181529190528a5160036200008d838262000950565b5060046200009c828262000950565b50506001600555506001600160a01b038116620001265760405162461bcd60e51b815260206004820152603760248201527f54656c65706f727465725570677261646561626c653a207a65726f2074656c6560448201527f706f72746572207265676973747279206164647265737300000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660808190526040805163301fd1f560e21b8152905163c07f47d4916004808201926020929091908290030181865afa15801562000171573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000197919062000a1c565b60075550620001a63362000532565b620001b18162000584565b505060016009819055507302000000000000000000000000000000000000056001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000a1c565b60a052836200029b5760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20736f7572636520626c6f636b636861696e204944000000000000000000000060648201526084016200011d565b60a0518403620003235760405162461bcd60e51b815260206004820152604660248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a2063616e6e60448201527f6f74206465706c6f7920746f2073616d6520626c6f636b636861696e20617320606482015265736f7572636560d01b608482015260a4016200011d565b6001600160a01b038316620003905760405162461bcd60e51b8152602060048201526035602482015260008051602062004baa83398151915260448201527f20746f6b656e20736f757263652061646472657373000000000000000000000060648201526084016200011d565b60128260ff161115620004005760405162461bcd60e51b815260206004820152603160248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e76616044820152701b1a5908191958da5b585b1cd4da1a599d607a1b60648201526084016200011d565b60c08490526001600160a01b03831660e0526200041f82600a62000b4b565b610100521515610120525050505060a08201516000039050620004ab5760405162461bcd60e51b815260206004820152603660248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f20696e6960448201527f7469616c207265736572766520696d62616c616e63650000000000000000000060648201526084016200011d565b60a0810180516101405251600a55610100810151606411620005235760405162461bcd60e51b815260206004820152602a60248201527f4e6174697665546f6b656e44657374696e6174696f6e3a20696e76616c69642060448201526970657263656e7461676560b01b60648201526084016200011d565b61010001516101605262000b63565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200058e62000603565b6001600160a01b038116620005f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200011d565b620006008162000532565b50565b6008546001600160a01b031633146200065f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011d565b565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200069d576200069d62000661565b60405290565b60005b83811015620006c0578181015183820152602001620006a6565b50506000910152565b600082601f830112620006db57600080fd5b81516001600160401b0380821115620006f857620006f862000661565b604051601f8301601f19908116603f0116810190828211818310171562000723576200072362000661565b816040528381528660208588010111156200073d57600080fd5b62000750846020830160208901620006a3565b9695505050505050565b80516001600160a01b03811681146200077257600080fd5b919050565b805160ff811681146200077257600080fd5b805180151581146200077257600080fd5b600060208284031215620007ad57600080fd5b81516001600160401b0380821115620007c557600080fd5b908301906101208286031215620007db57600080fd5b620007e562000677565b825182811115620007f557600080fd5b6200080387828601620006c9565b82525062000814602084016200075a565b602082015262000827604084016200075a565b60408201526060830151606082015262000844608084016200075a565b608082015260a083015160a08201526200086160c0840162000777565b60c08201526200087460e0840162000789565b60e08201526101009283015192810192909252509392505050565b6702bb930b83832b2160c51b815260008251620008b4816008850160208701620006a3565b9190910160080192915050565b600181811c90821680620008d657607f821691505b602082108103620008f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094b57600081815260208120601f850160051c81016020861015620009265750805b601f850160051c820191505b81811015620009475782815560010162000932565b5050505b505050565b81516001600160401b038111156200096c576200096c62000661565b62000984816200097d8454620008c1565b84620008fd565b602080601f831160018114620009bc5760008415620009a35750858301515b600019600386901b1c1916600185901b17855562000947565b600085815260208120601f198616915b82811015620009ed57888601518255948401946001909101908401620009cc565b508582101562000a0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a2f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a8d57816000190482111562000a715762000a7162000a36565b8085161562000a7f57918102915b93841c939080029062000a51565b509250929050565b60008262000aa65750600162000b45565b8162000ab55750600062000b45565b816001811462000ace576002811462000ad95762000af9565b600191505062000b45565b60ff84111562000aed5762000aed62000a36565b50506001821b62000b45565b5060208310610133831016604e8410600b841016171562000b1e575081810a62000b45565b62000b2a838362000a4c565b806000190482111562000b415762000b4162000a36565b0290505b92915050565b600062000b5c60ff84168362000a95565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051613f4762000c63600039600081816104f50152610dc501526000818161061d01526109c50152600081816103c301526110b5015260008181610733015281816110e0015261111101526000818161085e01528181610f1e015281816116f40152818161199a01528181612055015281816122a1015261282101526000818161041701528181610efb015281816116c4015281816119740152818161202e0152818161227b01526127ab0152600081816107b501528181611832015261213101526000818161037701528181611152015281816125080152612bbe0152613f476000f3fe6080604052600436106102805760003560e01c80635eb995141161014f578063ba3f5a12116100c1578063d2cc7a701161007a578063d2cc7a70146107d7578063dd62ed3e146107ec578063ecd4ed1b14610537578063f2fde38b1461080c578063f3f981d81461082c578063f5ea06031461084c5761028f565b8063ba3f5a1214610721578063c452165e14610755578063c868efaa1461076d578063d0e30db01461028f578063d10a5b8c1461078d578063d127dc9b146107a35761028f565b806395d89b411161011357806395d89b411461065d5780639731429714610672578063a2309ff8146106ab578063a457c2d7146106c1578063a9059cbb146106e1578063b9448587146107015761028f565b80635eb99514146105a057806370a08231146105c0578063715018a6146105f65780638ac7dd201461060b5780638da5cb5b1461063f5761028f565b80632b0d8f18116101f35780633a23dfe2116101ac5780633a23dfe2146104e35780634511243e1461051757806347a9a22c1461053757806349e3284e14610554578063525975e61461056957806355538c8b146105805761028f565b80632b0d8f18146104395780632e1a7d4d1461045957806330079bff14610479578063313ce5671461048c578063329c3e12146104a857806339509351146104c35761028f565b806318160ddd1161024557806318160ddd1461033b5780631906529c146103505780631a7f5bec146103655780631ce22075146103b157806323b872dd146103e557806329b7b3fd146104055761028f565b8062d872ae1461029757806306fdde03146102c0578063095ea7b3146102e2578063146dfd3c1461031257806315beb59f146103255761028f565b3661028f5761028d610880565b005b61028d610880565b3480156102a357600080fd5b506102ad600a5481565b6040519081526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b7919061334c565b3480156102ee57600080fd5b506103026102fd36600461337f565b610953565b60405190151581526020016102b7565b61028d6103203660046133ab565b61096d565b34801561033157600080fd5b506102ad61213481565b34801561034757600080fd5b506002546102ad565b34801561035c57600080fd5b506102ad6109a3565b34801561037157600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b7565b3480156103bd57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506103026104003660046133c3565b610a04565b34801561041157600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b5061028d610454366004613404565b610a28565b34801561046557600080fd5b5061028d610474366004613421565b610b21565b61028d61048736600461343a565b610b91565b34801561049857600080fd5b50604051601281526020016102b7565b3480156104b457600080fd5b506103996001600160991b0181565b3480156104cf57600080fd5b506103026104de36600461337f565b610bc3565b3480156104ef57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052357600080fd5b5061028d610532366004613404565b610be5565b34801561054357600080fd5b5061039962010203600160981b0181565b34801561056057600080fd5b50610302610ce2565b34801561057557600080fd5b506102ad62035b6081565b34801561058c57600080fd5b5061028d61059b366004613421565b610cf3565b3480156105ac57600080fd5b5061028d6105bb366004613421565b610ff3565b3480156105cc57600080fd5b506102ad6105db366004613404565b6001600160a01b031660009081526020819052604090205490565b34801561060257600080fd5b5061028d611004565b34801561061757600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064b57600080fd5b506008546001600160a01b0316610399565b34801561066957600080fd5b506102d5611016565b34801561067e57600080fd5b5061030261068d366004613404565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b757600080fd5b506102ad600b5481565b3480156106cd57600080fd5b506103026106dc36600461337f565b611025565b3480156106ed57600080fd5b506103026106fc36600461337f565b6110a0565b34801561070d57600080fd5b506102ad61071c366004613484565b6110ae565b34801561072d57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076157600080fd5b50610399600160981b81565b34801561077957600080fd5b5061028d6107883660046134b4565b61113d565b34801561079957600080fd5b506102ad600c5481565b3480156107af57600080fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e357600080fd5b506007546102ad565b3480156107f857600080fd5b506102ad61080736600461353d565b611307565b34801561081857600080fd5b5061028d610827366004613404565b611332565b34801561083857600080fd5b506102ad610847366004613421565b6113a8565b34801561085857600080fd5b506103997f000000000000000000000000000000000000000000000000000000000000000081565b60405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a26108bf33346113d1565b565b6060600380546108d09061356b565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc9061356b565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600033610961818585611490565b60019150505b92915050565b600a54156109965760405162461bcd60e51b815260040161098d9061359f565b60405180910390fd5b6109a081346115b5565b50565b6000806109bf62010203600160981b0131600160981b31613609565b905060007f0000000000000000000000000000000000000000000000000000000000000000600b546109f19190613609565b90506109fd828261361c565b9250505090565b600033610a12858285611aa0565b610a1d858585611b14565b506001949350505050565b610a30611cb8565b6001600160a01b038116610a565760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff1615610ad55760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a2061646472657373206160448201526c1b1c9958591e481c185d5cd959609a1b606482015260840161098d565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f933f93e57a222e6330362af8b376d0a8725b6901e9a2fb86d00f169702b28a4c9190a250565b60405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a2610b603382611cc0565b604051339082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b5050565b600a5415610bb15760405162461bcd60e51b815260040161098d9061359f565b6109a0610bbd8261376c565b34611def565b600033610961818585610bd68383611307565b610be09190613609565b611490565b610bed611cb8565b6001600160a01b038116610c135760405162461bcd60e51b815260040161098d9061362f565b6001600160a01b03811660009081526006602052604090205460ff16610c8d5760405162461bcd60e51b815260206004820152602960248201527f54656c65706f727465725570677261646561626c653a2061646472657373206e6044820152681bdd081c185d5cd95960ba1b606482015260840161098d565b6040516001600160a01b038216907f844e2f3154214672229235858fd029d1dfd543901c6d05931f0bc2480a2d72c390600090a26001600160a01b03166000908152600660205260409020805460ff19169055565b6000610cee600a541590565b905090565b600160095414610d155760405162461bcd60e51b815260040161098d9061381a565b6002600955600c54600160981b31908111610daa5760405162461bcd60e51b815260206004820152604960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a206275726e2061646460448201527f726573732062616c616e6365206e6f742067726561746572207468616e206c616064820152681cdd081c995c1bdc9d60ba1b608482015260a40161098d565b6000600c5482610dba919061361c565b905060006064610dea7f00000000000000000000000000000000000000000000000000000000000000008461385e565b610df4919061388b565b90506000610e02828461361c565b600c85905590508115610e2457610e193083612353565b610e22826123d5565b505b6000610e318260006110ae565b905060008111610ea95760405162461bcd60e51b815260206004820152603960248201527f4e6174697665546f6b656e44657374696e6174696f6e3a207a65726f2073636160448201527f6c656420616d6f756e7420746f207265706f7274206275726e00000000000000606482015260840161098d565b6040805160608082018352600080835260208084018690528451808201865262010203600160981b0190819052855180830191909152855180820383018152908601865284860152845160c0810186527f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681830152855180870187523081528083018a9052818701529283018b905284518281529081019094529192610fa891906080820190815260200184604051602001610f9191906138b5565b6040516020818303038152906040528152506123e5565b9050807f0832c643b65d6d3724ed14ac3a655fbc7cae54fb010918b2c2f70ef6b1bb94a585604051610fdc91815260200190565b60405180910390a250506001600955505050505050565b610ffb611cb8565b6109a081612504565b61100c6126a4565b6108bf60006126fe565b6060600480546108d09061356b565b600033816110338286611307565b9050838110156110935760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161098d565b610a1d8286868403611490565b600033610961818585611b14565b60008115157f000000000000000000000000000000000000000000000000000000000000000015150361110c576111057f00000000000000000000000000000000000000000000000000000000000000008461385e565b9050610967565b6111367f00000000000000000000000000000000000000000000000000000000000000008461388b565b9392505050565b611145612750565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016634c1f08ce336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613904565b10156112475760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201526f32b632b837b93a32b91039b2b73232b960811b606482015260840161098d565b6112503361068d565b156112b65760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881859191c995cdcc81c185d5cd95960821b606482015260840161098d565b6112f7848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127a992505050565b6113016001600555565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61133a6126a4565b6001600160a01b03811661139f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098d565b6109a0816126fe565b6000806113b660208461388b565b90506113c360208461391d565b156109675761113681613931565b6001600160a01b0382166114275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161098d565b80600260008282546114399190613609565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166114f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098d565b6001600160a01b0382166115535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600954146115d75760405162461bcd60e51b815260040161098d9061381a565b600260095560006115ee6060840160408501613404565b6001600160a01b03160361164d5760405162461bcd60e51b81526020600482015260326024820152600080516020613ed283398151915260448201527120726563697069656e74206164647265737360701b606482015260840161098d565b60008260a00135116116715760405162461bcd60e51b815260040161098d9061394a565b61169682356116866040850160208601613404565b83856060013586608001356129bf565b90506116bd6040805160608101909152806000815260200160008152602001606081525090565b60a08301357f0000000000000000000000000000000000000000000000000000000000000000843503611830576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117246040860160208701613404565b6001600160a01b03161461174a5760405162461bcd60e51b815260040161098d9061398b565b6080840135156117b75760405162461bcd60e51b815260206004820152603260248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a206e6f6e2d6044820152717a65726f207365636f6e646172792066656560701b606482015260840161098d565b6040805160608101909152806000815260200184815260200160405180602001604052808760400160208101906117ee9190613404565b6001600160a01b03169052604051611817919060200190516001600160a01b0316815260200190565b6040516020818303038152906040528152509150611962565b7f000000000000000000000000000000000000000000000000000000000000000084350361188f57306118696040860160208701613404565b6001600160a01b03160361188f5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600281526020018481526020016040518060a00160405280876000013581526020018760200160208101906118d09190613404565b6001600160a01b031681526020016118ee6060890160408a01613404565b6001600160a01b03908116825260808981013560208085019190915260a0808c01356040958601528451865181840152918601518416828601528585015190931660608083019190915285015181830152930151838201528151808403909101815260c090920190529052915062035b6090505b6000611a4e6040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b0316815260200189606001358152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b604051908082528060200260200182016040528015611a37578160200160208202803683370190505b50815260200185604051602001610f9191906138b5565b9050336001600160a01b0316817f78488d924de07bf96852578ad434a6c920f0835e97f9b302a77e1a77757c640b8787604051611a8c9291906139d6565b60405180910390a350506001600955505050565b6000611aac8484611307565b905060001981146113015781811015611b075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161098d565b6113018484848403611490565b6001600160a01b038316611b785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161098d565b6001600160a01b038216611bda5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161098d565b6001600160a01b03831660009081526020819052604090205481811015611c525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161098d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611301565b6108bf6126a4565b6001600160a01b038216611d205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098d565b6001600160a01b03821660009081526020819052604090205481811015611d945760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161098d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016115a8565b505050565b600160095414611e115760405162461bcd60e51b815260040161098d9061381a565b600260095560408201516001600160a01b0316611e845760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f20726563697069656e7420636f6e747261637420616464726573730000000000606482015260840161098d565b6000826080015111611ea85760405162461bcd60e51b815260040161098d9061394a565b60008260a0015111611f075760405162461bcd60e51b81526020600482015260346024820152600080516020613ed2833981519152604482015273081c9958da5c1a595b9d0819d85cc81b1a5b5a5d60621b606482015260840161098d565b81608001518260a0015110611f725760405162461bcd60e51b81526020600482015260376024820152600080516020613ef283398151915260448201527f6c696420726563697069656e7420676173206c696d6974000000000000000000606482015260840161098d565b60c08201516001600160a01b0316611fe05760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2066616c6c6261636b20726563697069656e7420616464726573730000000000606482015260840161098d565b611ffe82600001518360200151838560e001518661010001516129bf565b90506120256040805160608101909152806000815260200160008152602001606081525090565b608083015183517f0000000000000000000000000000000000000000000000000000000000000000900361212d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031684602001516001600160a01b0316146120a85760405162461bcd60e51b815260040161098d9061398b565b60408051606081019091528060018152602001848152602001604051806080016040528087604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b03168152506040516020016121149190613a39565b6040516020818303038152906040528152509150612269565b83517f0000000000000000000000000000000000000000000000000000000000000000900361218b57306001600160a01b031684602001516001600160a01b03160361218b5760405162461bcd60e51b815260040161098d9061398b565b604080516060810190915280600381526020018481526020016040518061010001604052808760000151815260200187602001516001600160a01b0316815260200187604001516001600160a01b03168152602001876060015181526020018760a0015181526020018760c001516001600160a01b031681526020018760800151815260200187610100015181525060405160200161222a9190613a8b565b604051602081830303815290604052815250915061213461224f8560600151516113a8565b612259919061385e565b6122669062035b60613609565b90505b60006123156040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000081526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020016040518060400160405280306001600160a01b031681526020018960e001518152508152602001848152602001600067ffffffffffffffff811115611a0e57611a0e61367d565b9050336001600160a01b0316817f76b18d78fd0b0c8a046526d2a500e1e5ced780f056df0acc4932088d10e665628787604051611a8c929190613b1b565b80600b60008282546123659190613609565b90915550506040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba90604401600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050505050565b60006123e130836113d1565b5090565b6000806123f0612bb9565b60408401516020015190915015612495576040830151516001600160a01b03166124725760405162461bcd60e51b815260206004820152602d60248201527f54656c65706f727465725570677261646561626c653a207a65726f206665652060448201526c746f6b656e206164647265737360981b606482015260840161098d565b604083015160208101519051612495916001600160a01b03909116908390612ccd565b604051630624488560e41b81526001600160a01b038216906362448850906124c1908690600401613c08565b6020604051808303816000875af11580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190613904565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c07f47d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190613904565b600754909150818311156125f85760405162461bcd60e51b815260206004820152603160248201527f54656c65706f727465725570677261646561626c653a20696e76616c6964205460448201527032b632b837b93a32b9103b32b939b4b7b760791b606482015260840161098d565b80831161266d5760405162461bcd60e51b815260206004820152603f60248201527f54656c65706f727465725570677261646561626c653a206e6f7420677265617460448201527f6572207468616e2063757272656e74206d696e696d756d2076657273696f6e00606482015260840161098d565b6007839055604051839082907fa9a7ef57e41f05b4c15480842f5f0c27edfcbb553fed281f7c4068452cc1c02d90600090a3505050565b6008546001600160a01b031633146108bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600554036127a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161098d565b6002600555565b7f0000000000000000000000000000000000000000000000000000000000000000831461281f5760405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f3634b21039b7bab931b29031b430b4b760811b606482015260840161098d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146128b45760405162461bcd60e51b81526020600482015260386024820152600080516020613ef283398151915260448201527f6c696420746f6b656e20736f7572636520616464726573730000000000000000606482015260840161098d565b6000818060200190518101906128ca9190613cd4565b905060006128dd826020015160016110ae565b90506000825160038111156128f4576128f461389f565b0361292957600082604001518060200190518101906129139190613d78565b9050612923816000015183612da1565b506129b8565b60018251600381111561293e5761293e61389f565b03612969576000826040015180602001905181019061295d9190613dc4565b90506129238183612ea0565b60405162461bcd60e51b81526020600482015260306024820152600080516020613ef283398151915260448201526f6c6964206d657373616765207479706560801b606482015260840161098d565b5050505050565b600085612a225760405162461bcd60e51b815260206004820152603a6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e20626c6f636b636861696e204944000000000000606482015260840161098d565b6001600160a01b038516612a8c5760405162461bcd60e51b815260206004820152603b6024820152600080516020613ed283398151915260448201527f2064657374696e6174696f6e2062726964676520616464726573730000000000606482015260840161098d565b612a95846123d5565b9350612aa18284613609565b8411612b155760405162461bcd60e51b815260206004820152603d60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420616d6f756e7420746f20636f7665722066656573000000606482015260840161098d565b612b1f838561361c565b9350612b2a84612ff0565b6000612b378560006110ae565b905060008111612baf5760405162461bcd60e51b815260206004820152603b60248201527f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e737560448201527f6666696369656e7420746f6b656e7320746f207472616e736665720000000000606482015260840161098d565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d820e64f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190613e7b565b9050612c62816001600160a01b031660009081526006602052604090205460ff1690565b15612cc85760405162461bcd60e51b815260206004820152603060248201527f54656c65706f727465725570677261646561626c653a2054656c65706f72746560448201526f1c881cd95b991a5b99c81c185d5cd95960821b606482015260840161098d565b919050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613904565b612d4c9190613609565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150611301908590613030565b600a5481908015612e535780831115612e035760408051828152600060208201527f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1612df7818361361c565b6000600a559150612e53565b6000612e0f848361361c565b60408051868152602081018390529192507f244160b15e69cc411f041d94ae7fab6f6bba85dade8403216c05ff4b920d5449910160405180910390a1600a55600091505b836001600160a01b03167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b83604051612e8e91815260200190565b60405180910390a26113018483612353565b600a5415612eb657610b8d826060015182612da1565b612ec03082612353565b60008260200151604051602401612ed7919061334c565b60408051601f198184030181529181526020820180516001600160e01b03166245201f60e11b1790528401518451919250600091612f189190859085613102565b90508015612f6c5783600001516001600160a01b03167f104deb555f67e63782bb817bc26c39050894645f9b9f29c4be8ae68d0e8b7ff484604051612f5f91815260200190565b60405180910390a2611301565b83600001516001600160a01b03167fb9eaeae386d339f8115782f297a9e5f0e13fb587cd6b0d502f113cb8dd4d6cb084604051612fab91815260200190565b60405180910390a283606001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156129b8573d6000803e3d6000fd5b612ffa3082611cc0565b60405162010203600160981b019082156108fc029083906000818181858888f19350505050158015610b8d573d6000803e3d6000fd5b6000613085826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d99092919063ffffffff16565b805190915015611dea57808060200190518101906130a39190613e98565b611dea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161098d565b6000845a10156131545760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e73756666696369656e74206761730000000000604482015260640161098d565b834710156131a45760405162461bcd60e51b815260206004820152601d60248201527f43616c6c5574696c733a20696e73756666696369656e742076616c7565000000604482015260640161098d565b826001600160a01b03163b6000036131be575060006131d1565b600080600084516020860188888bf19150505b949350505050565b60606131d1848460008585600080866001600160a01b031685876040516132009190613eb5565b60006040518083038185875af1925050503d806000811461323d576040519150601f19603f3d011682016040523d82523d6000602084013e613242565b606091505b50915091506132538783838761325e565b979650505050505050565b606083156132cd5782516000036132c6576001600160a01b0385163b6132c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161098d565b50816131d1565b6131d183838151156132e25781518083602001fd5b8060405162461bcd60e51b815260040161098d919061334c565b60005b838110156133175781810151838201526020016132ff565b50506000910152565b600081518084526133388160208601602086016132fc565b601f01601f19169290920160200192915050565b6020815260006111366020830184613320565b6001600160a01b03811681146109a057600080fd5b8035612cc88161335f565b6000806040838503121561339257600080fd5b823561339d8161335f565b946020939093013593505050565b600060c082840312156133bd57600080fd5b50919050565b6000806000606084860312156133d857600080fd5b83356133e38161335f565b925060208401356133f38161335f565b929592945050506040919091013590565b60006020828403121561341657600080fd5b81356111368161335f565b60006020828403121561343357600080fd5b5035919050565b60006020828403121561344c57600080fd5b813567ffffffffffffffff81111561346357600080fd5b8201610120818503121561113657600080fd5b80151581146109a057600080fd5b6000806040838503121561349757600080fd5b8235915060208301356134a981613476565b809150509250929050565b600080600080606085870312156134ca57600080fd5b8435935060208501356134dc8161335f565b9250604085013567ffffffffffffffff808211156134f957600080fd5b818701915087601f83011261350d57600080fd5b81358181111561351c57600080fd5b88602082850101111561352e57600080fd5b95989497505060200194505050565b6000806040838503121561355057600080fd5b823561355b8161335f565b915060208301356134a98161335f565b600181811c9082168061357f57607f821691505b6020821081036133bd57634e487b7160e01b600052602260045260246000fd5b60208082526034908201527f4e6174697665546f6b656e44657374696e6174696f6e3a20636f6e7472616374604082015273081d5b99195c98dbdb1b185d195c985b1a5e995960621b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610967576109676135f3565b81810381811115610967576109676135f3565b6020808252602e908201527f54656c65706f727465725570677261646561626c653a207a65726f2054656c6560408201526d706f72746572206164647265737360901b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156136b7576136b761367d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156136e6576136e661367d565b604052919050565b600067ffffffffffffffff8211156137085761370861367d565b50601f01601f191660200190565b600082601f83011261372757600080fd5b813561373a613735826136ee565b6136bd565b81815284602083860101111561374f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561377f57600080fd5b613787613693565b8235815261379760208401613374565b60208201526137a860408401613374565b6040820152606083013567ffffffffffffffff8111156137c757600080fd5b6137d336828601613716565b6060830152506080830135608082015260a083013560a08201526137f960c08401613374565b60c082015260e0838101359082015261010092830135928101929092525090565b60208082526024908201527f53656e645265656e7472616e637947756172643a2073656e64207265656e7472604082015263616e637960e01b606082015260800190565b8082028115828204841417610967576109676135f3565b634e487b7160e01b600052601260045260246000fd5b60008261389a5761389a613875565b500490565b634e487b7160e01b600052602160045260246000fd5b6020815260008251600481106138db57634e487b7160e01b600052602160045260246000fd5b806020840152506020830151604083015260408301516060808401526131d16080840182613320565b60006020828403121561391657600080fd5b5051919050565b60008261392c5761392c613875565b500690565b600060018201613943576139436135f3565b5060010190565b6020808252603390820152600080516020613ed2833981519152604082015272081c995c5d5a5c99590819d85cc81b1a5b5a5d606a1b606082015260800190565b6020808252603e90820152600080516020613ef283398151915260408201527f6c69642064657374696e6174696f6e2062726964676520616464726573730000606082015260800190565b8235815260e0810160208401356139ec8161335f565b6001600160a01b039081166020840152604085013590613a0b8261335f565b166040830152606084810135908301526080808501359083015260a0938401359382019390935260c0015290565b60208152600060018060a01b03808451166020840152602084015160806040850152613a6860a0850182613320565b905060408501516060850152816060860151166080850152809250505092915050565b60208152815160208201526000602083015160018060a01b03808216604085015280604086015116606085015250506060830151610100806080850152613ad6610120850183613320565b9150608085015160a085015260a0850151613afc60c08601826001600160a01b03169052565b5060c085015160e085015260e085015181850152508091505092915050565b604081528251604082015260006020840151613b4260608401826001600160a01b03169052565b5060408401516001600160a01b03166080830152606084015161012060a08401819052613b73610160850183613320565b9150608086015160c085015260a086015160e085015260c0860151610100613ba5818701836001600160a01b03169052565b60e0880151928601929092525090940151610140830152506020015290565b600081518084526020808501945080840160005b83811015613bfd5781516001600160a01b031687529582019590820190600101613bd8565b509495945050505050565b60208152815160208201526000602083015160018060a01b03808216604085015260408501519150808251166060850152506020810151608084015250606083015160a0830152608083015160e060c0840152613c69610100840182613bc4565b905060a0840151601f198483030160e0850152613c868282613320565b95945050505050565b600082601f830112613ca057600080fd5b8151613cae613735826136ee565b818152846020838601011115613cc357600080fd5b6131d18260208301602087016132fc565b600060208284031215613ce657600080fd5b815167ffffffffffffffff80821115613cfe57600080fd5b9083019060608286031215613d1257600080fd5b604051606081018181108382111715613d2d57613d2d61367d565b604052825160048110613d3f57600080fd5b815260208381015190820152604083015182811115613d5d57600080fd5b613d6987828601613c8f565b60408301525095945050505050565b600060208284031215613d8a57600080fd5b6040516020810181811067ffffffffffffffff82111715613dad57613dad61367d565b6040528251613dbb8161335f565b81529392505050565b600060208284031215613dd657600080fd5b815167ffffffffffffffff80821115613dee57600080fd5b9083019060808286031215613e0257600080fd5b604051608081018181108382111715613e1d57613e1d61367d565b6040528251613e2b8161335f565b8152602083015182811115613e3f57600080fd5b613e4b87828601613c8f565b6020830152506040830151604082015260608301519250613e6b8361335f565b6060810192909252509392505050565b600060208284031215613e8d57600080fd5b81516111368161335f565b600060208284031215613eaa57600080fd5b815161113681613476565b60008251613ec78184602087016132fc565b919091019291505056fe54656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f54656c65706f72746572546f6b656e44657374696e6174696f6e3a20696e7661a2646970667358221220792d78fea3c77831c59d023c68c91dfb2be056df78cf86b58bc1ad0352ffc4f464736f6c6343000812003354656c65706f72746572546f6b656e44657374696e6174696f6e3a207a65726f", } // NativeTokenDestinationABI is the input ABI used to generate the binding from. diff --git a/contracts/src/NativeTokenDestination.sol b/contracts/src/NativeTokenDestination.sol index b21892d51..b4802b59f 100644 --- a/contracts/src/NativeTokenDestination.sol +++ b/contracts/src/NativeTokenDestination.sol @@ -74,15 +74,16 @@ contract NativeTokenDestination is address public constant BURNED_TX_FEES_ADDRESS = 0x0100000000000000000000000000000000000000; /** - * @notice The address where native tokens are sent to be burned to bridge to other chains. - * This address is distinct from {BURNED_TX_FEES_ADDRESS} so that the amount of burned transaction + * @notice The address where native tokens are sent in order to be burned to bridge to other chains. + * + * @dev This address is distinct from {BURNED_TX_FEES_ADDRESS} so that the amount of burned transaction * fees and burned bridged amounts can be tracked separately. * This address was chosen arbitrarily. */ address public constant BURNED_FOR_BRIDGE_ADDRESS = 0x0100000000000000000000000000000000010203; /** - * @notice Address used by the source chain to blackhole funds, effectively burning them. + * @notice Address used to blackhole funds on the source chain, effectively burning them. * * @dev When reporting burned transaction fee amounts, this address is used as the recipient * address for the funds to be sent to be burned on the source chain. @@ -91,7 +92,7 @@ contract NativeTokenDestination is address public constant SOURCE_CHAIN_BURN_ADDRESS = 0x0100000000000000000000000000000000010203; /** - * @notice Address of the Native Minter precompile contract. + * @notice The native minter precompile. */ INativeMinter public constant NATIVE_MINTER = INativeMinter(0x0200000000000000000000000000000000000001);