diff --git a/packages/app/src/contracts/Tellor.json b/packages/app/src/contracts/Tellor.json index 0b4d1fa5..2b15f185 100644 --- a/packages/app/src/contracts/Tellor.json +++ b/packages/app/src/contracts/Tellor.json @@ -1,804 +1,978 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TellorModule", - "sourceName": "contracts/TellorModule.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_avatar", - "type": "address" - }, - { - "internalType": "address", - "name": "_target", - "type": "address" - }, - { - "internalType": "address payable", - "name": "_tellorAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_cooldown", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_expiration", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousAvatar", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAvatar", - "type": "address" - } - ], - "name": "AvatarSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "guard", - "type": "address" - } - ], - "name": "ChangedGuard", - "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": "queryId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "string", - "name": "proposalId", - "type": "string" - } - ], - "name": "ProposalAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousTarget", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newTarget", - "type": "address" - } - ], - "name": "TargetSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "initiator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "avatar", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "TellorModuleSetup", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INVALIDATED", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TRANSACTION_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_proposalId", - "type": "string" - }, - { - "internalType": "bytes32[]", - "name": "_txHashes", - "type": "bytes32[]" - } - ], - "name": "addProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "avatar", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_proposalId", - "type": "string" - }, - { - "internalType": "bytes32[]", - "name": "_txHashes", - "type": "bytes32[]" - } - ], - "name": "buildProposal", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "cooldown", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_proposalId", - "type": "string" - }, - { - "internalType": "bytes32[]", - "name": "_txHashes", - "type": "bytes32[]" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "_operation", - "type": "uint8" - } - ], - "name": "executeProposal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_proposalId", - "type": "string" - }, - { - "internalType": "bytes32[]", - "name": "_txHashes", - "type": "bytes32[]" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "_operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "_txIndex", - "type": "uint256" - } - ], - "name": "executeProposalWithIndex", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "executedProposalTransactions", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - } - ], - "name": "getCurrentValue", - "outputs": [ - { - "internalType": "bool", - "name": "_ifRetrieve", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_value", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_timestampRetrieved", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "getDataBefore", - "outputs": [ - { - "internalType": "bool", - "name": "_ifRetrieve", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_value", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_timestampRetrieved", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGuard", - "outputs": [ - { - "internalType": "address", - "name": "_guard", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "getIndexForDataBefore", - "outputs": [ - { - "internalType": "bool", - "name": "_found", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - } - ], - "name": "getNewValueCountbyQueryId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_proposalId", - "type": "string" - } - ], - "name": "getQueryId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - } - ], - "name": "getTimestampbyQueryIdandIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "enum Enum.Operation", - "name": "_operation", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "getTransactionHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "guard", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "isInDispute", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposalHash", - "type": "bytes32" - } - ], - "name": "markProposalWithExpiredResultAsInvalid", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "queryIds", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "resultExpiration", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_queryId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "retrieveData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_avatar", - "type": "address" - } - ], - "name": "setAvatar", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_guard", - "type": "address" - } - ], - "name": "setGuard", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_target", - "type": "address" - } - ], - "name": "setTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_initParams", - "type": "bytes" - } - ], - "name": "setUp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "target", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tellor", - "outputs": [ - { - "internalType": "contract ITellor", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620057e4380380620057e48339818101604052810190620000379190620004e8565b8280606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600085858585856040516020016200009795949392919062000734565b6040516020818303038152906040529050620000b981620000c560201b60201c565b5050505050506200093a565b600080600080600085806020019051810190620000e3919062000466565b94509450945094509450606860149054906101000a900460ff161562000140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013790620007b3565b60405180910390fd5b6001606860146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620001ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c590620007f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002389062000791565b60405180910390fd5b60008163ffffffff1614806200026b5750603c82826200026291906200082a565b63ffffffff1610155b620002ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a490620007d5565b60405180910390fd5b84606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606860156101000a81548163ffffffff021916908363ffffffff16021790555081606a60006101000a81548163ffffffff021916908363ffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8cf089e89d710ad7a888a28dd8f52df5b7e0d21ef9001a76e4688b06f549391c8660405162000411919062000717565b60405180910390a3505050505050565b6000815190506200043281620008ec565b92915050565b600081519050620004498162000906565b92915050565b600081519050620004608162000920565b92915050565b600080600080600060a086880312156200047f57600080fd5b60006200048f8882890162000438565b9550506020620004a28882890162000438565b9450506040620004b58882890162000438565b9350506060620004c8888289016200044f565b9250506080620004db888289016200044f565b9150509295509295909350565b600080600080600060a086880312156200050157600080fd5b6000620005118882890162000421565b9550506020620005248882890162000421565b9450506040620005378882890162000438565b93505060606200054a888289016200044f565b92505060806200055d888289016200044f565b9150509295509295909350565b620005758162000879565b82525050565b620005868162000865565b82525050565b60006200059b601e8362000819565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000620005dd602e8362000819565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b60006200064560448362000819565b91507f5468657265206e65656420746f206265206174206c656173742036307320626560008301527f747765656e20656e64206f6620636f6f6c646f776e20616e642065787069726160208301527f74696f6e000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000620006d3601e8362000819565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6200071181620008ad565b82525050565b60006020820190506200072e60008301846200057b565b92915050565b600060a0820190506200074b60008301886200057b565b6200075a60208301876200057b565b6200076960408301866200056a565b62000778606083018562000706565b62000787608083018462000706565b9695505050505050565b60006020820190508181036000830152620007ac816200058c565b9050919050565b60006020820190508181036000830152620007ce81620005ce565b9050919050565b60006020820190508181036000830152620007f08162000636565b9050919050565b600060208201905081810360008301526200081281620006c4565b9050919050565b600082825260208201905092915050565b60006200083782620008ad565b91506200084483620008ad565b9250828210156200085a5762000859620008bd565b5b828203905092915050565b600062000872826200088d565b9050919050565b600062000886826200088d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b620008f78162000865565b81146200090357600080fd5b50565b620009118162000879565b81146200091d57600080fd5b50565b6200092b81620008ad565b81146200093757600080fd5b50565b614e9a806200094a6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806377b03e0d1161011a578063adf1639d116100ad578063d4b839921161007c578063d4b839921461061a578063e19a9dd914610638578063ea0b9c3a14610654578063f2fde38b14610684578063ff0394eb146106a057610206565b8063adf1639d1461056a578063c5958af91461059c578063c9106389146105cc578063ce5e11bf146105ea57610206565b80638da5cb5b116100e95780638da5cb5b146104e25780638dcd266114610500578063a4f9edbf1461051c578063a792765f1461053857610206565b806377b03e0d14610458578063787a08a6146104885780637ceab3b1146104a657806388633b7b146104c457610206565b80632b5000411161019d57806344e87f911161016c57806344e87f91146103b45780634e1b8374146103e45780635aef7de614610414578063715018a614610432578063776d1a011461043c57610206565b80632b500041146103065780632bf87cc01461033657806331460e3d146103665780633408e4701461039657610206565b806322617d97116101d957806322617d971461027f5780632351a8771461029b578063276e832a146102b757806329449085146102d557610206565b8063086cfca81461020b57806314604b8c146102275780631959ad5b146102435780631db61b5414610261575b600080fd5b610225600480360381019061022091906131e8565b6106be565b005b610241600480360381019061023c919061364b565b610800565b005b61024b610ccd565b60405161025891906143dd565b60405180910390f35b610269610cf3565b604051610276919061429b565b60405180910390f35b610299600480360381019061029491906133aa565b610d1a565b005b6102b560048036038101906102b0919061357a565b610f82565b005b6102bf610f9a565b6040516102cc9190614725565b60405180910390f35b6102ef60048036038101906102ea919061340f565b610fb0565b6040516102fd929190614272565b60405180910390f35b610320600480360381019061031b91906132b1565b61112b565b60405161032d919061429b565b60405180910390f35b610350600480360381019061034b91906134cd565b61114c565b60405161035d919061429b565b60405180910390f35b610380600480360381019061037b91906133aa565b6111a0565b60405161038d919061429b565b60405180910390f35b61039e6111b8565b6040516103ab919061470a565b60405180910390f35b6103ce60048036038101906103c9919061340f565b6111c5565b6040516103db9190614219565b60405180910390f35b6103fe60048036038101906103f991906133d3565b6114ce565b60405161040b9190614219565b60405180910390f35b61041c6114fd565b60405161042991906140f9565b60405180910390f35b61043a611523565b005b610456600480360381019061045191906131e8565b6115ab565b005b610472600480360381019061046d91906133aa565b6116ed565b60405161047f919061470a565b60405180910390f35b61049061192a565b60405161049d9190614725565b60405180910390f35b6104ae611940565b6040516104bb91906140f9565b60405180910390f35b6104cc611966565b6040516104d9919061429b565b60405180910390f35b6104ea61198d565b6040516104f791906140f9565b60405180910390f35b61051a6004803603810190610515919061350e565b6119b7565b005b6105366004803603810190610531919061344b565b611a98565b005b610552600480360381019061054d919061340f565b611de1565b60405161056193929190614234565b60405180910390f35b610584600480360381019061057f91906133aa565b611e93565b60405161059393929190614234565b60405180910390f35b6105b660048036038101906105b1919061340f565b611f4c565b6040516105c391906143bb565b60405180910390f35b6105d4612198565b6040516105e191906140f9565b60405180910390f35b61060460048036038101906105ff919061340f565b6121c2565b604051610611919061470a565b60405180910390f35b610622612404565b60405161062f91906140f9565b60405180910390f35b610652600480360381019061064d91906131e8565b61242a565b005b61066e6004803603810190610669919061350e565b612660565b60405161067b9190614413565b60405180910390f35b61069e600480360381019061069991906131e8565b6126c8565b005b6106a86127c0565b6040516106b5919061429b565b60405180910390f35b6106c66127e7565b73ffffffffffffffffffffffffffffffffffffffff166106e461198d565b73ffffffffffffffffffffffffffffffffffffffff161461073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610731906145ca565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b600061080c8888612660565b8051906020012090506000606b60008381526020019081526020016000205490506000801b811415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a9061466a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b8114156108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09061468a565b60405180910390fd5b60006108e8888888888861112b565b905080898581518110610924577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906146ea565b60405180910390fd5b600080600061097b8542611de1565b925092509250826109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b8906144aa565b60405180910390fd5b42606a60009054906101000a900463ffffffff1663ffffffff16826109e6919061489f565b10610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d9061464a565b60405180910390fd5b600082806020019051810190610a3c9190613381565b905080610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906146aa565b60405180910390fd5b6000606860159054906101000a900463ffffffff16905060008163ffffffff161480610abb5750428163ffffffff1684610ab8919061489f565b10155b610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061452a565b60405180910390fd5b6000891480610b8357506069600089815260200190815260200160002060008f60018c610b2791906149e8565b81518110610b5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff165b610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061446a565b60405180910390fd5b60696000898152602001908152602001600020600087815260200190815260200160002060009054906101000a900460ff1615610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061462a565b60405180910390fd5b6001606960008a8152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff021916908315150217905550610c7d8d8d8d8d6127ef565b610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906146ca565b60405180910390fd5b505050505050505050505050505050565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b81565b6000606860159054906101000a900463ffffffff16905060008163ffffffff1611610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906144ca565b60405180910390fd5b6000606b60008481526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b811415610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def906144ea565b60405180910390fd5b6000801b811415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359061466a565b60405180910390fd5b6000806000610e4d8442611de1565b92509250925082610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a906144aa565b60405180910390fd5b600082806020019051810190610ea99190613381565b905080610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906146aa565b60405180910390fd5b428663ffffffff1683610efe919061489f565b10610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f35906145aa565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b606b60008981526020019081526020016000208190555050505050505050565b610f928686868686866000610800565b505050505050565b606860159054906101000a900463ffffffff1681565b6000806000610fbe856116ed565b9050600081111561111b57600080600090506000600184610fdf91906149e8565b90506000610fed89846121c2565b905087811061100757600080965096505050505050611124565b61101189836121c2565b90508781101561102c57600182965096505050505050611124565b5b600115611116578260016002858561104591906149e8565b61104f919061492c565b611059919061489f565b611063919061489f565b935061106f89856121c2565b9050878110156110c15760006110918a60018761108c919061489f565b6121c2565b90508881106110ac5760018597509750505050505050611124565b6001856110b9919061489f565b935050611111565b60006110d98a6001876110d491906149e8565b6121c2565b90508881101561110057600180866110f191906149e8565b97509750505050505050611124565b60018561110d91906149e8565b9250505b61102d565b505050505b60008092509250505b9250929050565b600061113a8686868686612ae4565b80519060200120905095945050505050565b600080826040516020016111609190614413565b60405160208183030381529060405260405160200161117f9190614435565b60405160208183030381529060405280519060200120905080915050919050565b606b6020528060005260406000206000915090505481565b6000804690508091505090565b6000807318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611299575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156113685760007388df592f8eb5d7bd38bfef7deb0fbc02cf3778a090508073ffffffffffffffffffffffffffffffffffffffff1663699f200f7fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd936040518263ffffffff1660e01b815260040161131091906143f8565b60206040518083038186803b15801561132857600080fd5b505afa15801561133c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113609190613211565b91505061140b565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d057600080fd5b505afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114089190613211565b90505b60008173ffffffffffffffffffffffffffffffffffffffff1663248638e5868660405160200161143c929190614081565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161146e919061429b565b60006040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114c39190613340565b511191505092915050565b60696020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61152b6127e7565b73ffffffffffffffffffffffffffffffffffffffff1661154961198d565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906145ca565b60405180910390fd5b6115a96000612bdf565b565b6115b36127e7565b73ffffffffffffffffffffffffffffffffffffffff166115d161198d565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e906145ca565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b60007318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117c0575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561187757606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e72432836040518263ffffffff1660e01b8152600401611820919061429b565b60206040518083038186803b15801561183857600080fd5b505afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190613731565b9050611925565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377b03e0d836040518263ffffffff1660e01b81526004016118d2919061429b565b60206040518083038186803b1580156118ea57600080fd5b505afa1580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190613731565b90505b919050565b606a60009054906101000a900463ffffffff1681565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f72e9670a7ee00f5fbf1049b8c38e3f22fab7e9b85029e85cf9412f17fdd5c2ad60001b81565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119c38383612660565b90506000818051906020012090506000801b606b60008381526020019081526020016000205414611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a209061450a565b60405180910390fd5b6000611a348561114c565b905080606b60008481526020019081526020016000208190555084604051611a5c91906140ad565b6040518091039020817fd017d7c85eb4d3d4fc8c875e7d272062ad7dd797ccdb7b46b9c749a4e4864e3860405160405180910390a35050505050565b600080600080600085806020019051810190611ab4919061323a565b94509450945094509450606860149054906101000a900460ff1615611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061456a565b60405180910390fd5b6001606860146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b90906145ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061454a565b60405180910390fd5b60008163ffffffff161480611c305750603c8282611c279190614a1c565b63ffffffff1610155b611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c669061458a565b60405180910390fd5b84606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606860156101000a81548163ffffffff021916908363ffffffff16021790555081606a60006101000a81548163ffffffff021916908363ffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8cf089e89d710ad7a888a28dd8f52df5b7e0d21ef9001a76e4688b06f549391c86604051611dd191906140f9565b60405180910390a3505050505050565b600060606000806000611df48787610fb0565b9150915081611e1e5760006040518060200160405280600081525060009450945094505050611e8c565b6000611e2a88836121c2565b9050611e368882611f4c565b94506040518060200160405280600081525080519060200120858051906020012014611e6e5760018582955095509550505050611e8c565b60006040518060200160405280600081525060009550955095505050505b9250925092565b60006060600080611ea3856116ed565b90506000811415611ece57600060405180602001604052806000815250600093509350935050611f45565b6000611ee686600184611ee191906149e8565b6121c2565b9050611ef28682611f4c565b93506040518060200160405280600081525080519060200120848051906020012014611f2957600184829450945094505050611f45565b6000604051806020016040528060008152508294509450945050505b9193909250565b60607318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061201f575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156120dd57606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b2d2b0d84846040518363ffffffff1660e01b8152600401612081929190614340565b60006040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120d6919061348c565b9050612192565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5958af984846040518363ffffffff1660e01b815260040161213a929190614340565b60006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061218f919061348c565b90505b92915050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612295575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561234e57606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c37b8b484846040518363ffffffff1660e01b81526004016122f7929190614340565b60206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190613731565b90506123fe565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce5e11bf84846040518363ffffffff1660e01b81526004016123ab929190614340565b60206040518083038186803b1580156123c357600080fd5b505afa1580156123d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fb9190613731565b90505b92915050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124326127e7565b73ffffffffffffffffffffffffffffffffffffffff1661245061198d565b73ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146125c3578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161253391906143a0565b60206040518083038186803b15801561254b57600080fd5b505afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190613381565b6125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b99061460a565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161265591906140f9565b60405180910390a150565b6060600061269383604051602001612678919061401c565b60405160208183030381529060405280519060200120612ca5565b90508362e2909f60e81b826040516020016126b0939291906140c4565b60405160208183030381529060405291505092915050565b6126d06127e7565b73ffffffffffffffffffffffffffffffffffffffff166126ee61198d565b73ffffffffffffffffffffffffffffffffffffffff1614612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab9061448a565b60405180910390fd5b6127bd81612bdf565b50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b81565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292157606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016128ee9b9a99989796959493929190614160565b600060405180830381600087803b15801561290857600080fd5b505af115801561291c573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016129829493929190614114565b602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d49190613381565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612adc57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401612aa9929190614317565b600060405180830381600087803b158015612ac357600080fd5b505af1158015612ad7573d6000803e3d6000fd5b505050505b949350505050565b60606000612af06111b8565b905060007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b8230604051602001612b2c93929190614369565b60405160208183030381529060405280519060200120905060007f72e9670a7ee00f5fbf1049b8c38e3f22fab7e9b85029e85cf9412f17fdd5c2ad60001b898989805190602001208989604051602001612b8b969594939291906142b6565b604051602081830303815290604052805190602001209050601960f81b600160f81b8383604051602001612bc29493929190614033565b604051602081830303815290604052935050505095945050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000604067ffffffffffffffff811115612cea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d1c5781602001600182028036833780820191505090505b50905060005b6020811015612e80576000600882612d3a919061498e565b85901b60f81c90506000601082612d51919061495d565b90506000601083612d629190614cab565b9050612d6d82612e8a565b85856002612d7b919061498e565b81518110612db2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612dea81612e8a565b856001866002612dfa919061498e565b612e04919061489f565b81518110612e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050508080612e7890614c3a565b915050612d22565b5080915050919050565b6000600a8260ff161015612eaf57603082612ea591906148f5565b60f81b9050612ec2565b605782612ebc91906148f5565b60f81b90505b919050565b6000612eda612ed584614771565b614740565b90508083825260208201905082856020860282011115612ef957600080fd5b60005b85811015612f295781612f0f8882613101565b845260208401935060208301925050600181019050612efc565b5050509392505050565b6000612f46612f418461479d565b614740565b90508083825260208201905082856020860282011115612f6557600080fd5b60005b85811015612f955781612f7b88826131be565b845260208401935060208301925050600181019050612f68565b5050509392505050565b6000612fb2612fad846147c9565b614740565b905082815260208101848484011115612fca57600080fd5b612fd5848285614bf8565b509392505050565b6000612ff0612feb846147c9565b614740565b90508281526020810184848401111561300857600080fd5b613013848285614c07565b509392505050565b600061302e613029846147f9565b614740565b90508281526020810184848401111561304657600080fd5b613051848285614bf8565b509392505050565b60008135905061306881614dca565b92915050565b60008151905061307d81614dca565b92915050565b60008151905061309281614de1565b92915050565b600082601f8301126130a957600080fd5b81356130b9848260208601612ec7565b91505092915050565b600082601f8301126130d357600080fd5b81516130e3848260208601612f33565b91505092915050565b6000815190506130fb81614df8565b92915050565b60008135905061311081614e0f565b92915050565b600082601f83011261312757600080fd5b8135613137848260208601612f9f565b91505092915050565b600082601f83011261315157600080fd5b8151613161848260208601612fdd565b91505092915050565b60008135905061317981614e26565b92915050565b600082601f83011261319057600080fd5b81356131a084826020860161301b565b91505092915050565b6000813590506131b881614e36565b92915050565b6000815190506131cd81614e36565b92915050565b6000815190506131e281614e4d565b92915050565b6000602082840312156131fa57600080fd5b600061320884828501613059565b91505092915050565b60006020828403121561322357600080fd5b60006132318482850161306e565b91505092915050565b600080600080600060a0868803121561325257600080fd5b600061326088828901613083565b955050602061327188828901613083565b945050604061328288828901613083565b9350506060613293888289016131d3565b92505060806132a4888289016131d3565b9150509295509295909350565b600080600080600060a086880312156132c957600080fd5b60006132d788828901613059565b95505060206132e8888289016131a9565b945050604086013567ffffffffffffffff81111561330557600080fd5b61331188828901613116565b93505060606133228882890161316a565b9250506080613333888289016131a9565b9150509295509295909350565b60006020828403121561335257600080fd5b600082015167ffffffffffffffff81111561336c57600080fd5b613378848285016130c2565b91505092915050565b60006020828403121561339357600080fd5b60006133a1848285016130ec565b91505092915050565b6000602082840312156133bc57600080fd5b60006133ca84828501613101565b91505092915050565b600080604083850312156133e657600080fd5b60006133f485828601613101565b925050602061340585828601613101565b9150509250929050565b6000806040838503121561342257600080fd5b600061343085828601613101565b9250506020613441858286016131a9565b9150509250929050565b60006020828403121561345d57600080fd5b600082013567ffffffffffffffff81111561347757600080fd5b61348384828501613116565b91505092915050565b60006020828403121561349e57600080fd5b600082015167ffffffffffffffff8111156134b857600080fd5b6134c484828501613140565b91505092915050565b6000602082840312156134df57600080fd5b600082013567ffffffffffffffff8111156134f957600080fd5b6135058482850161317f565b91505092915050565b6000806040838503121561352157600080fd5b600083013567ffffffffffffffff81111561353b57600080fd5b6135478582860161317f565b925050602083013567ffffffffffffffff81111561356457600080fd5b61357085828601613098565b9150509250929050565b60008060008060008060c0878903121561359357600080fd5b600087013567ffffffffffffffff8111156135ad57600080fd5b6135b989828a0161317f565b965050602087013567ffffffffffffffff8111156135d657600080fd5b6135e289828a01613098565b95505060406135f389828a01613059565b945050606061360489828a016131a9565b935050608087013567ffffffffffffffff81111561362157600080fd5b61362d89828a01613116565b92505060a061363e89828a0161316a565b9150509295509295509295565b600080600080600080600060e0888a03121561366657600080fd5b600088013567ffffffffffffffff81111561368057600080fd5b61368c8a828b0161317f565b975050602088013567ffffffffffffffff8111156136a957600080fd5b6136b58a828b01613098565b96505060406136c68a828b01613059565b95505060606136d78a828b016131a9565b945050608088013567ffffffffffffffff8111156136f457600080fd5b6137008a828b01613116565b93505060a06137118a828b0161316a565b92505060c06137228a828b016131a9565b91505092959891949750929550565b60006020828403121561374357600080fd5b6000613751848285016131be565b91505092915050565b60006137668383613823565b60208301905092915050565b61377b81614a62565b82525050565b61378a81614a50565b82525050565b600061379b82614839565b6137a58185614867565b93506137b083614829565b8060005b838110156137e15781516137c8888261375a565b97506137d38361485a565b9250506001810190506137b4565b5085935050505092915050565b6137f781614a74565b82525050565b61380e61380982614a80565b614c83565b82525050565b61381d81614ad8565b82525050565b61382c81614ad8565b82525050565b61384361383e82614ad8565b614c97565b82525050565b61385a61385582614aac565b614c8d565b82525050565b61386981614ae2565b82525050565b600061387a82614844565b6138848185614872565b9350613894818560208601614c07565b61389d81614d98565b840191505092915050565b6138b181614b72565b82525050565b6138c081614b96565b82525050565b6138cf81614bba565b82525050565b6138de81614bcc565b82525050565b6138ed81614bde565b82525050565b60006138fe8261484f565b6139088185614883565b9350613918818560208601614c07565b61392181614d98565b840191505092915050565b60006139378261484f565b6139418185614894565b9350613951818560208601614c07565b80840191505092915050565b600061396a600883614883565b91507f536e617073686f740000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139aa602583614883565b91507f50726576696f7573207472616e73616374696f6e206e6f74206578656375746560008301527f64207965740000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a10602683614883565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a76601283614883565b91507f44617461206e6f742072657472696576656400000000000000000000000000006000830152602082019050919050565b6000613ab6601983614883565b91507f526573756c7473206172652076616c696420666f7265766572000000000000006000830152602082019050919050565b6000613af6601f83614883565b91507f50726f706f73616c20697320616c726561647920696e76616c696461746564006000830152602082019050919050565b6000613b36602383614883565b91507f50726f706f73616c2068617320616c7265616479206265656e207375626d697460008301527f74656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9c601283614883565b91507f526573756c7420686173206578706972656400000000000000000000000000006000830152602082019050919050565b6000613bdc601e83614883565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613c1c602e83614883565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000613c82604483614883565b91507f5468657265206e65656420746f206265206174206c656173742036307320626560008301527f747765656e20656e64206f6620636f6f6c646f776e20616e642065787069726160208301527f74696f6e000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613d0e601a83614883565b91507f526573756c7420686173206e6f742065787069726564207965740000000000006000830152602082019050919050565b6000613d4e602083614883565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d8e601e83614883565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613dce602083614883565b91507f477561726420646f6573206e6f7420696d706c656d656e7420494552433136356000830152602082019050919050565b6000613e0e602083614883565b91507f43616e6e6f742065786563757465207472616e73616374696f6e20616761696e6000830152602082019050919050565b6000613e4e601c83614883565b91507f5761697420666f72206164646974696f6e616c20636f6f6c646f776e000000006000830152602082019050919050565b6000613e8e602583614883565b91507f4e6f2071756572792069642073657420666f722070726f76696465642070726f60008301527f706f73616c0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ef4601d83614883565b91507f50726f706f73616c20686173206265656e20696e76616c6964617465640000006000830152602082019050919050565b6000613f34601c83614883565b91507f5472616e73616374696f6e20776173206e6f7420617070726f766564000000006000830152602082019050919050565b6000613f74601983614883565b91507f4d6f64756c65207472616e73616374696f6e206661696c6564000000000000006000830152602082019050919050565b6000613fb4601b83614883565b91507f556e6578706563746564207472616e73616374696f6e206861736800000000006000830152602082019050919050565b613ff081614b4b565b82525050565b61400761400282614b4b565b614ca1565b82525050565b61401681614b55565b82525050565b60006140288284613790565b915081905092915050565b600061403f82876137fd565b60018201915061404f82866137fd565b60018201915061405f8285613832565b60208201915061406f8284613832565b60208201915081905095945050505050565b600061408d8285613832565b60208201915061409d8284613ff6565b6020820191508190509392505050565b60006140b9828461392c565b915081905092915050565b60006140d0828661392c565b91506140dc8285613849565b6003820191506140ec828461392c565b9150819050949350505050565b600060208201905061410e6000830184613781565b92915050565b60006080820190506141296000830187613781565b6141366020830186613fe7565b8181036040830152614148818561386f565b905061415760608301846138c6565b95945050505050565b600061016082019050614176600083018e613781565b614183602083018d613fe7565b8181036040830152614195818c61386f565b90506141a4606083018b6138c6565b6141b1608083018a6138d5565b6141be60a08301896138d5565b6141cb60c08301886138d5565b6141d860e0830187613781565b6141e6610100830186613772565b8181036101208301526141f9818561386f565b9050614209610140830184613781565b9c9b505050505050505050505050565b600060208201905061422e60008301846137ee565b92915050565b600060608201905061424960008301866137ee565b818103602083015261425b818561386f565b905061426a6040830184613fe7565b949350505050565b600060408201905061428760008301856137ee565b6142946020830184613fe7565b9392505050565b60006020820190506142b06000830184613814565b92915050565b600060c0820190506142cb6000830189613814565b6142d86020830188613781565b6142e56040830187613fe7565b6142f26060830186613814565b6142ff60808301856138c6565b61430c60a0830184613fe7565b979650505050505050565b600060408201905061432c6000830185613814565b61433960208301846137ee565b9392505050565b60006040820190506143556000830185613814565b6143626020830184613fe7565b9392505050565b600060608201905061437e6000830186613814565b61438b6020830185613fe7565b61439860408301846138b7565b949350505050565b60006020820190506143b56000830184613860565b92915050565b600060208201905081810360008301526143d5818461386f565b905092915050565b60006020820190506143f260008301846138a8565b92915050565b600060208201905061440d60008301846138e4565b92915050565b6000602082019050818103600083015261442d81846138f3565b905092915050565b6000604082019050818103600083015261444e8161395d565b90508181036020830152614462818461386f565b905092915050565b600060208201905081810360008301526144838161399d565b9050919050565b600060208201905081810360008301526144a381613a03565b9050919050565b600060208201905081810360008301526144c381613a69565b9050919050565b600060208201905081810360008301526144e381613aa9565b9050919050565b6000602082019050818103600083015261450381613ae9565b9050919050565b6000602082019050818103600083015261452381613b29565b9050919050565b6000602082019050818103600083015261454381613b8f565b9050919050565b6000602082019050818103600083015261456381613bcf565b9050919050565b6000602082019050818103600083015261458381613c0f565b9050919050565b600060208201905081810360008301526145a381613c75565b9050919050565b600060208201905081810360008301526145c381613d01565b9050919050565b600060208201905081810360008301526145e381613d41565b9050919050565b6000602082019050818103600083015261460381613d81565b9050919050565b6000602082019050818103600083015261462381613dc1565b9050919050565b6000602082019050818103600083015261464381613e01565b9050919050565b6000602082019050818103600083015261466381613e41565b9050919050565b6000602082019050818103600083015261468381613e81565b9050919050565b600060208201905081810360008301526146a381613ee7565b9050919050565b600060208201905081810360008301526146c381613f27565b9050919050565b600060208201905081810360008301526146e381613f67565b9050919050565b6000602082019050818103600083015261470381613fa7565b9050919050565b600060208201905061471f6000830184613fe7565b92915050565b600060208201905061473a600083018461400d565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561476757614766614d69565b5b8060405250919050565b600067ffffffffffffffff82111561478c5761478b614d69565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147b8576147b7614d69565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e4576147e3614d69565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561481457614813614d69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148aa82614b4b565b91506148b583614b4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ea576148e9614cdc565b5b828201905092915050565b600061490082614b65565b915061490b83614b65565b92508260ff0382111561492157614920614cdc565b5b828201905092915050565b600061493782614b4b565b915061494283614b4b565b92508261495257614951614d0b565b5b828204905092915050565b600061496882614b65565b915061497383614b65565b92508261498357614982614d0b565b5b828204905092915050565b600061499982614b4b565b91506149a483614b4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149dd576149dc614cdc565b5b828202905092915050565b60006149f382614b4b565b91506149fe83614b4b565b925082821015614a1157614a10614cdc565b5b828203905092915050565b6000614a2782614b55565b9150614a3283614b55565b925082821015614a4557614a44614cdc565b5b828203905092915050565b6000614a5b82614b2b565b9050919050565b6000614a6d82614b2b565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614b1c82614db6565b919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000614b7d82614b84565b9050919050565b6000614b8f82614b2b565b9050919050565b6000614ba182614ba8565b9050919050565b6000614bb382614b2b565b9050919050565b6000614bc582614b0e565b9050919050565b6000614bd782614b4b565b9050919050565b6000614bf1614bec83614b21565b614da9565b9050919050565b82818337600083830152505050565b60005b83811015614c25578082015181840152602081019050614c0a565b83811115614c34576000848401525b50505050565b6000614c4582614b4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7857614c77614cdc565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000614cb682614b65565b9150614cc183614b65565b925082614cd157614cd0614d0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160001b9050919050565b60028110614dc757614dc6614d3a565b5b50565b614dd381614a50565b8114614dde57600080fd5b50565b614dea81614a62565b8114614df557600080fd5b50565b614e0181614a74565b8114614e0c57600080fd5b50565b614e1881614ad8565b8114614e2357600080fd5b50565b60028110614e3357600080fd5b50565b614e3f81614b4b565b8114614e4a57600080fd5b50565b614e5681614b55565b8114614e6157600080fd5b5056fea264697066735822122068b9b62d2e0e8788666a5e7617fb44ff8a6263c480271df987f4ce12d5983d3364736f6c63430008000033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c806377b03e0d1161011a578063adf1639d116100ad578063d4b839921161007c578063d4b839921461061a578063e19a9dd914610638578063ea0b9c3a14610654578063f2fde38b14610684578063ff0394eb146106a057610206565b8063adf1639d1461056a578063c5958af91461059c578063c9106389146105cc578063ce5e11bf146105ea57610206565b80638da5cb5b116100e95780638da5cb5b146104e25780638dcd266114610500578063a4f9edbf1461051c578063a792765f1461053857610206565b806377b03e0d14610458578063787a08a6146104885780637ceab3b1146104a657806388633b7b146104c457610206565b80632b5000411161019d57806344e87f911161016c57806344e87f91146103b45780634e1b8374146103e45780635aef7de614610414578063715018a614610432578063776d1a011461043c57610206565b80632b500041146103065780632bf87cc01461033657806331460e3d146103665780633408e4701461039657610206565b806322617d97116101d957806322617d971461027f5780632351a8771461029b578063276e832a146102b757806329449085146102d557610206565b8063086cfca81461020b57806314604b8c146102275780631959ad5b146102435780631db61b5414610261575b600080fd5b610225600480360381019061022091906131e8565b6106be565b005b610241600480360381019061023c919061364b565b610800565b005b61024b610ccd565b60405161025891906143dd565b60405180910390f35b610269610cf3565b604051610276919061429b565b60405180910390f35b610299600480360381019061029491906133aa565b610d1a565b005b6102b560048036038101906102b0919061357a565b610f82565b005b6102bf610f9a565b6040516102cc9190614725565b60405180910390f35b6102ef60048036038101906102ea919061340f565b610fb0565b6040516102fd929190614272565b60405180910390f35b610320600480360381019061031b91906132b1565b61112b565b60405161032d919061429b565b60405180910390f35b610350600480360381019061034b91906134cd565b61114c565b60405161035d919061429b565b60405180910390f35b610380600480360381019061037b91906133aa565b6111a0565b60405161038d919061429b565b60405180910390f35b61039e6111b8565b6040516103ab919061470a565b60405180910390f35b6103ce60048036038101906103c9919061340f565b6111c5565b6040516103db9190614219565b60405180910390f35b6103fe60048036038101906103f991906133d3565b6114ce565b60405161040b9190614219565b60405180910390f35b61041c6114fd565b60405161042991906140f9565b60405180910390f35b61043a611523565b005b610456600480360381019061045191906131e8565b6115ab565b005b610472600480360381019061046d91906133aa565b6116ed565b60405161047f919061470a565b60405180910390f35b61049061192a565b60405161049d9190614725565b60405180910390f35b6104ae611940565b6040516104bb91906140f9565b60405180910390f35b6104cc611966565b6040516104d9919061429b565b60405180910390f35b6104ea61198d565b6040516104f791906140f9565b60405180910390f35b61051a6004803603810190610515919061350e565b6119b7565b005b6105366004803603810190610531919061344b565b611a98565b005b610552600480360381019061054d919061340f565b611de1565b60405161056193929190614234565b60405180910390f35b610584600480360381019061057f91906133aa565b611e93565b60405161059393929190614234565b60405180910390f35b6105b660048036038101906105b1919061340f565b611f4c565b6040516105c391906143bb565b60405180910390f35b6105d4612198565b6040516105e191906140f9565b60405180910390f35b61060460048036038101906105ff919061340f565b6121c2565b604051610611919061470a565b60405180910390f35b610622612404565b60405161062f91906140f9565b60405180910390f35b610652600480360381019061064d91906131e8565b61242a565b005b61066e6004803603810190610669919061350e565b612660565b60405161067b9190614413565b60405180910390f35b61069e600480360381019061069991906131e8565b6126c8565b005b6106a86127c0565b6040516106b5919061429b565b60405180910390f35b6106c66127e7565b73ffffffffffffffffffffffffffffffffffffffff166106e461198d565b73ffffffffffffffffffffffffffffffffffffffff161461073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610731906145ca565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b600061080c8888612660565b8051906020012090506000606b60008381526020019081526020016000205490506000801b811415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a9061466a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b8114156108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09061468a565b60405180910390fd5b60006108e8888888888861112b565b905080898581518110610924577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101511461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906146ea565b60405180910390fd5b600080600061097b8542611de1565b925092509250826109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b8906144aa565b60405180910390fd5b42606a60009054906101000a900463ffffffff1663ffffffff16826109e6919061489f565b10610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d9061464a565b60405180910390fd5b600082806020019051810190610a3c9190613381565b905080610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906146aa565b60405180910390fd5b6000606860159054906101000a900463ffffffff16905060008163ffffffff161480610abb5750428163ffffffff1684610ab8919061489f565b10155b610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061452a565b60405180910390fd5b6000891480610b8357506069600089815260200190815260200160002060008f60018c610b2791906149e8565b81518110610b5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff165b610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061446a565b60405180910390fd5b60696000898152602001908152602001600020600087815260200190815260200160002060009054906101000a900460ff1615610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061462a565b60405180910390fd5b6001606960008a8152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff021916908315150217905550610c7d8d8d8d8d6127ef565b610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906146ca565b60405180910390fd5b505050505050505050505050505050565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b81565b6000606860159054906101000a900463ffffffff16905060008163ffffffff1611610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906144ca565b60405180910390fd5b6000606b60008481526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b811415610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def906144ea565b60405180910390fd5b6000801b811415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e359061466a565b60405180910390fd5b6000806000610e4d8442611de1565b92509250925082610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a906144aa565b60405180910390fd5b600082806020019051810190610ea99190613381565b905080610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906146aa565b60405180910390fd5b428663ffffffff1683610efe919061489f565b10610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f35906145aa565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b606b60008981526020019081526020016000208190555050505050505050565b610f928686868686866000610800565b505050505050565b606860159054906101000a900463ffffffff1681565b6000806000610fbe856116ed565b9050600081111561111b57600080600090506000600184610fdf91906149e8565b90506000610fed89846121c2565b905087811061100757600080965096505050505050611124565b61101189836121c2565b90508781101561102c57600182965096505050505050611124565b5b600115611116578260016002858561104591906149e8565b61104f919061492c565b611059919061489f565b611063919061489f565b935061106f89856121c2565b9050878110156110c15760006110918a60018761108c919061489f565b6121c2565b90508881106110ac5760018597509750505050505050611124565b6001856110b9919061489f565b935050611111565b60006110d98a6001876110d491906149e8565b6121c2565b90508881101561110057600180866110f191906149e8565b97509750505050505050611124565b60018561110d91906149e8565b9250505b61102d565b505050505b60008092509250505b9250929050565b600061113a8686868686612ae4565b80519060200120905095945050505050565b600080826040516020016111609190614413565b60405160208183030381529060405260405160200161117f9190614435565b60405160208183030381529060405280519060200120905080915050919050565b606b6020528060005260406000206000915090505481565b6000804690508091505090565b6000807318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611299575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156113685760007388df592f8eb5d7bd38bfef7deb0fbc02cf3778a090508073ffffffffffffffffffffffffffffffffffffffff1663699f200f7fefa19baa864049f50491093580c5433e97e8d5e41f8db1a61108b4fa44cacd936040518263ffffffff1660e01b815260040161131091906143f8565b60206040518083038186803b15801561132857600080fd5b505afa15801561133c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113609190613211565b91505061140b565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d057600080fd5b505afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114089190613211565b90505b60008173ffffffffffffffffffffffffffffffffffffffff1663248638e5868660405160200161143c929190614081565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161146e919061429b565b60006040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114c39190613340565b511191505092915050565b60696020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61152b6127e7565b73ffffffffffffffffffffffffffffffffffffffff1661154961198d565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906145ca565b60405180910390fd5b6115a96000612bdf565b565b6115b36127e7565b73ffffffffffffffffffffffffffffffffffffffff166115d161198d565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e906145ca565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b60007318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117c0575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561187757606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335e72432836040518263ffffffff1660e01b8152600401611820919061429b565b60206040518083038186803b15801561183857600080fd5b505afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190613731565b9050611925565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377b03e0d836040518263ffffffff1660e01b81526004016118d2919061429b565b60206040518083038186803b1580156118ea57600080fd5b505afa1580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190613731565b90505b919050565b606a60009054906101000a900463ffffffff1681565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f72e9670a7ee00f5fbf1049b8c38e3f22fab7e9b85029e85cf9412f17fdd5c2ad60001b81565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006119c38383612660565b90506000818051906020012090506000801b606b60008381526020019081526020016000205414611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a209061450a565b60405180910390fd5b6000611a348561114c565b905080606b60008481526020019081526020016000208190555084604051611a5c91906140ad565b6040518091039020817fd017d7c85eb4d3d4fc8c875e7d272062ad7dd797ccdb7b46b9c749a4e4864e3860405160405180910390a35050505050565b600080600080600085806020019051810190611ab4919061323a565b94509450945094509450606860149054906101000a900460ff1615611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b059061456a565b60405180910390fd5b6001606860146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b90906145ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061454a565b60405180910390fd5b60008163ffffffff161480611c305750603c8282611c279190614a1c565b63ffffffff1610155b611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c669061458a565b60405180910390fd5b84606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606860156101000a81548163ffffffff021916908363ffffffff16021790555081606a60006101000a81548163ffffffff021916908363ffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8cf089e89d710ad7a888a28dd8f52df5b7e0d21ef9001a76e4688b06f549391c86604051611dd191906140f9565b60405180910390a3505050505050565b600060606000806000611df48787610fb0565b9150915081611e1e5760006040518060200160405280600081525060009450945094505050611e8c565b6000611e2a88836121c2565b9050611e368882611f4c565b94506040518060200160405280600081525080519060200120858051906020012014611e6e5760018582955095509550505050611e8c565b60006040518060200160405280600081525060009550955095505050505b9250925092565b60006060600080611ea3856116ed565b90506000811415611ece57600060405180602001604052806000815250600093509350935050611f45565b6000611ee686600184611ee191906149e8565b6121c2565b9050611ef28682611f4c565b93506040518060200160405280600081525080519060200120848051906020012014611f2957600184829450945094505050611f45565b6000604051806020016040528060008152508294509450945050505b9193909250565b60607318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061201f575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156120dd57606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b2d2b0d84846040518363ffffffff1660e01b8152600401612081929190614340565b60006040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120d6919061348c565b9050612192565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5958af984846040518363ffffffff1660e01b815260040161213a929190614340565b60006040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061218f919061348c565b90505b92915050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007318431fd88adf138e8b979a7246eb58ea7126ea1673ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612295575073e8218cacb0a5421bc6409e498d9f8cc8869945ea73ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561234e57606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c37b8b484846040518363ffffffff1660e01b81526004016122f7929190614340565b60206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190613731565b90506123fe565b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce5e11bf84846040518363ffffffff1660e01b81526004016123ab929190614340565b60206040518083038186803b1580156123c357600080fd5b505afa1580156123d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fb9190613731565b90505b92915050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124326127e7565b73ffffffffffffffffffffffffffffffffffffffff1661245061198d565b73ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146125c3578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161253391906143a0565b60206040518083038186803b15801561254b57600080fd5b505afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190613381565b6125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b99061460a565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161265591906140f9565b60405180910390a150565b6060600061269383604051602001612678919061401c565b60405160208183030381529060405280519060200120612ca5565b90508362e2909f60e81b826040516020016126b0939291906140c4565b60405160208183030381529060405291505092915050565b6126d06127e7565b73ffffffffffffffffffffffffffffffffffffffff166126ee61198d565b73ffffffffffffffffffffffffffffffffffffffff1614612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b906145ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab9061448a565b60405180910390fd5b6127bd81612bdf565b50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b81565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461292157606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016128ee9b9a99989796959493929190614160565b600060405180830381600087803b15801561290857600080fd5b505af115801561291c573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016129829493929190614114565b602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d49190613381565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612adc57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401612aa9929190614317565b600060405180830381600087803b158015612ac357600080fd5b505af1158015612ad7573d6000803e3d6000fd5b505050505b949350505050565b60606000612af06111b8565b905060007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b8230604051602001612b2c93929190614369565b60405160208183030381529060405280519060200120905060007f72e9670a7ee00f5fbf1049b8c38e3f22fab7e9b85029e85cf9412f17fdd5c2ad60001b898989805190602001208989604051602001612b8b969594939291906142b6565b604051602081830303815290604052805190602001209050601960f81b600160f81b8383604051602001612bc29493929190614033565b604051602081830303815290604052935050505095945050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000604067ffffffffffffffff811115612cea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d1c5781602001600182028036833780820191505090505b50905060005b6020811015612e80576000600882612d3a919061498e565b85901b60f81c90506000601082612d51919061495d565b90506000601083612d629190614cab565b9050612d6d82612e8a565b85856002612d7b919061498e565b81518110612db2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612dea81612e8a565b856001866002612dfa919061498e565b612e04919061489f565b81518110612e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505050508080612e7890614c3a565b915050612d22565b5080915050919050565b6000600a8260ff161015612eaf57603082612ea591906148f5565b60f81b9050612ec2565b605782612ebc91906148f5565b60f81b90505b919050565b6000612eda612ed584614771565b614740565b90508083825260208201905082856020860282011115612ef957600080fd5b60005b85811015612f295781612f0f8882613101565b845260208401935060208301925050600181019050612efc565b5050509392505050565b6000612f46612f418461479d565b614740565b90508083825260208201905082856020860282011115612f6557600080fd5b60005b85811015612f955781612f7b88826131be565b845260208401935060208301925050600181019050612f68565b5050509392505050565b6000612fb2612fad846147c9565b614740565b905082815260208101848484011115612fca57600080fd5b612fd5848285614bf8565b509392505050565b6000612ff0612feb846147c9565b614740565b90508281526020810184848401111561300857600080fd5b613013848285614c07565b509392505050565b600061302e613029846147f9565b614740565b90508281526020810184848401111561304657600080fd5b613051848285614bf8565b509392505050565b60008135905061306881614dca565b92915050565b60008151905061307d81614dca565b92915050565b60008151905061309281614de1565b92915050565b600082601f8301126130a957600080fd5b81356130b9848260208601612ec7565b91505092915050565b600082601f8301126130d357600080fd5b81516130e3848260208601612f33565b91505092915050565b6000815190506130fb81614df8565b92915050565b60008135905061311081614e0f565b92915050565b600082601f83011261312757600080fd5b8135613137848260208601612f9f565b91505092915050565b600082601f83011261315157600080fd5b8151613161848260208601612fdd565b91505092915050565b60008135905061317981614e26565b92915050565b600082601f83011261319057600080fd5b81356131a084826020860161301b565b91505092915050565b6000813590506131b881614e36565b92915050565b6000815190506131cd81614e36565b92915050565b6000815190506131e281614e4d565b92915050565b6000602082840312156131fa57600080fd5b600061320884828501613059565b91505092915050565b60006020828403121561322357600080fd5b60006132318482850161306e565b91505092915050565b600080600080600060a0868803121561325257600080fd5b600061326088828901613083565b955050602061327188828901613083565b945050604061328288828901613083565b9350506060613293888289016131d3565b92505060806132a4888289016131d3565b9150509295509295909350565b600080600080600060a086880312156132c957600080fd5b60006132d788828901613059565b95505060206132e8888289016131a9565b945050604086013567ffffffffffffffff81111561330557600080fd5b61331188828901613116565b93505060606133228882890161316a565b9250506080613333888289016131a9565b9150509295509295909350565b60006020828403121561335257600080fd5b600082015167ffffffffffffffff81111561336c57600080fd5b613378848285016130c2565b91505092915050565b60006020828403121561339357600080fd5b60006133a1848285016130ec565b91505092915050565b6000602082840312156133bc57600080fd5b60006133ca84828501613101565b91505092915050565b600080604083850312156133e657600080fd5b60006133f485828601613101565b925050602061340585828601613101565b9150509250929050565b6000806040838503121561342257600080fd5b600061343085828601613101565b9250506020613441858286016131a9565b9150509250929050565b60006020828403121561345d57600080fd5b600082013567ffffffffffffffff81111561347757600080fd5b61348384828501613116565b91505092915050565b60006020828403121561349e57600080fd5b600082015167ffffffffffffffff8111156134b857600080fd5b6134c484828501613140565b91505092915050565b6000602082840312156134df57600080fd5b600082013567ffffffffffffffff8111156134f957600080fd5b6135058482850161317f565b91505092915050565b6000806040838503121561352157600080fd5b600083013567ffffffffffffffff81111561353b57600080fd5b6135478582860161317f565b925050602083013567ffffffffffffffff81111561356457600080fd5b61357085828601613098565b9150509250929050565b60008060008060008060c0878903121561359357600080fd5b600087013567ffffffffffffffff8111156135ad57600080fd5b6135b989828a0161317f565b965050602087013567ffffffffffffffff8111156135d657600080fd5b6135e289828a01613098565b95505060406135f389828a01613059565b945050606061360489828a016131a9565b935050608087013567ffffffffffffffff81111561362157600080fd5b61362d89828a01613116565b92505060a061363e89828a0161316a565b9150509295509295509295565b600080600080600080600060e0888a03121561366657600080fd5b600088013567ffffffffffffffff81111561368057600080fd5b61368c8a828b0161317f565b975050602088013567ffffffffffffffff8111156136a957600080fd5b6136b58a828b01613098565b96505060406136c68a828b01613059565b95505060606136d78a828b016131a9565b945050608088013567ffffffffffffffff8111156136f457600080fd5b6137008a828b01613116565b93505060a06137118a828b0161316a565b92505060c06137228a828b016131a9565b91505092959891949750929550565b60006020828403121561374357600080fd5b6000613751848285016131be565b91505092915050565b60006137668383613823565b60208301905092915050565b61377b81614a62565b82525050565b61378a81614a50565b82525050565b600061379b82614839565b6137a58185614867565b93506137b083614829565b8060005b838110156137e15781516137c8888261375a565b97506137d38361485a565b9250506001810190506137b4565b5085935050505092915050565b6137f781614a74565b82525050565b61380e61380982614a80565b614c83565b82525050565b61381d81614ad8565b82525050565b61382c81614ad8565b82525050565b61384361383e82614ad8565b614c97565b82525050565b61385a61385582614aac565b614c8d565b82525050565b61386981614ae2565b82525050565b600061387a82614844565b6138848185614872565b9350613894818560208601614c07565b61389d81614d98565b840191505092915050565b6138b181614b72565b82525050565b6138c081614b96565b82525050565b6138cf81614bba565b82525050565b6138de81614bcc565b82525050565b6138ed81614bde565b82525050565b60006138fe8261484f565b6139088185614883565b9350613918818560208601614c07565b61392181614d98565b840191505092915050565b60006139378261484f565b6139418185614894565b9350613951818560208601614c07565b80840191505092915050565b600061396a600883614883565b91507f536e617073686f740000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139aa602583614883565b91507f50726576696f7573207472616e73616374696f6e206e6f74206578656375746560008301527f64207965740000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a10602683614883565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a76601283614883565b91507f44617461206e6f742072657472696576656400000000000000000000000000006000830152602082019050919050565b6000613ab6601983614883565b91507f526573756c7473206172652076616c696420666f7265766572000000000000006000830152602082019050919050565b6000613af6601f83614883565b91507f50726f706f73616c20697320616c726561647920696e76616c696461746564006000830152602082019050919050565b6000613b36602383614883565b91507f50726f706f73616c2068617320616c7265616479206265656e207375626d697460008301527f74656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9c601283614883565b91507f526573756c7420686173206578706972656400000000000000000000000000006000830152602082019050919050565b6000613bdc601e83614883565b91507f5461726765742063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613c1c602e83614883565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000613c82604483614883565b91507f5468657265206e65656420746f206265206174206c656173742036307320626560008301527f747765656e20656e64206f6620636f6f6c646f776e20616e642065787069726160208301527f74696f6e000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613d0e601a83614883565b91507f526573756c7420686173206e6f742065787069726564207965740000000000006000830152602082019050919050565b6000613d4e602083614883565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d8e601e83614883565b91507f4176617461722063616e206e6f74206265207a65726f206164647265737300006000830152602082019050919050565b6000613dce602083614883565b91507f477561726420646f6573206e6f7420696d706c656d656e7420494552433136356000830152602082019050919050565b6000613e0e602083614883565b91507f43616e6e6f742065786563757465207472616e73616374696f6e20616761696e6000830152602082019050919050565b6000613e4e601c83614883565b91507f5761697420666f72206164646974696f6e616c20636f6f6c646f776e000000006000830152602082019050919050565b6000613e8e602583614883565b91507f4e6f2071756572792069642073657420666f722070726f76696465642070726f60008301527f706f73616c0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ef4601d83614883565b91507f50726f706f73616c20686173206265656e20696e76616c6964617465640000006000830152602082019050919050565b6000613f34601c83614883565b91507f5472616e73616374696f6e20776173206e6f7420617070726f766564000000006000830152602082019050919050565b6000613f74601983614883565b91507f4d6f64756c65207472616e73616374696f6e206661696c6564000000000000006000830152602082019050919050565b6000613fb4601b83614883565b91507f556e6578706563746564207472616e73616374696f6e206861736800000000006000830152602082019050919050565b613ff081614b4b565b82525050565b61400761400282614b4b565b614ca1565b82525050565b61401681614b55565b82525050565b60006140288284613790565b915081905092915050565b600061403f82876137fd565b60018201915061404f82866137fd565b60018201915061405f8285613832565b60208201915061406f8284613832565b60208201915081905095945050505050565b600061408d8285613832565b60208201915061409d8284613ff6565b6020820191508190509392505050565b60006140b9828461392c565b915081905092915050565b60006140d0828661392c565b91506140dc8285613849565b6003820191506140ec828461392c565b9150819050949350505050565b600060208201905061410e6000830184613781565b92915050565b60006080820190506141296000830187613781565b6141366020830186613fe7565b8181036040830152614148818561386f565b905061415760608301846138c6565b95945050505050565b600061016082019050614176600083018e613781565b614183602083018d613fe7565b8181036040830152614195818c61386f565b90506141a4606083018b6138c6565b6141b1608083018a6138d5565b6141be60a08301896138d5565b6141cb60c08301886138d5565b6141d860e0830187613781565b6141e6610100830186613772565b8181036101208301526141f9818561386f565b9050614209610140830184613781565b9c9b505050505050505050505050565b600060208201905061422e60008301846137ee565b92915050565b600060608201905061424960008301866137ee565b818103602083015261425b818561386f565b905061426a6040830184613fe7565b949350505050565b600060408201905061428760008301856137ee565b6142946020830184613fe7565b9392505050565b60006020820190506142b06000830184613814565b92915050565b600060c0820190506142cb6000830189613814565b6142d86020830188613781565b6142e56040830187613fe7565b6142f26060830186613814565b6142ff60808301856138c6565b61430c60a0830184613fe7565b979650505050505050565b600060408201905061432c6000830185613814565b61433960208301846137ee565b9392505050565b60006040820190506143556000830185613814565b6143626020830184613fe7565b9392505050565b600060608201905061437e6000830186613814565b61438b6020830185613fe7565b61439860408301846138b7565b949350505050565b60006020820190506143b56000830184613860565b92915050565b600060208201905081810360008301526143d5818461386f565b905092915050565b60006020820190506143f260008301846138a8565b92915050565b600060208201905061440d60008301846138e4565b92915050565b6000602082019050818103600083015261442d81846138f3565b905092915050565b6000604082019050818103600083015261444e8161395d565b90508181036020830152614462818461386f565b905092915050565b600060208201905081810360008301526144838161399d565b9050919050565b600060208201905081810360008301526144a381613a03565b9050919050565b600060208201905081810360008301526144c381613a69565b9050919050565b600060208201905081810360008301526144e381613aa9565b9050919050565b6000602082019050818103600083015261450381613ae9565b9050919050565b6000602082019050818103600083015261452381613b29565b9050919050565b6000602082019050818103600083015261454381613b8f565b9050919050565b6000602082019050818103600083015261456381613bcf565b9050919050565b6000602082019050818103600083015261458381613c0f565b9050919050565b600060208201905081810360008301526145a381613c75565b9050919050565b600060208201905081810360008301526145c381613d01565b9050919050565b600060208201905081810360008301526145e381613d41565b9050919050565b6000602082019050818103600083015261460381613d81565b9050919050565b6000602082019050818103600083015261462381613dc1565b9050919050565b6000602082019050818103600083015261464381613e01565b9050919050565b6000602082019050818103600083015261466381613e41565b9050919050565b6000602082019050818103600083015261468381613e81565b9050919050565b600060208201905081810360008301526146a381613ee7565b9050919050565b600060208201905081810360008301526146c381613f27565b9050919050565b600060208201905081810360008301526146e381613f67565b9050919050565b6000602082019050818103600083015261470381613fa7565b9050919050565b600060208201905061471f6000830184613fe7565b92915050565b600060208201905061473a600083018461400d565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561476757614766614d69565b5b8060405250919050565b600067ffffffffffffffff82111561478c5761478b614d69565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147b8576147b7614d69565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e4576147e3614d69565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561481457614813614d69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148aa82614b4b565b91506148b583614b4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ea576148e9614cdc565b5b828201905092915050565b600061490082614b65565b915061490b83614b65565b92508260ff0382111561492157614920614cdc565b5b828201905092915050565b600061493782614b4b565b915061494283614b4b565b92508261495257614951614d0b565b5b828204905092915050565b600061496882614b65565b915061497383614b65565b92508261498357614982614d0b565b5b828204905092915050565b600061499982614b4b565b91506149a483614b4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149dd576149dc614cdc565b5b828202905092915050565b60006149f382614b4b565b91506149fe83614b4b565b925082821015614a1157614a10614cdc565b5b828203905092915050565b6000614a2782614b55565b9150614a3283614b55565b925082821015614a4557614a44614cdc565b5b828203905092915050565b6000614a5b82614b2b565b9050919050565b6000614a6d82614b2b565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614b1c82614db6565b919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000614b7d82614b84565b9050919050565b6000614b8f82614b2b565b9050919050565b6000614ba182614ba8565b9050919050565b6000614bb382614b2b565b9050919050565b6000614bc582614b0e565b9050919050565b6000614bd782614b4b565b9050919050565b6000614bf1614bec83614b21565b614da9565b9050919050565b82818337600083830152505050565b60005b83811015614c25578082015181840152602081019050614c0a565b83811115614c34576000848401525b50505050565b6000614c4582614b4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7857614c77614cdc565b5b600182019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000614cb682614b65565b9150614cc183614b65565b925082614cd157614cd0614d0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160001b9050919050565b60028110614dc757614dc6614d3a565b5b50565b614dd381614a50565b8114614dde57600080fd5b50565b614dea81614a62565b8114614df557600080fd5b50565b614e0181614a74565b8114614e0c57600080fd5b50565b614e1881614ad8565b8114614e2357600080fd5b50565b60028110614e3357600080fd5b50565b614e3f81614b4b565b8114614e4a57600080fd5b50565b614e5681614b55565b8114614e6157600080fd5b5056fea264697066735822122068b9b62d2e0e8788666a5e7617fb44ff8a6263c480271df987f4ce12d5983d3364736f6c63430008000033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_avatar", + "type": "address" + }, + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "address payable", + "name": "_tellorAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_cooldown", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_expiration", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousAvatar", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAvatar", + "type": "address" + } + ], + "name": "AvatarSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "guard", + "type": "address" + } + ], + "name": "ChangedGuard", + "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": "queryId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "string", + "name": "proposalId", + "type": "string" + } + ], + "name": "ProposalAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousTarget", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newTarget", + "type": "address" + } + ], + "name": "TargetSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "initiator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "avatar", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "TellorModuleSetup", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INVALIDATED", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TRANSACTION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + } + ], + "name": "addProposal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "avatar", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + } + ], + "name": "buildProposal", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "cooldown", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "_operation", + "type": "uint8" + } + ], + "name": "executeProposal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "_operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "_txIndex", + "type": "uint256" + } + ], + "name": "executeProposalWithIndex", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "executedProposalTransactions", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getDataAfter", + "outputs": [ + { + "internalType": "bytes", + "name": "_value", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_timestampRetrieved", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getDataBefore", + "outputs": [ + { + "internalType": "bytes", + "name": "_value", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_timestampRetrieved", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGuard", + "outputs": [ + { + "internalType": "address", + "name": "_guard", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getIndexForDataAfter", + "outputs": [ + { + "internalType": "bool", + "name": "_found", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getIndexForDataBefore", + "outputs": [ + { + "internalType": "bool", + "name": "_found", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxAge", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxCount", + "type": "uint256" + } + ], + "name": "getMultipleValuesBefore", + "outputs": [ + { + "internalType": "bytes[]", + "name": "_values", + "type": "bytes[]" + }, + { + "internalType": "uint256[]", + "name": "_timestamps", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + } + ], + "name": "getNewValueCountbyQueryId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + } + ], + "name": "getQueryId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getReporterByTimestamp", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "getTimestampbyQueryIdandIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "enum Enum.Operation", + "name": "_operation", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "getTransactionHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "guard", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "idMappingContract", + "outputs": [ + { + "internalType": "contract IMappingContract", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "isInDispute", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_proposalId", + "type": "string" + }, + { + "internalType": "bytes32[]", + "name": "_txHashes", + "type": "bytes32[]" + } + ], + "name": "markProposalAsInvalid", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proposalHash", + "type": "bytes32" + } + ], + "name": "markProposalAsInvalidByHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proposalHash", + "type": "bytes32" + } + ], + "name": "markProposalWithExpiredResultAsInvalid", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queryIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "resultExpiration", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_queryId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "retrieveData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_avatar", + "type": "address" + } + ], + "name": "setAvatar", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_guard", + "type": "address" + } + ], + "name": "setGuard", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_addy", + "type": "address" + } + ], + "name": "setIdMappingContract", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + } + ], + "name": "setTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initParams", + "type": "bytes" + } + ], + "name": "setUp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "target", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tellor", + "outputs": [ + { + "internalType": "contract ITellor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + } + ], + "name": "valueFor", + "outputs": [ + { + "internalType": "int256", + "name": "_value", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_statusCode", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/app/src/services/index.ts b/packages/app/src/services/index.ts index 0c57fb59..94e1b781 100644 --- a/packages/app/src/services/index.ts +++ b/packages/app/src/services/index.ts @@ -30,6 +30,7 @@ export type TxWitMeta = { } interface TellorModuleParams { + owner: string executor: string oracle?: string cooldown: string @@ -72,9 +73,17 @@ export interface ExitModuleParams { export function getTellorOracle(chainId: number): string { switch (chainId) { case NETWORK.MAINNET: - return "0x88dF592F8eb5D7Bd38bFeF7dEb0fBc02cf3778a0" + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" case NETWORK.POLYGON: - return "0xFd45Ae72E81Adaaf01cC61c8bCe016b7060DD537" + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" + case NETWORK.GNOSIS_CHAIN: + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" + case NETWORK.GOERLI: + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" + case NETWORK.OPTIMISM: + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" + case NETWORK.ARBITRUM: + return "0xD9157453E2668B2fc45b7A803D3FEF3642430cC0" } return "" } @@ -202,7 +211,7 @@ export function deployTellorModule( args: TellorModuleParams, ) { const type = KnownContracts.TELLOR - const { oracle, cooldown, expiration, executor } = args + const { owner, oracle, cooldown, expiration, executor } = args const oracleAddress = oracle || getTellorOracle(chainId) const { @@ -211,8 +220,8 @@ export function deployTellorModule( } = deployAndSetUpModule( type, { - types: ["address", "address", "address", "uint32", "uint32"], - values: [safeAddress, executor, oracleAddress, cooldown, expiration], + types: ["address", "address", "address", "address", "uint32", "uint32"], + values: [owner, safeAddress, executor, oracleAddress, cooldown, expiration], }, provider, chainId, diff --git a/packages/app/src/store/modules/models.ts b/packages/app/src/store/modules/models.ts index 3b532526..f597f848 100644 --- a/packages/app/src/store/modules/models.ts +++ b/packages/app/src/store/modules/models.ts @@ -66,6 +66,7 @@ export interface DelayModule extends Module { export interface TellorModule extends Module { type: ModuleType.TELLOR + owner: string executor: string oracle: string expiration: number diff --git a/packages/app/src/views/AddModule/wizards/TellorModule/TellorModuleModal.tsx b/packages/app/src/views/AddModule/wizards/TellorModule/TellorModuleModal.tsx index b701756b..7e0ce62e 100644 --- a/packages/app/src/views/AddModule/wizards/TellorModule/TellorModuleModal.tsx +++ b/packages/app/src/views/AddModule/wizards/TellorModule/TellorModuleModal.tsx @@ -20,6 +20,7 @@ interface TellorModuleModalProps { } interface TellorModuleParams { + owner: string oracle: string cooldown: string expiration: string @@ -47,6 +48,7 @@ export const TellorModuleModal = ({ delayModules.length === 1 ? delayModules[0].address : "", ) const [params, setParams] = useState({ + owner: safe.safeAddress, oracle: getTellorOracle(safe.chainId), cooldown: "86400", expiration: "604800", @@ -113,6 +115,14 @@ export const TellorModuleModal = ({ Parameters + + onParamChange("owner", value, valid)} + /> +