@tokamak-network/thanos-contracts
Version:
992 lines • 139 kB
JSON
{
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "localToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "remoteToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ERC20BridgeFinalized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "localToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "remoteToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ERC20BridgeInitiated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "l1Token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "l2Token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ERC20DepositInitiated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "l1Token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "l2Token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ERC20WithdrawalFinalized",
"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": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ETHBridgeFinalized",
"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": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ETHBridgeInitiated",
"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": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ETHDepositInitiated",
"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": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "extraData",
"type": "bytes"
}
],
"name": "ETHWithdrawalFinalized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [],
"name": "MESSENGER",
"outputs": [
{
"internalType": "contract CrossDomainMessenger",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "OTHER_BRIDGE",
"outputs": [
{
"internalType": "contract StandardBridge",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_localToken",
"type": "address"
},
{
"internalType": "address",
"name": "_remoteToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_localToken",
"type": "address"
},
{
"internalType": "address",
"name": "_remoteToken",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeERC20To",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeETHTo",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeNativeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "bridgeNativeTokenTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_l1Token",
"type": "address"
},
{
"internalType": "address",
"name": "_l2Token",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_l1Token",
"type": "address"
},
{
"internalType": "address",
"name": "_l2Token",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositERC20To",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositETHTo",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositNativeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "depositNativeTokenTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "deposits",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_localToken",
"type": "address"
},
{
"internalType": "address",
"name": "_remoteToken",
"type": "address"
},
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "finalizeBridgeERC20",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "finalizeBridgeETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_l1Token",
"type": "address"
},
{
"internalType": "address",
"name": "_l2Token",
"type": "address"
},
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "finalizeERC20Withdrawal",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_extraData",
"type": "bytes"
}
],
"name": "finalizeETHWithdrawal",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract CrossDomainMessenger",
"name": "_messenger",
"type": "address"
},
{
"internalType": "address",
"name": "_nativeTokenAddress",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "l2TokenBridge",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messenger",
"outputs": [
{
"internalType": "contract CrossDomainMessenger",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nativeTokenAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "onApprove",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "otherBridge",
"outputs": [
{
"internalType": "contract StandardBridge",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "unpackOnApproveData",
"outputs": [
{
"internalType": "uint32",
"name": "_minGasLimit",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"address": "0x3fa891B90F7B78e7A1e527819e523A3A096dF2Ab",
"args": [],
"bytecode": "0x60a06040523480156200001157600080fd5b50734200000000000000000000000000000000000010608052620000376000806200003d565b620001d8565b600054600390610100900460ff1615801562000060575060005460ff8083169116105b620000c95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100179055620000e88362000149565b603280546001600160a01b0319166001600160a01b0384161790556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600054610100900460ff16620001b65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000c0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6080516135756200021e6000396000818161048e01528181610565015281816106b301528181610d7c01528181611a94015281816120d8015261288301526135756000f3fe6080604052600436106101bb5760003560e01c8063838b2520116100ec57806395911e5a1161008a578063b1a1a88211610064578063b1a1a88214610615578063c89701a214610556578063e11013dd14610628578063e56b44a31461043c57600080fd5b806395911e5a146104d05780639a2ac6d5146105e2578063a9f9e675146105f557600080fd5b80638f601f66116100c65780638f601f661461051057806391c49bf814610556578063927ede2d1461058957806392a162cf146105b457600080fd5b8063838b2520146104b057806386c1a9de146104d057806387087623146104f057600080fd5b8063485cc9551161015957806354fd4d501161013357806354fd4d50146103e65780635791f5c21461043c57806358a997f61461045c5780637f46ddb21461047c57600080fd5b8063485cc955146103795780634d0047ee14610399578063540abf73146103c657600080fd5b80631532ec34116101955780631532ec34146102e15780631635f5fd146102f45780633cb747bf146103075780634273ca161461035957600080fd5b80630166a07a1461027957806301ffc9a71461029957806309fc8843146102ce57600080fd5b3661027457333b15610254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610272333362030d406040518060200160405280600081525061063b565b005b600080fd5b34801561028557600080fd5b50610272610294366004612db4565b61064e565b3480156102a557600080fd5b506102b96102b4366004612e4c565b610b93565b60405190151581526020015b60405180910390f35b6102726102dc366004612ea7565b610c2c565b6102726102ef366004612efa565b610d03565b610272610302366004612efa565b610d17565b34801561031357600080fd5b506003546103349073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c5565b34801561036557600080fd5b506102b9610374366004612efa565b611178565b34801561038557600080fd5b50610272610394366004612f6d565b611283565b3480156103a557600080fd5b506032546103349073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103d257600080fd5b506102726103e1366004612fa6565b61140e565b3480156103f257600080fd5b5061042f6040518060400160405280600581526020017f312e342e3100000000000000000000000000000000000000000000000000000081525081565b6040516102c59190613093565b34801561044857600080fd5b506102726104573660046130a6565b611453565b34801561046857600080fd5b506102726104773660046130fa565b611496565b34801561048857600080fd5b506103347f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bc57600080fd5b506102726104cb366004612fa6565b611572565b3480156104dc57600080fd5b506102726104eb36600461317d565b6115b7565b3480156104fc57600080fd5b5061027261050b3660046130fa565b611689565b34801561051c57600080fd5b5061054861052b366004612f6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102c5565b34801561056257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610334565b34801561059557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610334565b3480156105c057600080fd5b506105d46105cf366004613206565b61175d565b6040516102c59291906132d5565b6102726105f03660046132f4565b6117a6565b34801561060157600080fd5b50610272610610366004612db4565b6117e8565b610272610623366004612ea7565b6117f7565b6102726106363660046132f4565b6118c8565b610648848434858561190b565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561073d5750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190613323565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161024b565b6107f887611bcf565b801561081f575060325473ffffffffffffffffffffffffffffffffffffffff888116911614155b1561096d5761082e8787611c2b565b6108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161024b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b50505050610b46565b73ffffffffffffffffffffffffffffffffffffffff87161580156109ba575073ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000486145b15610ab35760006109dc855a8660405180602001604052806000815250611d4b565b905080610a6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161024b565b610aad86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6592505050565b50610ad4565b610ad473ffffffffffffffffffffffffffffffffffffffff88168585611dd8565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610b1290849061336f565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b610b8a878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eac92505050565b50505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca16000000000000000000000000000000000000000000000000000000001480610c2657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b333b15610cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161024b565b610cfe3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061190b92505050565b505050565b610d108585858585610d17565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610e065750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190613323565b73ffffffffffffffffffffffffffffffffffffffff16145b610eb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161024b565b3415610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206d757374206e6f74207265636569766560448201527f204574686572206576656e20696620746869732069732070617961626c650000606482015260840161024b565b3073ffffffffffffffffffffffffffffffffffffffff851603610feb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161024b565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161024b565b6032546003546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152306024820152604481018690529116906323b872dd906064016020604051808303816000875af1158015611117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113b9190613386565b50603254610d109073ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead0000878787878761064e565b60325460009073ffffffffffffffffffffffffffffffffffffffff163314611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f6f6e6c7920616363657074206e617469766520746f6b656e20617070726f766560448201527f2063616c6c6261636b0000000000000000000000000000000000000000000000606482015260840161024b565b60008061126485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061175d92505050565b915091506112758889888585611f3a565b506001979650505050505050565b600054600390610100900460ff161580156112a5575060005460ff8083169116105b611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161024b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561136b836121c4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610b8a87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122a292505050565b610d103386868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3a92505050565b333b15611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161024b565b61156a86863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e592505050565b505050505050565b610b8a87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122e592505050565b333b15611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161024b565b6106483333868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3a92505050565b333b15611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161024b565b61156a86863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122a292505050565b6000606060048351101561178257505060408051602081019091526000815262030d40905b825160208401805160e01c9350906004811461179f576004820192505b5050915091565b61064833858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063b92505050565b610b8a8787878787878761064e565b333b15611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161024b565b610cfe33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061063b92505050565b6106483385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061190b92505050565b82341461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161024b565b7342000000000000000000000000000000000004866000527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020527f93848fc853fd2af31e80d9c5877c6e8e6fe1846ae85b985f9f0f735e671f910054611a039084906133a8565b7342000000000000000000000000000000000004866000527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b6020527f93848fc853fd2af31e80d9c5877c6e8e6fe1846ae85b985f9f0f735e671f910055611a6d858585846122f4565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b907f0000000000000000000000000000000000000000000000000000000000000000907f0166a07a0000000000000000000000000000000000000000000000000000000090611b0390734200000000000000000000000000000000000486906000908c908c908c908b906024016133c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611b969291879060040161341b565b600060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050505050505050565b6000611bfb827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80610c265750610c26827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b6000611c57837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611d00578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccb9190613323565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050610c26565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca7573d6000803e3d6000fd5b600080600080845160208601878a8af19695505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611dc4929190613460565b60405180910390a361064884848484612384565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610cfe9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526123e3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611f2493929190613479565b60405180910390a461156a8686868686866124ef565b603254611f5f9073ffffffffffffffffffffffffffffffffffffffff16863086612577565b6032546003546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810186905291169063095ea7b3906044016020604051808303816000875af1158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe9190613386565b5060325473ffffffffffffffffffffffffffffffffffffffff16600090815260026020908152604080832073deaddeaddeaddeaddeaddeaddeaddeaddead000084529091529020546120519084906133a8565b6032805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020908152604080832073deaddeaddeaddeaddeaddeaddeaddeaddead000080855292529091209390935590546120b192911690878787866125d5565b60035460405173ffffffffffffffffffffffffffffffffffffffff9091169063e0e593c5907f00000000000000000000000000000000000000000000000000000000000000009086907f1635f5fd0000000000000000000000000000000000000000000000000000000090612130908b908b9085908a906024016134b7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b969392918890600401613500565b600054610100900460ff1661225b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161024b565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60325473ffffffffffffffffffffffffffffffffffffffff8089169116036122d6576122d18585858585611f3a565b610b8a565b610b8a87878787878787612663565b610b8a878787878787876122a2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612353929190613460565b60405180910390a350505050565b600061236c836129ab565b801561237d575061237d8383612a0f565b9392505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612353929190613460565b6000612445826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612ade9092919063ffffffff16565b805190915015610cfe57808060200190518101906124639190613386565b610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161024b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161256793929190613479565b60405180910390a4505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106489085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e2a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161264d93929190613479565b60405180910390a461156a868686868686612af5565b61266c87611bcf565b156127ba5761267b8787611c2b565b61272d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161024b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561279d57600080fd5b505af11580156127b1573d6000803e3d6000fd5b5050505061284e565b6127dc73ffffffffffffffffffffffffffffffffffffffff8816863086612577565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461281a9084906133a8565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61285c8787878787866125d5565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b907f0000000000000000000000000000000000000000000000000000000000000000907f0166a07a00000000000000000000000000000000000000000000000000000000906128dd908b908d908c908c908c908b906024016133c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526129709291879060040161341b565b600060405180830381600087803b15801561298a57600080fd5b505af115801561299e573d6000803e3d6000fd5b5050505050505050505050565b60006129d7827f01ffc9a700000000000000000000000000000000000000000000000000000000612a0f565b8015610c265750612a08827fffffffff00000000000000000000000000000000000000000000000000000000612a0f565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612ac7575060208210155b8015612ad35750600081115b979650505050505050565b6060612aed8484600085612b6d565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161256793929190613479565b606082471015612bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161024b565b73ffffffffffffffffffffffffffffffffffffffff85163b612c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161024b565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ca6919061354c565b60006040518083038185875af1925050503d8060008114612ce3576040519150601f19603f3d011682016040523d82523d6000602084013e612ce8565b606091505b5091509150612ad382828660608315612d0257508161237d565b825115612d125782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024b9190613093565b73ffffffffffffffffffffffffffffffffffffffff81168114612d6857600080fd5b50565b60008083601f840112612d7d57600080fd5b50813567ffffffffffffffff811115612d9557600080fd5b602083019150836020828501011115612dad57600080fd5b9250929050565b600080600080600080600060c0888a031215612dcf57600080fd5b8735612dda81612d46565b96506020880135612dea81612d46565b95506040880135612dfa81612d46565b94506060880135612e0a81612d46565b93506080880135925060a088013567ffffffffffffffff811115612e2d57600080fd5b612e398a828b01612d6b565b989b979a50959850939692959293505050565b600060208284031215612e5e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461237d57600080fd5b803563ffffffff81168114612ea257600080fd5b919050565b600080600060408486031215612ebc57600080fd5b612ec584612e8e565b9250602084013567ffffffffffffffff811115612ee157600080fd5b612eed86828701612d6b565b9497909650939450505050565b600080600080600060808688031215612f1257600080fd5b8535612f1d81612d46565b94506020860135612f2d81612d46565b935060408601359250606086013567ffffffffffffffff811115612f5057600080fd5b612f5c88828901612d6b565b969995985093965092949392505050565b60008060408385031215612f8057600080fd5b8235612f8b81612d46565b91506020830135612f9b81612d46565b809150509250929050565b600080600080600080600060c0888a031215612fc157600080fd5b8735612fcc81612d46565b96506020880135612fdc81612d46565b95506040880135612fec81612d46565b94506060880135935061300160808901612e8e565b925060a088013567ffffffffffffffff811115612e2d57600080fd5b60005b83811015613038578181015183820152602001613020565b838111156106485750506000910152565b6000815180845261306181602086016020860161301d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184613049565b6000806000806000608086880312156130be57600080fd5b85356130c981612d46565b9450602086013593506130de60408701612e8e565b9250606086013567ffffffffffffffff811115612f5057600080fd5b60008060008060008060a0878903121561311357600080fd5b863561311e81612d46565b9550602087013561312e81612d46565b94506040870135935061314360608801612e8e565b9250608087013567ffffffffffffffff81111561315f57600080fd5b61316b89828a01612d6b565b979a9699509497509295939492505050565b6000806000806060858703121561319357600080fd5b843593506131a360208601612e8e565b9250604085013567ffffffffffffffff8111156131bf57600080fd5b6131cb87828801612d6b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561321857600080fd5b813567ffffffffffffffff8082111561323057600080fd5b818401915084601f83011261324457600080fd5b813581811115613256576132566131d7565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561329c5761329c6131d7565b816040528281528760208487010111156132b557600080fd5b826020860160208301376000928101602001929092525095945050505050565b63ffffffff83168152604060208201526000612aed6040830184613049565b6000806000806060858703121561330a57600080fd5b843561331581612d46565b93506131a360208601612e8e565b60006020828403121561333557600080fd5b815161237d81612d46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561338157613381613340565b500390565b60006020828403121561339857600080fd5b8151801515811461237d57600080fd5b600082198211156133bb576133bb613340565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261340f60c0830184613049565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061344a6060830185613049565b905063ffffffff83166040830152949350505050565b828152604060208201526000612aed6040830184613049565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006134ae6060830184613049565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526134f66080830184613049565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526080604082015260006135356080830185613049565b905063ffffffff8316606083015295945050505050565b6000825161355e81846020870161301