0 txs
7 calls
constructor
constructor()
functions
combineRandomValues
purefunction combineRandomValues(bytes32 userRandomness, bytes32 providerRandomness, bytes32 blockHash) pure returns (bytes32 combinedRandomness)
constructUserCommitment
purefunction constructUserCommitment(bytes32 userRandomness) pure returns (bytes32 userCommitment)
entropyUpgradableMagic
purefunction entropyUpgradableMagic() pure returns (uint32)
getAccruedPythFees
viewfunction getAccruedPythFees() view returns (uint128 accruedPythFeesInWei)
getAdmin
viewfunction getAdmin() view returns (address)
getDefaultProvider
viewfunction getDefaultProvider() view returns (address provider)
getFee
viewfunction getFee(address provider) view returns (uint128 feeAmount)
getProviderInfo
viewfunction getProviderInfo(address provider) view returns (tuple info)
getPythFee
viewfunction getPythFee() view returns (uint128 feeAmount)
getRequest
viewfunction getRequest(address provider, uint64 sequenceNumber) view returns (tuple req)
NUM_REQUESTS_MASK
viewfunction NUM_REQUESTS_MASK() view returns (bytes1)
NUM_REQUESTS
viewfunction NUM_REQUESTS() view returns (uint8)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proposedAdmin
viewfunction proposedAdmin() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
version
purefunction version() pure returns (string)
acceptAdmin
nonpayablefunction acceptAdmin()
acceptOwnership
nonpayablefunction acceptOwnership()
initialize
nonpayablefunction initialize(address owner, address admin, uint128 pythFeeInWei, address defaultProvider, bool prefillRequestStorage)
proposeAdmin
nonpayablefunction proposeAdmin(address newAdmin)
register
nonpayablefunction register(uint128 feeInWei, bytes32 commitment, bytes commitmentMetadata, uint64 chainLength, bytes uri)
renounceOwnership
nonpayablefunction renounceOwnership()
request
payablefunction request(address provider, bytes32 userCommitment, bool useBlockHash) payable returns (uint64 assignedSequenceNumber)
requestWithCallback
payablefunction requestWithCallback(address provider, bytes32 userRandomNumber) payable returns (uint64)
reveal
nonpayablefunction reveal(address provider, uint64 sequenceNumber, bytes32 userRevelation, bytes32 providerRevelation) returns (bytes32 randomNumber)
revealWithCallback
nonpayablefunction revealWithCallback(address provider, uint64 sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation)
setDefaultProvider
nonpayablefunction setDefaultProvider(address newDefaultProvider)
setProviderFee
nonpayablefunction setProviderFee(uint128 newFeeInWei)
setProviderUri
nonpayablefunction setProviderUri(bytes newUri)
setPythFee
nonpayablefunction setPythFee(uint128 newPythFee)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(uint128 amount)
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
ContractUpgraded
event ContractUpgraded(address oldImplementation, address newImplementation)
DefaultProviderSet
event DefaultProviderSet(address oldDefaultProvider, address newDefaultProvider)
Initialized
event Initialized(uint8 version)
NewAdminAccepted
event NewAdminAccepted(address oldAdmin, address newAdmin)
NewAdminProposed
event NewAdminProposed(address oldAdmin, address newAdmin)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProviderFeeUpdated
event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee)
ProviderUriUpdated
event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri)
PythFeeSet
event PythFeeSet(uint256 oldPythFee, uint256 newPythFee)
Registered
event Registered((uint128 feeInWei, uint128 accruedFeesInWei, bytes32 originalCommitment, uint64 originalCommitmentSequenceNumber, bytes commitmentMetadata, bytes uri, uint64 endSequenceNumber, uint64 sequenceNumber, bytes32 currentCommitment, uint64 currentCommitmentSequenceNumber) provider)
Requested
event Requested((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request)
RequestedWithCallback
event RequestedWithCallback(address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, (address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request)
Revealed
event Revealed((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request, bytes32 userRevelation, bytes32 providerRevelation, bytes32 blockHash, bytes32 randomNumber)
RevealedWithCallback
event RevealedWithCallback((address provider, uint64 sequenceNumber, uint32 numHashes, bytes32 commitment, uint64 blockNumber, address requester, bool useBlockhash, bool isRequestWithCallback) request, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber)
Upgraded
event Upgraded(address indexed implementation)
errors
AssertionFailure
error AssertionFailure()
BlockhashUnavailable
error BlockhashUnavailable()
IncorrectRevelation
error IncorrectRevelation()
InsufficientFee
error InsufficientFee()
InvalidRevealCall
error InvalidRevealCall()
InvalidUpgradeMagic
error InvalidUpgradeMagic()
NoSuchProvider
error NoSuchProvider()
NoSuchRequest
error NoSuchRequest()
OutOfRandomness
error OutOfRandomness()
Unauthorized
error Unauthorized()
creation bytecode
0x60a06040523060601b6080523480156200001857600080fd5b50600054610100900460ff16158080156200003a5750600054600160ff909116105b806200006a575062000057306200014460201b62001aa21760201c565b1580156200006a575060005460ff166001145b620000d25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000f6576000805461ff0019166101001790555b80156200013d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000153565b6001600160a01b03163b151590565b60805160601c6137ac6200018e60003960008181610c6601528181610ca60152818161104a0152818161108a015261116901526137ac6000f3fe6080604052600436106102045760003560e01c80637583902f11610118578063b469f1c9116100a0578063cd3474d71161006f578063cd3474d71461063f578063de4478ec1461065e578063e15dbddc1461067e578063e30c39781461069e578063f2fde38b146106bc57600080fd5b8063b469f1c9146105ba578063b88c9148146105da578063c715aa2e146105fa578063c970835c1461061a57600080fd5b80638da5cb5b116100e75780638da5cb5b146105225780639017cd46146105405780639371df511461056757806393cbf21714610587578063ace63a7e1461059a57600080fd5b80637583902f1461049057806379ba5097146104bd5780637e0020af146104d257806382ee990c1461050457600080fd5b80633659cfe61161019b57806352d1902d1161016a57806352d1902d146103e757806354fd4d50146103fc5780636151ab1f146104305780636e9960c31461045d578063715018a61461047b57600080fd5b80633659cfe61461037457806338b049c6146103945780633d30bc0e146103b45780634f1ef286146103d457600080fd5b806314e82e8c116101d757806314e82e8c1461028057806319cb825f146102e5578063229ecacd1461031057806332f751ec1461034157600080fd5b806302387a7b14610209578063092c1c991461022b5780630e18b6811461024b578063147bf6c414610260575b600080fd5b34801561021557600080fd5b50610229610224366004612f8e565b6106dc565b005b34801561023757600080fd5b50610229610246366004612cfd565b610845565b34801561025757600080fd5b50610229610a6a565b34801561026c57600080fd5b5061022961027b366004612ce3565b610aff565b34801561028c57600080fd5b506102d261029b366004612f24565b6040805160208082019590955280820193909352606080840192909252805180840390920182526080909201909152805191012090565b6040519081526020015b60405180910390f35b6102f86102f3366004612d61565b610bba565b6040516001600160401b0390911681526020016102dc565b34801561031c57600080fd5b50610328601f60f81b81565b6040516001600160f81b031990911681526020016102dc565b34801561034d57600080fd5b50610160546001600160a01b03165b6040516001600160a01b0390911681526020016102dc565b34801561038057600080fd5b5061022961038f366004612ce3565b610c5b565b3480156103a057600080fd5b506102296103af366004612fa8565b610d87565b3480156103c057600080fd5b506102296103cf366004612eb3565b610f0c565b6102296103e2366004612dc5565b61103f565b3480156103f357600080fd5b506102d261115c565b34801561040857600080fd5b5060408051808201825260058152640302e332e360dc1b602082015290516102dc9190613234565b34801561043c57600080fd5b5061045061044b366004612e81565b61120f565b6040516102dc91906134e2565b34801561046957600080fd5b5060fb546001600160a01b031661035c565b34801561048757600080fd5b506102296112ee565b34801561049c57600080fd5b506104b06104ab366004612ce3565b611302565b6040516102dc919061332a565b3480156104c957600080fd5b50610229611524565b3480156104de57600080fd5b5060fc546001600160801b03165b6040516001600160801b0390911681526020016102dc565b34801561051057600080fd5b5060fd546001600160a01b031661035c565b34801561052e57600080fd5b506033546001600160a01b031661035c565b34801561054c57600080fd5b50610555602081565b60405160ff90911681526020016102dc565b34801561057357600080fd5b506102d2610582366004612eb3565b61159e565b6102f8610595366004612d8a565b611674565b3480156105a657600080fd5b506102296105b5366004612f8e565b6116df565b3480156105c657600080fd5b506102296105d5366004612f4f565b61177d565b3480156105e657600080fd5b506104ec6105f5366004612ce3565b6118a5565b34801561060657600080fd5b506102d2610615366004612ef4565b6118da565b34801561062657600080fd5b5060fc54600160801b90046001600160801b03166104ec565b34801561064b57600080fd5b50604051636669726581526020016102dc565b34801561066a57600080fd5b50610229610679366004612ce3565b61190c565b34801561068a57600080fd5b50610229610699366004612f8e565b6119cf565b3480156106aa57600080fd5b506065546001600160a01b031661035c565b3480156106c857600080fd5b506102296106d7366004612ce3565b611a31565b33600090815261015f6020526040902080546001600160801b03808416600160801b90920416101561074c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064015b60405180910390fd5b805482908290601090610770908490600160801b90046001600160801b0316613634565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000336001600160a01b0316836001600160801b031660405160006040518083038185875af1925050503d80600081146107ea576040519150601f19603f3d011682016040523d82523d6000602084013e6107ef565b606091505b50509050806108405760405162461bcd60e51b815260206004820152601f60248201527f7769746864726177616c20746f206d73672e73656e646572206661696c6564006044820152606401610743565b505050565b600054610100900460ff16158080156108655750600054600160ff909116105b8061087f5750303b15801561087f575060005460ff166001145b6108e25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610743565b6000805460ff191660011790558015610905576000805461ff0019166101001790555b6001600160a01b0386166109535760405162461bcd60e51b81526020600482015260156024820152746f776e6572206973207a65726f206164647265737360581b6044820152606401610743565b6001600160a01b0385166109a15760405162461bcd60e51b815260206004820152601560248201527461646d696e206973207a65726f206164647265737360581b6044820152606401610743565b6001600160a01b0383166109f75760405162461bcd60e51b815260206004820152601f60248201527f64656661756c7450726f7669646572206973207a65726f2061646472657373006044820152606401610743565b6109ff611ab1565b610a07611ae0565b610a1385858585611b07565b610a1c86611c75565b8015610a62576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b610160546001600160a01b03163314610a95576040516282b42960e81b815260040160405180910390fd5b60fb8054336001600160a01b031980831682179093556101608054909316909255604080516001600160a01b0390921680835260208301939093527f30aa44298c9615f6e2b6a1ca5e3802ca71d535856c686bb638c161636da6fde791015b60405180910390a150565b6001600160a01b038116610b555760405162461bcd60e51b815260206004820152601860248201527f6e657741646d696e206973207a65726f206164647265737300000000000000006044820152606401610743565b610b5d611c8e565b61016080546001600160a01b0319166001600160a01b0383811691821790925560fb546040805191909316815260208101919091527fed2d93e7985747cd1a4a093c2cc3bb73d0f177b81bdfd26020e8f20a97e8112e9101610af4565b600080610bd384610bca856118da565b60006001611cd1565b80546002820154604051929350600160a01b9091046001600160401b031691600160401b9091046001600160a01b0390811691908716907fa4c85ab66677ced5caabbbba151714887944b9e0fee05f320e42a1b13a01fbc690610c39908890879061321f565b60405180910390a454600160a01b90046001600160401b031690505b92915050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610ca45760405162461bcd60e51b815260040161074390613247565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610cd6611fb6565b6001600160a01b031614610cfc5760405162461bcd60e51b815260040161074390613293565b6000610d06611fb6565b9050610d1182611fd2565b60408051600080825260208201909252610d2d91849190611fda565b610d35612154565b7f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a4981610d5f611fb6565b604080516001600160a01b039384168152929091166020830152015b60405180910390a15050565b6001600160401b038316610dae57604051636c16ecb360e11b815260040160405180910390fd5b33600090815261015f6020526040902080546001600160801b0319166001600160801b038916178155600181018790556005810154600282018054600160401b9092046001600160401b031667ffffffffffffffff19928316811790915560068301899055600783018054909216179055610e2d600382018787612bb3565b506005810154610e4e908590600160401b90046001600160401b0316613612565b60058201805467ffffffffffffffff19166001600160401b0392909216919091179055610e7f600482018484612bb3565b5060018160050160088282829054906101000a90046001600160401b0316610ea79190613612565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fe8f6e85c6989b145143cc6d502c37cd7d64b8c25ca22b8dd1af3b2a83cf1a41e81604051610efa919061341f565b60405180910390a15050505050505050565b6000610f1885856121ee565b6002810154909150600160e81b900460ff16610f47576040516328786e4960e11b815260040160405180910390fd5b600080610f55838686612265565b6002850154604051919450919250600160401b9091046001600160a01b0316907f40be225f151772416d8785647e5641a0b53507623d0ee3fb88802b7d6bdbf72890610fa8908690899089908790613585565b60405180910390a1610fba88886123df565b803b801561103457604051630a54be3f60e31b81526001600160401b03891660048201526001600160a01b038a81166024830152604482018590528316906352a5f1f890606401600060405180830381600087803b15801561101b57600080fd5b505af115801561102f573d6000803e3d6000fd5b505050505b505050505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110885760405162461bcd60e51b815260040161074390613247565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166110ba611fb6565b6001600160a01b0316146110e05760405162461bcd60e51b815260040161074390613293565b60006110ea611fb6565b90506110f583611fd2565b61110183836001611fda565b611109612154565b7f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a4981611133611fb6565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111fc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610743565b5060008051602061373083398151915290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915261125a838361249a565b604080516101008101825282546001600160a01b0380821683526001600160401b03600160a01b83048116602085015263ffffffff600160e01b938490041694840194909452600185015460608401526002909401549283166080830152600160401b830490931660a082015260ff9282048316151560c0820152600160e81b909104909116151560e08201529392505050565b6112f661252b565b6113006000611c75565b565b604080516101408101825260008082526020820181905291810182905260608082018390526080820181905260a082015260c0810182905260e0810182905261010081018290526101208101919091526001600160a01b038216600090815261015f602090815260409182902082516101408101845281546001600160801b038082168352600160801b909104169281019290925260018101549282019290925260028201546001600160401b031660608201526003820180549192916080840191906113ce906136a8565b80601f01602080910402602001604051908101604052809291908181526020018280546113fa906136a8565b80156114475780601f1061141c57610100808354040283529160200191611447565b820191906000526020600020905b81548152906001019060200180831161142a57829003601f168201915b50505050508152602001600482018054611460906136a8565b80601f016020809104026020016040519081016040528092919081815260200182805461148c906136a8565b80156114d95780601f106114ae576101008083540402835291602001916114d9565b820191906000526020600020905b8154815290600101906020018083116114bc57829003601f168201915b505050918352505060058201546001600160401b038082166020840152600160401b909104811660408301526006830154606083015260079092015490911660809091015292915050565b60655433906001600160a01b031681146115925760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610743565b61159b81611c75565b50565b6000806115ab86866121ee565b6002810154909150600160e81b900460ff16156115db576040516328786e4960e11b815260040160405180910390fd5b6002810154600160401b90046001600160a01b0316331461160e576040516282b42960e81b815260040160405180910390fd5b600061161b828686612265565b60405191945091507f39c729f66b0c8aa543d92bc83fb7e0914c9701326b96365b593f28ba706976e49061165890849088908890869089906135b2565b60405180910390a161166a87876123df565b5050949350505050565b6000806116848585856000611cd1565b90508060000160149054906101000a90046001600160401b031691507f20e2c2fc72b2cb9fbae9d7d8fd4bdf5bdcc4579043e1e9854e2baf045b6a31d3816040516116cf9190613576565b60405180910390a1509392505050565b33600090815261015f602052604090206005810154600160401b90046001600160401b03166117215760405163df51c43160e01b815260040160405180910390fd5b80546001600160801b038381166001600160801b0319831681178455604080513381529290931660208301819052928201527f40873158a9e1446599b5dee14bfd652e53a6f48605dab5aaac3b8a12a56c7fce9060600161114f565b33600090815261015f602052604090206005810154600160401b90046001600160401b03166117bf5760405163df51c43160e01b815260040160405180910390fd5b60008160040180546117d0906136a8565b80601f01602080910402602001604051908101604052809291908181526020018280546117fc906136a8565b80156118495780601f1061181e57610100808354040283529160200191611849565b820191906000526020600020905b81548152906001019060200180831161182c57829003601f168201915b50939450611861935050506004840190508585612bb3565b507f1efad1d69168ff2e29c45661eed77d2de2b8c95f412cd22a65b15a38e24f70883382868660405161189794939291906131c8565b60405180910390a150505050565b60fc546001600160a01b038216600090815261015f60205260408120549091610c55916001600160801b0391821691166135e7565b6000816040516020016118ef91815260200190565b604051602081830303815290604052805190602001209050919050565b6001600160a01b03811661196d5760405162461bcd60e51b815260206004820152602260248201527f6e657744656661756c7450726f7669646572206973207a65726f206164647265604482015261737360f01b6064820152608401610743565b611975611c8e565b60fd80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f3db81271b05fbf6a656114a99415fdfd27fadb1a34c9a139eb029fba4f6dfdb09101610d7b565b6119d7611c8e565b60fc80546001600160801b038381166001600160801b031983168117909355604080519190921680825260208201939093527fb73e06a6ae37bdd616d5087ef40ccc7ca25ea84e7cfa93dbf9a2815e2cdde6749101610d7b565b611a3961252b565b606580546001600160a01b0383166001600160a01b03199091168117909155611a6a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03163b151590565b600054610100900460ff16611ad85760405162461bcd60e51b8152600401610743906132df565b611300612585565b600054610100900460ff166113005760405162461bcd60e51b8152600401610743906132df565b6001600160a01b038416611b555760405162461bcd60e51b815260206004820152601560248201527461646d696e206973207a65726f206164647265737360581b6044820152606401610743565b6001600160a01b038216611bab5760405162461bcd60e51b815260206004820152601f60248201527f64656661756c7450726f7669646572206973207a65726f2061646472657373006044820152606401610743565b60fb80546001600160a01b038087166001600160a01b0319928316179092556001600160801b03851660fc5560fd8054928516929091169190911790558015611c6f5760005b602060ff82161015611c6d57600060fe60ff831660208110611c2357634e487b7160e01b600052603260045260246000fd5b6003020180546001600160a01b0319166001908117825560028201805467ffffffffffffffff19166104d217905561012360f01b9101555080611c65816136e3565b915050611bf1565b505b50505050565b606580546001600160a01b031916905561159b816125b5565b6033546001600160a01b03163314801590611cb4575060fb546001600160a01b03163314155b15611300576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038416600090815261015f602052604081206005810154600160401b90046001600160401b0316611d1c5760405163df51c43160e01b815260040160405180910390fd5b60058101546001600160401b03600160401b8204811691168110611d5357604051633e51508560e01b815260040160405180910390fd5b60018260050160088282829054906101000a90046001600160401b0316611d7a9190613612565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506000611da9886118a5565b9050806001600160801b0316341015611dd45760405162976f7560e21b815260040160405180910390fd5b82546001600160801b03808216918591601091611dfa918591600160801b9004166135e7565b82546101009290920a6001600160801b038181021990931691831602179091558454169050611e2834612607565b611e329190613634565b60fc8054601090611e54908490600160801b90046001600160801b03166135e7565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550611e828883612674565b80546001600160401b03808516600160a01b026001600160e01b03199092166001600160a01b038c16179190911782556007850154919550611ed791611ec991168461365c565b6001600160401b031661280a565b845463ffffffff91909116600160e01b026001600160e01b039091161784556006830154604051611f15918991602001918252602082015260400190565b60408051808303601f190181529190528051602090910120600185015560028401805468010000000000000000600160e01b03191633600160401b02179055611f5d4361286f565b600285018054961515600160e81b0260ff60e81b19981515600160e01b0267ffffffffffffffff60ff60e01b01199098166001600160401b03939093169290921796909617969096169590951790935550949350505050565b600080516020613730833981519152546001600160a01b031690565b61159b61252b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561200d57610840836128d7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204657600080fd5b505afa925050508015612076575060408051601f3d908101601f1916820190925261207391810190612f0c565b60015b6120d95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610743565b60008051602061373083398151915281146121485760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610743565b50610840838383612973565b306001600160a01b031663cd3474d76040518163ffffffff1660e01b815260040160206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c59190613042565b63ffffffff1663666972651461130057604051635a31e73d60e11b815260040160405180910390fd5b60006121fa838361249a565b8054909150600160a01b90046001600160401b03161580612228575080546001600160a01b03848116911614155b80612247575080546001600160401b03838116600160a01b9092041614155b15610c5557604051636211b9a960e11b815260040160405180910390fd5b82546000908190819061228590600160e01b900463ffffffff1685612998565b90506000612292866118da565b9050866001015481836040516020016122b5929190918252602082015260400190565b60405160208183030381529060405280519060200120146122e95760405163b8be1a8d60e01b815260040160405180910390fd5b600287015460009350600160e01b900460ff16156123315760028701546001600160401b0316408061232e5760405163492aae0760e11b815260040160405180910390fd5b92505b6040805160208082018990528183018890526060808301879052835180840390910181526080909201909252805191012087546001600160a01b038116600090815261015f602052604090206007810154929650916001600160401b03600160a01b9092048216911610156123d4578754600782018054600160a01b9092046001600160401b031667ffffffffffffffff19909216919091179055600681018690555b505050935093915050565b6000806123ec84846129dc565b9092509050600060fe60ff83166020811061241757634e487b7160e01b600052603260045260246000fd5b6003020180549091506001600160a01b03868116911614801561244d575080546001600160401b03858116600160a01b90920416145b1561246957805467ffffffffffffffff60a01b19168155611c6d565b5050600090815261015e60205260408120818155600181019190915560020180546001600160f01b03191690555050565b60008060006124a985856129dc565b909250905060fe60ff8216602081106124d257634e487b7160e01b600052603260045260246000fd5b6003020180549093506001600160a01b038681169116148015612508575082546001600160401b03858116600160a01b90920416145b15612514575050610c55565b50600090815261015e602052604090209392505050565b6033546001600160a01b031633146113005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610743565b600054610100900460ff166125ac5760405162461bcd60e51b8152600401610743906132df565b61130033611c75565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160801b038211156126705760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610743565b5090565b60008061268184846129dc565b915060fe905060ff8216602081106126a957634e487b7160e01b600052603260045260246000fd5b600302018054909250600160a01b90046001600160401b0316156128035781546000906126f0906001600160a01b03811690600160a01b90046001600160401b03166129dc565b50600090815261015e60205260409020835481546001600160a01b031981166001600160a01b03928316908117845586546001600160401b03600160a01b9182900481169091026001600160e01b031993841690921791909117808555875463ffffffff600160e01b918290041681026001600160e01b03909216919091178555600180890154908601556002808901805491909601805467ffffffffffffffff1981169290941691821781558654600160401b908190049096169095029290931690921717808355835460ff908390048116151590920260ff60e01b198216811784559354600160e81b90819004909216151590910260ff60e81b1990931661ffff60e01b1990911617919091179055505b5092915050565b600063ffffffff8211156126705760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610743565b60006001600160401b038211156126705760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610743565b6001600160a01b0381163b6129445760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610743565b60008051602061373083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61297c83612a35565b6000825111806129895750805b1561084057611c6f8383612a75565b805b6001600160401b03831615610c55576040805160208082019390935281518082038401815290820190915280519101206129d560018461365c565b925061299a565b6040805160609390931b6bffffffffffffffffffffffff191660208085019190915260c09290921b6001600160c01b03191660348401528051601c818503018152603c9093019052815191012090600082901a601f1690565b612a3e816128d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b612add5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610743565b600080846001600160a01b031684604051612af891906131ac565b600060405180830381855af49150503d8060008114612b33576040519150601f19603f3d011682016040523d82523d6000602084013e612b38565b606091505b5091509150612b60828260405180606001604052806027815260200161375060279139612b69565b95945050505050565b60608315612b78575081612b82565b612b828383612b89565b9392505050565b815115612b995781518083602001fd5b8060405162461bcd60e51b81526004016107439190613234565b828054612bbf906136a8565b90600052602060002090601f016020900481019282612be15760008555612c27565b82601f10612bfa5782800160ff19823516178555612c27565b82800160010185558215612c27579182015b82811115612c27578235825591602001919060010190612c0c565b506126709291505b808211156126705760008155600101612c2f565b80356001600160a01b0381168114612c5a57600080fd5b919050565b80358015158114612c5a57600080fd5b60008083601f840112612c80578182fd5b5081356001600160401b03811115612c96578182fd5b602083019150836020828501011115612cae57600080fd5b9250929050565b80356001600160801b0381168114612c5a57600080fd5b80356001600160401b0381168114612c5a57600080fd5b600060208284031215612cf4578081fd5b612b8282612c43565b600080600080600060a08688031215612d14578081fd5b612d1d86612c43565b9450612d2b60208701612c43565b9350612d3960408701612cb5565b9250612d4760608701612c43565b9150612d5560808701612c5f565b90509295509295909350565b60008060408385031215612d73578182fd5b612d7c83612c43565b946020939093013593505050565b600080600060608486031215612d9e578283fd5b612da784612c43565b925060208401359150612dbc60408501612c5f565b90509250925092565b60008060408385031215612dd7578182fd5b612de083612c43565b915060208301356001600160401b0380821115612dfb578283fd5b818501915085601f830112612e0e578283fd5b813581811115612e2057612e20613719565b604051601f8201601f19908116603f01168101908382118183101715612e4857612e48613719565b81604052828152886020848701011115612e60578586fd5b82602086016020830137856020848301015280955050505050509250929050565b60008060408385031215612e93578182fd5b612e9c83612c43565b9150612eaa60208401612ccc565b90509250929050565b60008060008060808587031215612ec8578384fd5b612ed185612c43565b9350612edf60208601612ccc565b93969395505050506040820135916060013590565b600060208284031215612f05578081fd5b5035919050565b600060208284031215612f1d578081fd5b5051919050565b600080600060608486031215612f38578283fd5b505081359360208301359350604090920135919050565b60008060208385031215612f61578182fd5b82356001600160401b03811115612f76578283fd5b612f8285828601612c6f565b90969095509350505050565b600060208284031215612f9f578081fd5b612b8282612cb5565b600080600080600080600060a0888a031215612fc2578485fd5b612fcb88612cb5565b96506020880135955060408801356001600160401b0380821115612fed578687fd5b612ff98b838c01612c6f565b909750955085915061300d60608b01612ccc565b945060808a0135915080821115613022578384fd5b5061302f8a828b01612c6f565b989b979a50959850939692959293505050565b600060208284031215613053578081fd5b815163ffffffff81168114612b82578182fd5b6000815180845261307e81602086016020860161367c565b601f01601f19169290920160200192915050565b8054600090600181811c90808316806130ac57607f831692505b60208084108214156130cc57634e487b7160e01b86526022600452602486fd5b838852602088018280156130e757600181146130f857613123565b60ff19871682528282019750613123565b60008981526020902060005b8781101561311d57815484820152908601908401613104565b83019850505b5050505050505092915050565b80546001600160a01b03808216845260a082811c6001600160401b03908116602087015260e09390931c604080870191909152600185015460608701526002850154938416608087015283901c8216908501525061319860c0840160ff8360e01c1615159052565b61084060e0840160ff8360e81c1615159052565b600082516131be81846020870161367c565b9190910192915050565b6001600160a01b03851681526060602082018190526000906131ec90830186613066565b82810360408401528381528385602083013781602085830101526020601f19601f86011682010191505095945050505050565b8281526101208101612b826020830184613130565b602081526000612b826020830184613066565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081526133446020820183516001600160801b03169052565b6000602083015161336060408401826001600160801b03169052565b5060408301516060830152606083015161338560808401826001600160401b03169052565b5060808301516101408060a08501526133a2610160850183613066565b915060a0850151601f198584030160c08601526133bf8382613066565b92505060c08501516133dc60e08601826001600160401b03169052565b5060e08501516101006133f9818701836001600160401b03169052565b86015161012086810191909152909501516001600160401b031693019290925250919050565b6020815260008254613445602084016001600160801b0383166001600160801b03169052565b608090811c60408401526001840154606084015260028401546001600160401b03169083015261014060a08301819052613486610160840160038601613092565b838103601f190160c085015261349f8160048701613092565b60058601546001600160401b0380821660e088015260409190911c8116610100870152600687015461012087015260079096015490951691909301525090919050565b60006101008201905060018060a01b03835116825260208301516001600160401b03808216602085015263ffffffff604086015116604085015260608501516060850152806080860151166080850152505060a083015161354e60a08401826001600160a01b03169052565b5060c083015161356260c084018215159052565b5060e083015161280360e084018215159052565b6101008101610c558284613130565b61016081016135948287613130565b84610100830152836101208301528261014083015295945050505050565b61018081016135c18288613130565b856101008301528461012083015283610140830152826101608301529695505050505050565b60006001600160801b0380831681851680830382111561360957613609613703565b01949350505050565b60006001600160401b0380831681851680830382111561360957613609613703565b60006001600160801b038381169083168181101561365457613654613703565b039392505050565b60006001600160401b038381169083168181101561365457613654613703565b60005b8381101561369757818101518382015260200161367f565b83811115611c6f5750506000910152565b600181811c908216806136bc57607f821691505b602082108114156136dd57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff8114156136fa576136fa613703565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201607115b0984f24c3857d208f70f4e474ae0e9a13dff7082284530e339362e6364736f6c63430008040033