UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

13 lines (12 loc) 74.9 kB
// This file was autogenerated by Hardhat, do not edit it. // prettier-ignore // tslint:disable // eslint-disable // biome-ignore format: see above export interface WitRandomnessV3$Type { readonly _format: "hh3-artifact-1"; readonly contractName: "WitRandomnessV3"; readonly sourceName: "contracts/apps/WitRandomnessV3.sol"; readonly abi: [{"inputs":[{"internalType":"address","name":"_witOracle","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"InvalidLengthEncoding","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"uint256","name":"read","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"UnexpectedMajorType","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"master","type":"address"},{"indexed":true,"internalType":"address","name":"clone","type":"address"}],"name":"Cloned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":false,"internalType":"uint256","name":"randomizeBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finalityBlock","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"randomness","type":"bytes32"}],"name":"Randomized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"evmRequester","type":"address"},{"indexed":false,"internalType":"uint256","name":"randomizeBlock","type":"uint256"},{"indexed":false,"internalType":"Witnet.QueryId","name":"witOracleQueryId","type":"uint64"}],"name":"Randomizing","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"base","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"class","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_curator","type":"address"}],"name":"clone","outputs":[{"internalType":"contract IWitRandomness","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cloned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consumer","outputs":[{"internalType":"contract IWitRandomnessConsumer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_evmGasPrice","type":"uint256"}],"name":"estimateRandomizeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"fetchRandomnessAfter","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"fetchRandomnessAfterProof","outputs":[{"internalType":"bytes32","name":"_witnetQueryUUID","type":"bytes32"},{"internalType":"Witnet.Timestamp","name":"_witnetTimestamp","type":"uint64"},{"internalType":"Witnet.TransactionHash","name":"_witnetDrTxHash","type":"bytes32"},{"internalType":"uint256","name":"_evmFinalityBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastRandomizeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizeData","outputs":[{"internalType":"Witnet.QueryId","name":"_queryId","type":"uint64"},{"internalType":"uint256","name":"_prevRandomizeBlock","type":"uint256"},{"internalType":"uint256","name":"_nextRandomizeBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizeNextBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizePrevBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizeQueryErrorDescription","outputs":[{"internalType":"string","name":"_reason","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizeQueryId","outputs":[{"internalType":"Witnet.QueryId","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomizeQueryParams","outputs":[{"internalType":"uint24","name":"_callbackGasLimit","type":"uint24"},{"internalType":"uint16","name":"_extraFeePercentage","type":"uint16"},{"internalType":"uint16","name":"_witCommitteeSize","type":"uint16"},{"internalType":"uint64","name":"_witInclusionFees","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomizeRadonBytecode","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomizeRadonHash","outputs":[{"internalType":"Witnet.RadonHash","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"getRandomizeStatus","outputs":[{"internalType":"enum IWitRandomnessTypes.RandomizeStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomizeWaitingBlocks","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_curator","type":"address"},{"components":[{"internalType":"uint24","name":"callbackGasLimit","type":"uint24"},{"internalType":"uint16","name":"extraFeePercentage","type":"uint16"},{"internalType":"uint16","name":"witCommitteeSize","type":"uint16"},{"internalType":"uint64","name":"witInclusionFees","type":"uint64"},{"internalType":"uint16","name":"randomizeWaitingBlocks","type":"uint16"}],"internalType":"struct WitRandomnessV3.CloneSettings","name":"_settings","type":"tuple"}],"name":"initializeClone","outputs":[{"internalType":"contract IWitRandomness","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"isRandomized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomize","outputs":[{"internalType":"uint256","name":"_evmUsedFunds","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"queryId","type":"uint256"},{"internalType":"bytes","name":"queryResult","type":"bytes"}],"name":"reportWitOracleQueryResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"}],"name":"reportableFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_consumer","type":"address"},{"internalType":"uint24","name":"_maxCallbackGasLimit","type":"uint24"}],"name":"settleConsumer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_callbackGasLimit","type":"uint24"},{"internalType":"uint16","name":"_extraFeePercentage","type":"uint16"},{"internalType":"uint16","name":"_minWitCommitteeSize","type":"uint16"},{"internalType":"uint64","name":"_minWitInclusionFees","type":"uint64"}],"name":"settleQueryParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_randomizeWaitingBlocks","type":"uint16"}],"name":"settleRandomizeWaitingBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"specs","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"witnetRandomness","type":"bytes32"}],"name":"verifyRandomnessAfter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"witOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]; readonly bytecode: "0x60e060405230608052348015610013575f5ffd5b506040516142ab3803806142ab83398101604081905261003291610580565b806001600160a01b03811661006157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006a81610429565b506101425f836001600160a01b03163b1180156101095750637cd906ed60e11b636d11bc5160e11b186001600160e01b031916836001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fd91906105b8565b6001600160e01b031916145b60408051808201909152601581527f756e636f6d706c69616e74205769744f7261636c6500000000000000000000006020820152610445565b816001600160a01b031660c0816001600160a01b0316815250505f826001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610199573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101bd91906105e6565b9050806001600160a01b0316636bd046346102a36040518060200160405280856001600160a01b0316639eb3ab1f60025f6001600160401b0381111561020557610205610601565b60405190808252806020026020018201604052801561023e57816020015b61022b610545565b8152602001906001900390816102235790505b506040518363ffffffff1660e01b815260040161025c929190610657565b6020604051808303815f875af1158015610278573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029c9190610737565b9052610457565b6040805180820182526002815281515f808252602082810190945291928301916102ef565b604080518082019091525f8152606060208201528152602001906001900390816102c85790505b509052604080518082018252600b815281515f8082526020828101909452919283019161033e565b604080518082019091525f8152606060208201528152602001906001900390816103175790505b508152506040518463ffffffff1660e01b8152600401610360939291906107f5565b6020604051808303815f875af115801561037c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a09190610737565b60a05250507f43025ad356942e949bc1eab02ffb42d0642f59c8829febfec0169ebcda39070080547f43025ad356942e949bc1eab02ffb42d0642f59c8829febfec0169ebcda3907018054600160a81b61ffff60a01b1990911617905564ffffffffff600160681b03600160b81b0319166d030000000000000000000a00c350179055506109b2565b600180546001600160a01b031916905561044281610498565b50565b8161045357610453816104e7565b5050565b6060602060018360405160200161047093929190610861565b60405160208183030381529060405280602001905181019061049291906108a2565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600f81526e57697452616e646f6d6e657373563360881b60208201528160405160200161051f929190610980565b60408051601f198184030181529082905262461bcd60e51b8252610058916004016109a0565b60405180604001604052806002905b60608152602001906001900390816105545790505090565b6001600160a01b0381168114610442575f5ffd5b5f5f60408385031215610591575f5ffd5b825161059c8161056c565b60208401519092506105ad8161056c565b809150509250929050565b5f602082840312156105c8575f5ffd5b81516001600160e01b0319811681146105df575f5ffd5b9392505050565b5f602082840312156105f6575f5ffd5b81516105df8161056c565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6005841061066857610668610615565b83825260a060208301525f60a083015260c060408301525f60c083015260e0820160e06060840152808451808352610100850191506101008160051b8601019250602086015f5b8281101561070f5786850360ff19018452815185604081015f5b60028110156106f75788820383526106e2828551610629565b602094850194939093019291506001016106c9565b509650505060209384019391909101906001016106af565b50505050828103608084015260018152600160ff1b6020820152604081015b95945050505050565b5f60208284031215610747575f5ffd5b5051919050565b5f604083018251600c811061076557610765610615565b84526020838101516040828701528051928390526060600584901b870181019391909201918601905f5b818110156107e957878503605f1901835283518051600a81106107b4576107b4610615565b8087525060208101519050604060208701526107d36040870182610629565b955050602093840193929092019160010161078f565b50929695505050505050565b606080825284519082018190525f9060208601906080840190835b8181101561082e578351835260209384019390920191600101610810565b50508381036020850152610842818761074e565b9150508281036040840152610857818561074e565b9695505050505050565b83815260ff831660208201526060810160408201835f5b6001811015610897578151835260209283019290910190600101610878565b505050949350505050565b5f602082840312156108b2575f5ffd5b81516001600160401b038111156108c7575f5ffd5b8201601f810184136108d7575f5ffd5b80516001600160401b038111156108f0576108f0610601565b604051600582901b90603f8201601f191681016001600160401b038111828210171561091e5761091e610601565b60405291825260208184018101929081018784111561093b575f5ffd5b6020850194505b8385101561095e57845180825260209586019590935001610942565b509695505050505050565b5f81518060208401855e5f93019283525090919050565b5f61098b8285610969565b6101d160f51b815261072e6002820185610969565b602081525f6105df6020830184610629565b60805160a05160c05161387b610a305f395f81816103000152818161041c015281816109ea01528181610e0e0152818161173b01528181611a5901528181611d770152611f3501525f81816105dd01528181610e3e0152611e0401525f818161045a015281816116750152818161226a0152612317015261387b5ff3fe608060405260043610610212575f3560e01c80638f26168411610117578063bff852fa1161009f578063d9ecdfa61161006e578063d9ecdfa614610781578063de0958ac14610795578063e30c3978146107b4578063e5117e63146107c8578063f2fde38b146107e75761024f565b8063bff852fa146106e4578063c0248bf114610724578063cdd02a3014610743578063d6f29e81146107625761024f565b8063a3252f68116100e6578063a3252f6814610601578063a60ee26814610645578063a769cfba14610664578063adb7c3f7146106af578063b4fd7296146106d05761024f565b80638f261684146105885780639bc86fec1461059c578063a04daef0146105bb578063a310a6bc146105cf5761024f565b806351cb149d1161019a57806376fa9d201161016957806376fa9d20146104ee57806379ba50971461051a5780638124b78e1461052e57806382b1c1741461054d5780638da5cb5b1461056c5761024f565b806351cb149d1461047e578063699b328a146104a5578063715018a6146104bb57806372587321146104cf5761024f565b806317f45487116101e157806317f454871461037b5780631ab79a37146103c257806338332c5c146103e157806347a10e56146104005780635001f3b51461044c5761024f565b8063032698a5146102b65780631014d375146102f25780631058655914610338578063158ef93e146103675761024f565b3661024f5761024d604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610806565b005b61024d61025f5f3560f81c61086d565b61026f60ff5f3560f01c1661086d565b61027f60ff5f3560e81c1661086d565b61028f60ff5f3560e01c1661086d565b6040516020016102a29493929190612ff6565b604051602081830303815290604052610806565b3480156102c1575f5ffd5b506102d56102d0366004613042565b610959565b6040516001600160401b0390911681526020015b60405180910390f35b3480156102fd575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102e9565b348015610343575f5ffd5b50610357610352366004613059565b610969565b60405190151581526020016102e9565b348015610372575f5ffd5b506103576109c8565b348015610386575f5ffd5b5061039a610395366004613042565b6109e4565b604080519485526001600160401b0390931660208501529183015260608201526080016102e9565b3480156103cd575f5ffd5b5061024d6103dc36600461308a565b610a96565b3480156103ec575f5ffd5b506103206103fb3660046130b7565b610ac7565b34801561040b575f5ffd5b5061035761041a3660046130f5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b348015610457575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610320565b348015610489575f5ffd5b50610492610dc9565b60405161ffff90911681526020016102e9565b6104ad610de6565b6040519081526020016102e9565b3480156104c6575f5ffd5b5061024d611122565b3480156104da575f5ffd5b5061024d6104e9366004613122565b611135565b3480156104f9575f5ffd5b5061050d610508366004613042565b611318565b6040516102e99190613169565b348015610525575f5ffd5b5061024d611488565b348015610539575f5ffd5b506103206105483660046130f5565b611490565b348015610558575f5ffd5b506104ad610567366004613042565b6115db565b348015610577575f5ffd5b505f546001600160a01b0316610320565b348015610593575f5ffd5b506104ad611627565b3480156105a7575f5ffd5b506103576105b6366004613042565b611646565b3480156105c6575f5ffd5b5061035761166a565b3480156105da575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006104ad565b34801561060c575f5ffd5b5061062061061b366004613042565b61169a565b604080516001600160401b0390941684526020840192909252908201526060016102e9565b348015610650575f5ffd5b506104ad61065f366004613042565b611737565b34801561066f575f5ffd5b50610678611815565b6040805162ffffff95909516855261ffff938416602086015291909216908301526001600160401b031660608201526080016102e9565b3480156106ba575f5ffd5b50604051634518cc8b60e11b81526020016102e9565b3480156106db575f5ffd5b50610320611876565b3480156106ef575f5ffd5b5060408051808201909152600f81526e57697452616e646f6d6e657373563360881b60208201525b6040516102e991906131bd565b34801561072f575f5ffd5b506104ad61073e366004613042565b611891565b34801561074e575f5ffd5b5061024d61075d3660046131ee565b6118e9565b34801561076d575f5ffd5b5061024d61077c366004613241565b6119f3565b34801561078c575f5ffd5b50610717611d73565b3480156107a0575f5ffd5b506104ad6107af366004613042565b611e7f565b3480156107bf575f5ffd5b50610320611ef9565b3480156107d3575f5ffd5b506107176107e2366004613042565b611f0c565b3480156107f2575f5ffd5b5061024d6108013660046130f5565b611fd3565b60408051808201909152600f81526e57697452616e646f6d6e657373563360881b60208201528160405160200161083e9291906132b6565b60408051601f198184030181529082905262461bcd60e51b8252610864916004016131bd565b60405180910390fd5b6040805160028082528183019092526060915f91906020820181803683370190505090505f61089d60108561331b565b6108a890603061333c565b90505f6108b6601086613355565b6108c190603061333c565b905060398260ff1611156108dd576108da60078361333c565b91505b60398160ff1611156108f7576108f460078261333c565b90505b8160f81b835f8151811061090d5761090d613376565b60200101906001600160f81b03191690815f1a9053508060f81b8360018151811061093a5761093a613376565b60200101906001600160f81b03191690815f1a90535091949350505050565b5f61096382611fe7565b92915050565b5f61097383611646565b80156109c1575082826040516020016109a09291909182526001600160c01b031916602082015260400190565b604051602081830303815290604052805190602001206109bf846115db565b145b9392505050565b5f5f6109d261212c565b54600160681b900461ffff1611919050565b5f5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633fa59576610a2087611fe7565b6040516001600160e01b031960e084901b1681526001600160401b039091166004820152602401608060405180830381865afa158015610a62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a86919061338a565b9298909750909550909350915050565b610a9e612150565b80610aa761212c565b60010160146101000a81548161ffff021916908361ffff16021790555050565b5f610ad061166a565b610b175760405162461bcd60e51b8152602060048201526018602482015277436c6f6e61626c653a206f6e6c79206f6e20636c6f6e657360401b6044820152606401610864565b5f610b2061217c565b805490915060ff600160401b82041615906001600160401b03165f81158015610b465750825b90505f826001600160401b03166001148015610b615750303b155b905081158015610b6f575080155b15610b8d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bb757845460ff60401b1916600160401b1785555b60408051808201909152600c81526b3d32b9379031bab930ba37b960a11b6020820152610bf0906001600160a01b038a161515906121a4565b610bf9886121b2565b610c605f610c0d60608a0160408b0161308a565b61ffff16118015610c325750607f610c2b60608a0160408b0161308a565b61ffff1611155b6040518060400160405280601081526020016f696e76616c69642073657474696e677360801b8152506121a4565b610c6d60208801886133c7565b610c7561212c565b805462ffffff191662ffffff92909216919091179055610c9b604088016020890161308a565b610ca361212c565b805461ffff9290921663010000000264ffff00000019909216919091179055610cd2606088016040890161308a565b610cda61212c565b805461ffff92909216600160681b0261ffff60681b19909216919091179055610d0960808801606089016133e0565b610d1161212c565b80546001600160401b0392909216600160781b0267ffffffffffffffff60781b19909216919091179055610d4b60a088016080890161308a565b610d5361212c565b60010160146101000a81548161ffff021916908361ffff1602179055503095508315610db957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b905090565b5f610dd261212c565b60010154600160a01b900461ffff16919050565b5f804380610df261212c565b54600160281b90046001600160401b031610156110ba573492507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633b3195b7347f00000000000000000000000000000000000000000000000000000000000000006040518060600160405280602261ffff168152602001610e7b61212c565b54600160681b900461ffff168152602001610e9461212c565b54600160781b90046001600160401b031690526040805180820190915230815260208101610ec061212c565b5462ffffff9081169091526040805160e088901b6001600160e01b03191681526004810195909552835161ffff908116602487015260208086015190911660448701529301516001600160401b0316606485015281516001600160a01b031660848501529101511660a482015260c40160206040518083038185885af1158015610f4c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f7191906133fb565b91505f610f7c61212c565b54600160281b90046001600160401b031690505f610f9861212c565b5f8481526003919091016020526040902080546001600160401b0380871667ffffffffffffffff1992831617835560018301805491861691909216179055905082610fe161212c565b5f8481526003919091016020526040902080546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790558261102561212c565b80546001600160401b0392909216600160281b026cffffffffffffffff0000000000199092169190911790558261105a61212c565b6001600160401b0386165f81815260029290920160209081526040928390209390935581514381529283015233917fd6df60dd4c94a4102a8b1bfbafbe6dda374d30909a84fb32305fc97d91f92f66910160405180910390a250506110e0565b6110c261212c565b5f82815260039190910160205260409020546001600160401b031691505b3483101561111d57336108fc6110f68534613412565b6040518115909202915f818181858888f1935050505015801561111b573d5f5f3e3d5ffd5b505b505090565b61112a612150565b6111335f6121b2565b565b61113d61166a565b6111845760405162461bcd60e51b8152602060048201526018602482015277436c6f6e61626c653a206f6e6c79206f6e20636c6f6e657360401b6044820152606401610864565b61118c612150565b6001600160a01b038216158015906111ad57505f826001600160a01b03163b115b156112e357816001600160a01b031663ae5ce03e6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561120c575060408051601f3d908101601f1916820190925261120991810190613425565b60015b611245573d808015611239576040519150601f19603f3d011682016040523d82523d5f602084013e61123e565b606091505b50506112e3565b306001600160a01b038216036112e15761129361c35062ffffff168362ffffff1610156040518060400160405280600d81526020016c1b1bddc819d85cc81b1a5b5a5d609a1b8152506121a4565b8261129c61212c565b60010180546001600160a01b0319166001600160a01b0392909216919091179055816112c661212c565b805462ffffff191662ffffff92909216919091179055505050565b505b6113146040518060400160405280601081526020016f34b73b30b634b21031b7b739bab6b2b960811b815250610806565b5050565b5f5f61132261212c565b5f84815260039190910160205260408120915083900361134457505f92915050565b80546001600160401b03165f03611361576109c161050884611e7f565b80546001600160401b031667fffffffffffffffe19016113b6578054600160801b90046001600160401b0316156113ad5780546109c190600160801b90046001600160401b0316611318565b50600392915050565b8054600160c01b900460c01b6001600160c01b031916611459575f6113d961212c565b60010154600160a01b900461ffff1611801561141457506113f861212c565b6001015461141190600160a01b900461ffff1684613440565b43115b801561143057508054600160801b90046001600160401b031615155b156114505780546109c190600160801b90046001600160401b0316611318565b50600192915050565b8054600160401b90046001600160401b03164310156114795760046109c1565b60029392505050565b50919050565b6111336121cb565b5f611499612246565b6001600160a01b03166338332c5c836040518060a001604052806114bb61212c565b5462ffffff1681526020016114ce61212c565b546301000000900461ffff1681526020016114e761212c565b54600160681b900461ffff16815260200161150061212c565b54600160781b90046001600160401b0316815260200161151e61212c565b60010154600160a01b900461ffff9081169091526040805160e086901b6001600160e01b03191681526001600160a01b039094166004850152825162ffffff1660248501526020830151821660448501528201518116606484015260608201516001600160401b031660848401526080909101511660a482015260c4016020604051808303815f875af11580156115b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109639190613425565b5f816115e683612379565b60405160200161160a9291909182526001600160c01b031916602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f61163061212c565b54600160281b90046001600160401b0316919050565b5f600261165283611318565b600481111561166357611663613155565b1492915050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141590565b5f5f5f5f6116a661212c565b5f86815260039190910160205260408120805460018201546001600160401b0391821697509193501690036116e3576116de85611891565b6116f2565b60018101546001600160401b03165b8154909350600160801b90046001600160401b03165f0361171b5761171685611e7f565b61172e565b8054600160801b90046001600160401b03165b93959294505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305e742ef8461177161212c565b5460405160e084901b6001600160e01b0319168152600481019290925262ffffff166024820152604401602060405180830381865afa1580156117b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117da91906133fb565b905060646117e661212c565b546117fd906301000000900461ffff166064613453565b61180b9061ffff168361346d565b6109c19190613484565b5f5f5f5f61182161212c565b5462ffffff1661182f61212c565b546301000000900461ffff1661184361212c565b54600160681b900461ffff1661185761212c565b5492979196509450600160781b9091046001600160401b031692509050565b5f61187f61212c565b600101546001600160a01b0316919050565b5f5f61189b61212c565b54600160281b90046001600160401b03169050808311610963576118e4836118c161212c565b5f84815260039190910160205260409020600101546001600160401b031661256b565b6109c1565b6118f1612150565b61194b61c35062ffffff86161080159061190e57505f8361ffff16115b801561191f5750607f8361ffff1611155b6040518060400160405280600e81526020016d696e76616c696420706172616d7360901b8152506121a4565b8361195461212c565b805462ffffff191662ffffff929092169190911790558261197361212c565b805461ffff9290921663010000000264ffff000000199092169190911790558161199b61212c565b805461ffff92909216600160681b0261ffff60681b19909216919091179055806119c361212c565b80546001600160401b0392909216600160781b0267ffffffffffffffff60781b1990921691909117905550505050565b5f6119fc61212c565b6002015f856001600160401b03166001600160401b031681526020019081526020015f20549050611a545f82116040518060400160405280600d81526020016c696e76616c696420717565727960981b8152506121a4565b611aaf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146040518060400160405280600e81526020016d696e76616c6964206f7261636c6560901b8152506121a4565b5f611ab861212c565b5f838152600391909101602052604081209150611ad784860186613663565b8254909150600160c01b900460c01b6001600160c01b031916158015611b1257505f611b0161212c565b60010154600160a01b900461ffff16115b8015611b3d5750611b2161212c565b60010154611b3a90600160a01b900461ffff1684613440565b43115b8015611b5957508154600160801b90046001600160401b031615155b15611b7b57815467ffffffffffffffff19166001600160401b03178255611d6b565b5f80825160ff811115611b9057611b90613155565b03611bd45782546001600160401b03888116911614611bc457825467ffffffffffffffff19166001600160401b0388161783555b611bcd826125a2565b9050611bed565b825467ffffffffffffffff19166001600160401b031783555b6060820151835477ffffffffffffffff0000000000000000ffffffffffffffff16600160401b6001600160401b03909216919091026001600160c01b031617600160c01b60c083901c021783555f611c4361212c565b600101546001600160a01b031690508015611d1957606083015160808401516040808601519051638eaa865f60e01b81526001600160c01b0319861660048201526024810189905260448101939093526001600160401b03909116606483015260848201526001600160a01b03821690638eaa865f9060a4015f604051808303815f87803b158015611cd3575f5ffd5b505af1925050508015611ce4575060015b611d19573d808015611d11576040519150601f19603f3d011682016040523d82523d5f602084013e611d16565b606091505b50505b6060808401516040805188815260208101929092526001600160c01b03198516908201527fe7af3c23f23afb584501c994ac9edf8c438702ea485979a2aacb3e3b24f260b9910160405180910390a150505b505050505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df59190613425565b6040516322889dd960e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b039190911690638a227764906024015f60405180830381865afa158015611e58573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dc49190810190613750565b5f611e8861212c565b5f83815260039190910160205260409020546001600160401b031615611ed757611eb061212c565b5f8381526003919091016020526040902054600160801b90046001600160401b0316610963565b61096382611ee361212c565b54600160281b90046001600160401b0316612685565b5f610dc46001546001600160a01b031690565b60605f611f1883611318565b90506003816004811115611f2e57611f2e613155565b03611482577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c2581348611f6b85611fe7565b6040516001600160e01b031960e084901b1681526001600160401b0390911660048201526024015f60405180830381865afa158015611fac573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109c19190810190613750565b611fdb612150565b611fe4816126ea565b50565b5f5f611ff161212c565b5f8481526003919091016020526040812080549092506001600160401b03169003612027576109c161202284611e7f565b611fe7565b80546001600160401b031667fffffffffffffffe1901612082578054600160801b90046001600160401b03166120675780546001600160401b03166109c1565b80546109c190600160801b90046001600160401b0316611fe7565b8054600160c01b900460c01b6001600160c01b03191661211c575f6120a561212c565b60010154600160a01b900461ffff161180156120e057506120c461212c565b600101546120dd90600160a01b900461ffff1684613440565b43115b80156120fc57508054600160801b90046001600160401b031615155b1561211c5780546109c190600160801b90046001600160401b0316611fe7565b546001600160401b031692915050565b7f43025ad356942e949bc1eab02ffb42d0642f59c8829febfec0169ebcda39070090565b5f546001600160a01b031633146111335760405163118cdaa760e01b8152336004820152602401610864565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610963565b816113145761131481610806565b600180546001600160a01b0319169055611fe48161271b565b33806121d5611ef9565b6001600160a01b03161461223d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610864565b611fe4816121b2565b5f5f6122ac604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81527f000000000000000000000000000000000000000000000000000000000000000060601b60148201526e5af43d82803e903d91602b57fd5bf360881b602882015290565b90506037815ff091506001600160a01b03821661230b5760405162461bcd60e51b815260206004820152601760248201527f436c6f6e61626c653a20435245415445206661696c65640000000000000000006044820152606401610864565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a45090565b5f5f61238361212c565b5f8481526003919091016020526040812080549092506001600160401b031690036123b9576109c16123b484611e7f565b612379565b80546001600160401b031667fffffffffffffffe190161244057805460408051808201909152601781527f6661696c65643a2072657472792072616e646f6d697a65000000000000000000602082015261242591600160801b90046001600160401b03161515906121a4565b80546109c190600160801b90046001600160401b0316612379565b8054600160c01b900460c01b6001600160c01b031916612511575f61246361212c565b60010154600160a01b900461ffff1611801561249e575061248261212c565b6001015461249b90600160a01b900461ffff1684613440565b43115b156124da5780546040805160608101909152602880825261242592600160801b90046001600160401b03161515919061381e60208301396121a4565b61250c6040518060400160405280601181526020017070656e64696e672072616e646f6d697a6560781b815250610806565b611482565b805461255a906001600160401b03600160401b9091041643811115906125369061276a565b604051602001612546919061379c565b6040516020818303038152906040526121a4565b54600160c01b900460c01b92915050565b5f818311611482576118e48361257f61212c565b5f85815260039190910160205260409020600101546001600160401b031661256b565b5f8160036125af826128be565b1580156125e157508060138111156125c9576125c9613155565b826020015160138111156125df576125df613155565b145b61262d5760405162461bcd60e51b815260206004820152601760248201527f63626f723a2063616e6e6f7420666574636820646174610000000000000000006044820152606401610864565b61264261263d8560a001516128cb565b612a14565b92506126518260a00151612a20565b8260200190601381111561266757612667613155565b9081601381111561267a5761267a613155565b815250505050919050565b5f818310156126bd576118e48361269a61212c565b5f85815260039190910160205260409020600101546001600160401b0316612685565b6126c561212c565b5f928352600301602052506040902054600160801b90046001600160401b0316919050565b6126f2612150565b6001600160a01b03811661223d57604051631e4fbdf760e01b81525f6004820152602401610864565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051606480825260a08201909252606091905f90826020820181803683370190505090505f5b5f61279e600a876137c5565b90506127ab600a87613484565b95506127b881603061333c565b60f81b83836127c6816137d8565b9450815181106127d8576127d8613376565b60200101906001600160f81b03191690815f1a90535050845f03612792575f816001600160401b0381111561280f5761280f6132df565b6040519080825280601f01601f191660200182016040528015612839576020820181803683370190505b50905060015b8281116128b457836128518285613412565b8151811061286157612861613376565b01602001516001600160f81b0319168261287c600184613412565b8151811061288c5761288c613376565b60200101906001600160f81b03191690815f1a905350806128ac816137d8565b91505061283f565b5095945050505050565b5f610963825f0151612ae7565b60608160028060ff16826040015160ff161461290b57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610864565b61291c845f01518560600151612b17565b6001600160401b03166080850181905263fffffffe19016129f0575f612949855f01518660400151612bde565b905063ffffffff80821610156129ea57845161296e9063ffffffff80841690612c8a16565b60405160200161297e91906137f0565b60405160208183030381529060405293506129a0855f01518660400151612bde565b905063ffffffff80821610156129ea57845184906129c79063ffffffff80851690612c8a16565b6040516020016129d89291906137fb565b60405160208183030381529060405293505b50612a0d565b60808401518451612a0a9163ffffffff90811690612c8a16565b92505b5050919050565b5f610963826020612d4b565b5f612a348251805151602090910151101590565b612ae2576006826040015160ff1611612a7c5760408201516502020183808360d11b9060ff1660078110612a6a57612a6a613376565b1a601381111561096357610963613155565b816040015160ff16600703612ae257816060015160ff1660141480612aa85750816060015160ff166015145b15612ab557506002919050565b6019826060015160ff1610158015612ad55750601b826060015160ff1611155b15612ae257506005919050565b919050565b5f60f08260ff811115612afc57612afc613155565b1480610963575060f18260ff81111561166357611663613155565b5f60188260ff161015612b2e575060ff8116610963565b8160ff16601803612b4c57612b4283612db8565b60ff169050610963565b8160ff16601903612b6b57612b6083612e18565b61ffff169050610963565b8160ff16601a03612b8c57612b7f83612e83565b63ffffffff169050610963565b8160ff16601b03612ba757612ba083612ee1565b9050610963565b8160ff16601f03612bc057506001600160401b03610963565b604051636d785b1360e01b815260ff83166004820152602401610864565b5f5f612be984612db8565b90508060ff1660ff03612c06576001600160401b03915050610963565b612c138482601f16612b17565b91506001600160401b0380831610612c4957604051636d785b1360e01b81526001600160401b0383166004820152602401610864565b60ff83166007600583901c1614612c835760405161800560e51b81526007600583901c16600482015260ff84166024820152604401610864565b5092915050565b6060818360200151612c9c9190613440565b83515180821115612cca576040516363a056dd60e01b81526004810183905260248101829052604401610864565b836001600160401b03811115612ce257612ce26132df565b6040519080825280601f01601f191660200182016040528015612d0c576020820181803683370190505b5092508315612d43578451602080870151908183018101908601612d3181838a612f3f565b612d3d89896001612f85565b50505050505b505092915050565b5f60208260ff161115612d6057612d60613809565b5f8260ff16845111612d73578351612d78565b8260ff165b90505f5b81811015612d435780600802858281518110612d9a57612d9a613376565b01602001516001600160f81b031916901c9290921791600101612d7c565b5f8160200151825f01515180821115612dee576040516363a056dd60e01b81526004810183905260248101829052604401610864565b8351602085018051808301600101519550908190612e0b826137d8565b8152505050505050919050565b5f81602001516002612e2a9190613440565b82515180821115612e58576040516363a056dd60e01b81526004810183905260248101829052604401610864565b8351602085018051600281840181015196509091612e768284613440565b9052509395945050505050565b5f81602001516004612e959190613440565b82515180821115612ec3576040516363a056dd60e01b81526004810183905260248101829052604401610864565b8351602085018051600481840181015196509091612e768284613440565b5f81602001516008612ef39190613440565b82515180821115612f21576040516363a056dd60e01b81526004810183905260248101829052604401610864565b8351602085018051600881840181015196509091612e768284613440565b5b60208110612f5f578151835260209283019290910190601f1901612f40565b8015612f80578151835160208390036101000a5f1901801990921691161783525b505050565b5f82845f01515180821115612fb7576040516363a056dd60e01b81526004810183905260248101829052604401610864565b8315612fcf576020860151612fcc9086613440565b94505b5050505060209190910181905290565b5f81518060208401855e5f93019283525090919050565b720dcdee840d2dae0d8cadacadce8cac8744060f606b1b81525f61303861303261302c613026601386018a612fdf565b88612fdf565b86612fdf565b84612fdf565b9695505050505050565b5f60208284031215613052575f5ffd5b5035919050565b5f5f6040838503121561306a575f5ffd5b50508035926020909101359150565b803561ffff81168114612ae2575f5ffd5b5f6020828403121561309a575f5ffd5b6109c182613079565b6001600160a01b0381168114611fe4575f5ffd5b5f5f82840360c08112156130c9575f5ffd5b83356130d4816130a3565b925060a0601f19820112156130e7575f5ffd5b506020830190509250929050565b5f60208284031215613105575f5ffd5b81356109c1816130a3565b803562ffffff81168114612ae2575f5ffd5b5f5f60408385031215613133575f5ffd5b823561313e816130a3565b915061314c60208401613110565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016005831061318957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109c1602083018461318f565b6001600160401b0381168114611fe4575f5ffd5b8035612ae2816131cf565b5f5f5f5f60808587031215613201575f5ffd5b61320a85613110565b935061321860208601613079565b925061322660408601613079565b91506060850135613236816131cf565b939692955090935050565b5f5f5f60408486031215613253575f5ffd5b8335925060208401356001600160401b0381111561326f575f5ffd5b8401601f8101861361327f575f5ffd5b80356001600160401b03811115613294575f5ffd5b8660208284010111156132a5575f5ffd5b939660209190910195509293505050565b5f6132c18285612fdf565b6101d160f51b81526132d66002820185612fdf565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60ff83168061332d5761332d6132f3565b8060ff84160491505092915050565b60ff818116838216019081111561096357610963613307565b5f60ff831680613367576133676132f3565b8060ff84160691505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f5f5f6080858703121561339d575f5ffd5b84516020860151604087015191955093506133b7816131cf565b6060959095015193969295505050565b5f602082840312156133d7575f5ffd5b6109c182613110565b5f602082840312156133f0575f5ffd5b81356109c1816131cf565b5f6020828403121561340b575f5ffd5b5051919050565b8181038181111561096357610963613307565b5f60208284031215613435575f5ffd5b81516109c1816130a3565b8082018082111561096357610963613307565b61ffff818116838216019081111561096357610963613307565b808202811582820484141761096357610963613307565b5f82613492576134926132f3565b500490565b60405160c081016001600160401b03811182821017156134b9576134b96132df565b60405290565b604080519081016001600160401b03811182821017156134b9576134b96132df565b604051601f8201601f191681016001600160401b0381118282101715613509576135096132df565b604052919050565b803560148110612ae2575f5ffd5b5f6001600160401b03821115613537576135376132df565b50601f01601f191660200190565b803560ff81168114612ae2575f5ffd5b5f60c08284031215613565575f5ffd5b61356d613497565b905081356001600160401b03811115613584575f5ffd5b820160408185031215613595575f5ffd5b61359d6134bf565b81356001600160401b038111156135b2575f5ffd5b8201601f810186136135c2575f5ffd5b80356135d56135d08261351f565b6134e1565b8181528760208385010111156135e9575f5ffd5b816020840160208301375f602092820183015283529283013582840152508252613614908301613545565b602082015261362560408301613545565b604082015261363660608301613545565b6060820152613647608083016131e3565b608082015261365860a083016131e3565b60a082015292915050565b5f60208284031215613673575f5ffd5b81356001600160401b03811115613688575f5ffd5b820160c08185031215613699575f5ffd5b6136a1613497565b813561010081106136b0575f5ffd5b81526136be60208301613511565b602082015260408281013590820152606080830135908201526136e3608083016131e3565b608082015260a08201356001600160401b03811115613700575f5ffd5b61370c86828501613555565b60a083015250949350505050565b5f6137276135d08461351f565b905082815283838301111561373a575f5ffd5b8282602083015e5f602084830101529392505050565b5f60208284031215613760575f5ffd5b81516001600160401b03811115613775575f5ffd5b8201601f81018413613785575f5ffd5b6137948482516020840161371a565b949350505050565b7466696e616c697a696e67206f6e20626c6f636b202360581b81525f6109c16015830184612fdf565b5f826137d3576137d36132f3565b500690565b5f600182016137e9576137e9613307565b5060010190565b5f6109c18284612fdf565b5f6137946130328386612fdf565b634e487b7160e01b5f52600160045260245ffdfe64656c617965643a206b6565702077616974696e67206f722072657472792072616e646f6d697a65a264697066735822122064d77a03d232e61c642ddf93d53e4643eca6eb5334b3c9af2ea0912cad81e2cb64736f6c634300081e0033"; readonly deployedBytecode: "0x608060405260043610610212575f3560e01c80638f26168411610117578063bff852fa1161009f578063d9ecdfa61161006e578063d9ecdfa614610781578063de0958ac14610795578063e30c3978146107b4578063e5117e63146107c8578063f2fde38b146107e75761024f565b8063bff852fa146106e4578063c0248bf114610724578063cdd02a3014610743578063d6f29e81146107625761024f565b8063a3252f68116100e6578063a3252f6814610601578063a60ee26814610645578063a769cfba14610664578063adb7c3f7146106af578063b4fd7296146106d05761024f565b80638f261684146105885780639bc86fec1461059c578063a04daef0146105bb578063a310a6bc146105cf5761024f565b806351cb149d1161019a57806376fa9d201161016957806376fa9d20146104ee57806379ba50971461051a5780638124b78e1461052e57806382b1c1741461054d5780638da5cb5b1461056c5761024f565b806351cb149d1461047e578063699b328a146104a5578063715018a6146104bb57806372587321146104cf5761024f565b806317f45487116101e157806317f454871461037b5780631ab79a37146103c257806338332c5c146103e157806347a10e56146104005780635001f3b51461044c5761024f565b8063032698a5146102b65780631014d375146102f25780631058655914610338578063158ef93e146103675761024f565b3661024f5761024d604051806040016040528060158152602001741b9bc81d1c985b9cd9995c9cc81858d8d95c1d1959605a1b815250610806565b005b61024d61025f5f3560f81c61086d565b61026f60ff5f3560f01c1661086d565b61027f60ff5f3560e81c1661086d565b61028f60ff5f3560e01c1661086d565b6040516020016102a29493929190612ff6565b604051602081830303815290604052610806565b3480156102c1575f5ffd5b506102d56102d0366004613042565b610959565b6040516001600160401b0390911681526020015b60405180910390f35b3480156102fd575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102e9565b348015610343575f5ffd5b50610357610352366004613059565b610969565b60405190151581526020016102e9565b348015610372575f5ffd5b506103576109c8565b348015610386575f5ffd5b5061039a610395366004613042565b6109e4565b604080519485526001600160401b0390931660208501529183015260608201526080016102e9565b3480156103cd575f5ffd5b5061024d6103dc36600461308a565b610a96565b3480156103ec575f5ffd5b506103206103fb3660046130b7565b610ac7565b34801561040b575f5ffd5b5061035761041a3660046130f5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b348015610457575f5ffd5b507f0000000000000000000000000000000000000000000000000000000000000000610320565b348015610489575f5ffd5b50610492610dc9565b60405161ffff90911681526020016102e9565b6104ad610de6565b6040519081526020016102e9565b3480156104c6575f5ffd5b5061024d611122565b3480156104da575f5ffd5b5061024d6104e9366004613122565b611135565b3480156104f9575f5ffd5b5061050d610508366004613042565b611318565b6040516102e99190613169565b348015610525575f5ffd5b5061024d611488565b348015610539575f5ffd5b506103206105483660046130f5565b611490565b348015610558575f5ffd5b506104ad610567366004613042565b6115db565b348015610577575f5ffd5b505f546001600160a01b0316610320565b348015610593575f5ffd5b506104ad611627565b3480156105a7575f5ffd5b506103576105b6366004613042565b611646565b3480156105c6575f5ffd5b5061035761166a565b3480156105da575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006104ad565b34801561060c575f5ffd5b5061062061061b366004613042565b61169a565b604080516001600160401b0390941684526020840192909252908201526060016102e9565b348015610650575f5ffd5b506104ad61065f366004613042565b611737565b34801561066f575f5ffd5b50610678611815565b6040805162ffffff95909516855261ffff938416602086015291909216908301526001600160401b031660608201526080016102e9565b3480156106ba575f5ffd5b50604051634518cc8b60e11b81526020016102e9565b3480156106db575f5ffd5b50610320611876565b3480156106ef575f5ffd5b5060408051808201909152600f81526e57697452616e646f6d6e657373563360881b60208201525b6040516102e991906131bd565b34801561072f575f5ffd5b506104ad61073e366004613042565b611891565b34801561074e575f5ffd5b5061024d61075d3660046131ee565b6118e9565b34801561076d575f5ffd5b5061024d61077c366004613241565b6119f3565b34801561078c575f5ffd5b50610717611d73565b3480156107a0575f5ffd5b506104ad6107af366004613042565b611e7f565b3480156107bf575f5ffd5b50610320611ef9565b3480156107d3575f5ffd5b506107176107e2366004613042565b611f0c565b3480156107f2575f5ffd5b5061024d6108013660046130f5565b611fd3565b60408051808201909152600f81526e57697452616e646f6d6e657373563360881b60208201528160405160200161083e9291906132b6565b60408051601f198184030181529082905262461bcd60e51b8252610864916004016131bd565b60405180910390fd5b6040805160028082528183019092526060915f91906020820181803683370190505090505f61089d60108561331b565b6108a890603061333c565b90505f6108b6601086613355565b6108c190603061333c565b905060398260ff1611156108dd576108da60078361333c565b91505b60398160ff1611156108f7576108f460078261333c565b90505b8160f81b835f8151811061090d5761090d613376565b60200101906001600160f81b03191690815f1a9053508060f81b8360018151811061093a5761093a613376565b60200101906001600160f81b03191690815f1a90535091949350505050565b5f61096382611fe7565b92915050565b5f61097383611646565b80156109c1575082826040516020016109a09291909182526001600160c01b031916602082015260400190565b60405160208183030381