0 txs
1 call
constructor
constructor()
functions
allowedBondRanges
viewfunction allowedBondRanges(address currency) view returns (uint128 minimumBond, uint128 maximumBond)
ancillaryBytesLimit
viewfunction ancillaryBytesLimit() view returns (uint256)
CONFIG_ADMIN_ROLE
viewfunction CONFIG_ADMIN_ROLE() view returns (bytes32)
customBonds
viewfunction customBonds(bytes32 managedRequestId, address currency) view returns (uint256 amount, bool isSet)
customLivenessValues
viewfunction customLivenessValues(bytes32 managedRequestId) view returns (uint256 liveness, bool isSet)
customProposerWhitelists
viewfunction customProposerWhitelists(bytes32 managedRequestId) view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
defaultLiveness
viewfunction defaultLiveness() view returns (uint256)
defaultProposerWhitelist
viewfunction defaultProposerWhitelist() view returns (address)
deferredPayouts
viewfunction deferredPayouts(address currency, address deferredRecipient) view returns (uint256)
finder
viewfunction finder() view returns (address)
getCurrentTime
viewfunction getCurrentTime() view returns (uint256)
getCustomProposerWhitelist
viewfunction getCustomProposerWhitelist(address requester, bytes32 identifier, bytes ancillaryData) view returns (address)
getManagedRequestId
purefunction getManagedRequestId(address requester, bytes32 identifier, bytes ancillaryData) pure returns (bytes32)
getProposerWhitelistWithEnabledStatus
viewfunction getProposerWhitelistWithEnabledStatus(address requester, bytes32 identifier, bytes ancillaryData) view returns (address[] allowedProposers, bool isEnabled)
getRequest
viewfunction getRequest(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getState
viewfunction getState(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) view returns (uint8)
hasPrice
viewfunction hasPrice(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
minimumLiveness
viewfunction minimumLiveness() view returns (uint256)
OO_ANCILLARY_DATA_LIMIT
viewfunction OO_ANCILLARY_DATA_LIMIT() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
REQUEST_MANAGER_ROLE
viewfunction REQUEST_MANAGER_ROLE() view returns (bytes32)
requesterWhitelist
viewfunction requesterWhitelist() view returns (address)
requests
viewfunction requests(bytes32) view returns (address proposer, address disputer, address currency, bool settled, tuple requestSettings, int256 proposedPrice, int256 resolvedPrice, uint256 expirationTime, uint256 reward, uint256 finalFee)
stampAncillaryData
purefunction stampAncillaryData(bytes ancillaryData, address requester) pure returns (bytes)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TOO_EARLY_RESPONSE
viewfunction TOO_EARLY_RESPONSE() view returns (int256)
UPGRADE_ADMIN_ROLE
viewfunction UPGRADE_ADMIN_ROLE() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
addRequestManager
nonpayablefunction addRequestManager(address requestManager)
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
claimDeferredPayout
nonpayablefunction claimDeferredPayout(address currency, address repaymentAddress)
disputePrice
nonpayablefunction disputePrice(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) returns (uint256 totalBond)
disputePriceFor
nonpayablefunction disputePriceFor(address disputer, address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) returns (uint256 totalBond)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(uint256 _defaultLiveness, address _finderAddress, address _defaultProposerWhitelist, address _requesterWhitelist, tuple[] _allowedBondRanges, uint256 _minimumLiveness, address configAdmin, address upgradeAdmin)
initialize
nonpayablefunction initialize(uint256 _liveness, address _finderAddress, address upgradeAdmin)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
proposePrice
nonpayablefunction proposePrice(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData, int256 proposedPrice) returns (uint256 totalBond)
proposePriceFor
nonpayablefunction proposePriceFor(address proposer, address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData, int256 proposedPrice) returns (uint256 totalBond)
removeRequestManager
nonpayablefunction removeRequestManager(address requestManager)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
requestManagerSetBond
nonpayablefunction requestManagerSetBond(address requester, bytes32 identifier, bytes ancillaryData, address currency, uint256 bond)
requestManagerSetCustomLiveness
nonpayablefunction requestManagerSetCustomLiveness(address requester, bytes32 identifier, bytes ancillaryData, uint256 customLiveness)
requestManagerSetProposerWhitelist
nonpayablefunction requestManagerSetProposerWhitelist(address requester, bytes32 identifier, bytes ancillaryData, address whitelist)
requestPrice
nonpayablefunction requestPrice(bytes32 identifier, uint256 timestamp, bytes ancillaryData, address currency, uint256 reward) returns (uint256 totalBond)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setAllowedBondRange
nonpayablefunction setAllowedBondRange(address currency, tuple newRange)
setBond
nonpayablefunction setBond(bytes32 identifier, uint256 timestamp, bytes ancillaryData, uint256 bond) returns (uint256 totalBond)
setCallbacks
nonpayablefunction setCallbacks(bytes32 identifier, uint256 timestamp, bytes ancillaryData, bool callbackOnPriceProposed, bool callbackOnPriceDisputed, bool callbackOnPriceSettled)
setCustomLiveness
nonpayablefunction setCustomLiveness(bytes32 identifier, uint256 timestamp, bytes ancillaryData, uint256 customLiveness)
setDefaultProposerWhitelist
nonpayablefunction setDefaultProposerWhitelist(address whitelist)
setEventBased
nonpayablefunction setEventBased(bytes32 identifier, uint256 timestamp, bytes ancillaryData)
setMinimumLiveness
nonpayablefunction setMinimumLiveness(uint256 _minimumLiveness)
setRefundOnDispute
nonpayablefunction setRefundOnDispute(bytes32 identifier, uint256 timestamp, bytes ancillaryData)
setRequesterWhitelist
nonpayablefunction setRequesterWhitelist(address whitelist)
settle
nonpayablefunction settle(address requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData) returns (uint256 payout)
settleAndGetPrice
nonpayablefunction settleAndGetPrice(bytes32 identifier, uint256 timestamp, bytes ancillaryData) returns (int256)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AllowedBondRangeUpdated
event AllowedBondRangeUpdated(address indexed currency, uint256 newMinimumBond, uint256 newMaximumBond)
ClaimedDeferredPayout
event ClaimedDeferredPayout(address indexed currency, address indexed deferredRecipient, address indexed repaymentAddress, uint256 amount)
CustomBondSet
event CustomBondSet(bytes32 indexed managedRequestId, address requester, bytes32 indexed identifier, bytes ancillaryData, address indexed currency, uint256 bond)
CustomLivenessSet
event CustomLivenessSet(bytes32 indexed managedRequestId, address indexed requester, bytes32 indexed identifier, bytes ancillaryData, uint256 customLiveness)
CustomProposerWhitelistSet
event CustomProposerWhitelistSet(bytes32 indexed managedRequestId, address requester, bytes32 indexed identifier, bytes ancillaryData, address indexed newWhitelist)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
DefaultProposerWhitelistUpdated
event DefaultProposerWhitelistUpdated(address indexed newWhitelist)
DisputePrice
event DisputePrice(address indexed requester, address indexed proposer, address indexed disputer, bytes32 identifier, uint256 timestamp, bytes ancillaryData, int256 proposedPrice)
Initialized
event Initialized(uint64 version)
MinimumLivenessUpdated
event MinimumLivenessUpdated(uint256 newMinimumLiveness)
PayoutDeferred
event PayoutDeferred(address indexed currency, address indexed deferredRecipient, uint256 amount)
ProposePrice
event ProposePrice(address indexed requester, address indexed proposer, bytes32 identifier, uint256 timestamp, bytes ancillaryData, int256 proposedPrice, uint256 expirationTimestamp, address currency)
RequesterWhitelistUpdated
event RequesterWhitelistUpdated(address indexed newWhitelist)
RequestPrice
event RequestPrice(address indexed requester, bytes32 identifier, uint256 timestamp, bytes ancillaryData, address currency, uint256 reward, uint256 finalFee)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Settle
event Settle(address indexed requester, address indexed proposer, address indexed disputer, bytes32 identifier, uint256 timestamp, bytes ancillaryData, int256 price, uint256 payout)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AncillaryDataTooLong
error AncillaryDataTooLong()
BondBelowMinimumBond
error BondBelowMinimumBond()
BondExceedsMaximumBond
error BondExceedsMaximumBond()
CannotProposeTooEarly
error CannotProposeTooEarly()
DisputerAddressCannotBeZero
error DisputerAddressCannotBeZero()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
LivenessCannotBeZero
error LivenessCannotBeZero()
LivenessTooLarge
error LivenessTooLarge()
LivenessTooLow
error LivenessTooLow()
MinimumBondAboveMaximumBond
error MinimumBondAboveMaximumBond()
NoDeferredPayoutToClaim
error NoDeferredPayoutToClaim()
NotInitializing
error NotInitializing()
ProposerAddressCannotBeZero
error ProposerAddressCannotBeZero()
ProposerNotWhitelisted
error ProposerNotWhitelisted()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RepaymentAddressCannotBeZero
error RepaymentAddressCannotBeZero()
RequesterNotWhitelisted
error RequesterNotWhitelisted()
RequestNotSettleable
error RequestNotSettleable()
RequestStateNotInvalid
error RequestStateNotInvalid()
RequestStateNotProposed
error RequestStateNotProposed()
RequestStateNotRequested
error RequestStateNotRequested()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SenderNotWhitelisted
error SenderNotWhitelisted()
TimestampInFuture
error TimestampInFuture()
UnsupportedCurrency
error UnsupportedCurrency()
UnsupportedIdentifier
error UnsupportedIdentifier()
UnsupportedWhitelistInterface
error UnsupportedWhitelistInterface()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroBondNotAllowed
error ZeroBondNotAllowed()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610029565b610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c3d6101015f395f8181612f4601528181612f6f01526130af0152615c3d5ff3fe608060405260043610610400575f3560e01c806391d1485411610215578063b8b4f9081161011e578063cf6eefb7116100a8578063f327b07511610078578063f327b07514610db8578063f38fdc0214610dd7578063fba7f1e314610df7578063fe4e198314610e16578063ff8c1a8c14610e2b575f5ffd5b8063cf6eefb714610d0a578063d547741f14610d44578063d602b9fd14610d63578063e92706c614610d77575f5ffd5b8063c371dda7116100ee578063c371dda714610c8e578063c78ef28c14610ca3578063cc8463c814610cc3578063cdb21cc614610cd7578063cefc142914610cf6575f5ffd5b8063b8b4f90814610c05578063b9a3c84c14610c24578063ba4b930c14610c43578063bc58ccaa14610c6f575f5ffd5b8063ab328fb21161019f578063af5d2f391161016f578063af5d2f3914610afd578063afe1fcff14610b1c578063b4988fd014610b67578063b6cdb8ee14610b86578063b873c4df14610ba5575f5ffd5b8063ab328fb214610a55578063ac9650d814610a75578063ad3cb1cc14610aa1578063ad5a755a14610ade575f5ffd5b80639f345503116101e55780639f34550314610993578063a1eda53c146109c9578063a217fddf14610810578063a625b01e146109fc578063a9904f9b14610a29575f5ffd5b806391d148541461083957806391f58dcb1461085857806393ae2ebd146108775780639d86698514610896575f5ffd5b80634ccb56f5116103175780636b821d06116102a157806384ef8ffc1161027157806384ef8ffc146107b35780638aca6afc146107c75780638da5cb5b146107fc5780638ffc21201461081057806391152f1014610823575f5ffd5b80636b821d061461073757806376c7823f146107565780637746e7ae146107755780637c82288f14610794575f5ffd5b80635845e68a116102e75780635845e68a1461069c5780635e9a79a9146106bb578063634e93da146106da578063649a5ec7146106f95780636982ece014610718575f5ffd5b80634ccb56f5146106425780634f1ef2861461065657806352d1902d1461066957806353b592391461067d575f5ffd5b80632589382b1161039857806332ecce9e1161036857806332ecce9e146105a7578063347b4dba146105c657806336568abe146105e5578063473c45fe146106045780634835698a14610623575f5ffd5b80632589382b1461051f57806329cb924d146105575780632a0fb912146105695780632f2ff15d14610588575f5ffd5b8063120698af116103d3578063120698af146104a35780631480db39146104c25780631fa50cef146104e1578063248a9ca314610500575f5ffd5b806301ffc9a714610404578063022d63fb146104385780630aa6220b1461046057806311df92f114610476575b5f5ffd5b34801561040f575f5ffd5b5061042361041e366004614aae565b610e42565b60405190151581526020015b60405180910390f35b348015610443575f5ffd5b50620697805b60405165ffffffffffff909116815260200161042f565b34801561046b575f5ffd5b50610474610e6c565b005b348015610481575f5ffd5b50610495610490366004614ba5565b610e81565b60405190815260200161042f565b3480156104ae575f5ffd5b506104746104bd366004614c0a565b610f22565b3480156104cd575f5ffd5b506104746104dc366004614c65565b610f9a565b3480156104ec575f5ffd5b506104746104fb366004614c65565b610fc9565b34801561050b575f5ffd5b5061049561051a366004614c80565b610ff8565b34801561052a575f5ffd5b5061047f5461053f906001600160a01b031681565b6040516001600160a01b03909116815260200161042f565b348015610562575f5ffd5b5042610495565b348015610574575f5ffd5b50610474610583366004614c97565b611018565b348015610593575f5ffd5b506104746105a2366004614cce565b61112e565b3480156105b2575f5ffd5b506104746105c1366004614c80565b611156565b3480156105d1575f5ffd5b506104746105e0366004614cf1565b611185565b3480156105f0575f5ffd5b506104746105ff366004614cce565b61124b565b34801561060f575f5ffd5b5061047461061e366004614d58565b61130d565b34801561062e575f5ffd5b5061049561063d366004614dab565b61137c565b34801561064d575f5ffd5b506104956113b2565b610474610664366004614de9565b6113c2565b348015610674575f5ffd5b506104956113dd565b348015610688575f5ffd5b50610495610697366004614c0a565b6113f8565b3480156106a7575f5ffd5b506104746106b6366004614e35565b611455565b3480156106c6575f5ffd5b506104956106d5366004614e73565b61148d565b3480156106e5575f5ffd5b506104746106f4366004614c65565b6114bc565b348015610704575f5ffd5b50610474610713366004614ed1565b6114cf565b348015610723575f5ffd5b50610474610732366004614ef6565b6114e2565b348015610742575f5ffd5b50610474610751366004614c65565b611572565b348015610761575f5ffd5b50610495610770366004614f35565b6115a1565b348015610780575f5ffd5b5061053f61078f366004614dab565b611909565b34801561079f575f5ffd5b506104956107ae366004614fa5565b611942565b3480156107be575f5ffd5b5061053f611aeb565b3480156107d2575f5ffd5b5061053f6107e1366004614c80565b6104826020525f90815260409020546001600160a01b031681565b348015610807575f5ffd5b5061053f611b06565b34801561081b575f5ffd5b506104955f81565b34801561082e575f5ffd5b506104956104845481565b348015610844575f5ffd5b50610423610853366004614cce565b611b14565b348015610863575f5ffd5b50610474610872366004614c0a565b611b4a565b348015610882575f5ffd5b5061047461089136600461501f565b611bc6565b3480156108a1575f5ffd5b5061097d6108b0366004614c80565b5f6020818152918152604090819020805460018201546002830154845160e081018652600385015460ff8082161515835261010082048116151598830198909852620100008104881615159682019690965263010000008604871615156060820152640100000000909504861615156080860152600484015460a0860152600584015460c08601526006840154600785015460088601546009870154600a909701546001600160a01b03968716999587169896851697600160a01b9095049095169594929391929091908a565b60405161042f9a999897969594939291906150ad565b34801561099e575f5ffd5b506104956109ad366004614c97565b606660209081525f928352604080842090915290825290205481565b3480156109d4575f5ffd5b506109dd611d0b565b6040805165ffffffffffff93841681529290911660208301520161042f565b348015610a07575f5ffd5b50610a1b610a16366004614dab565b611d7a565b60405161042f929190615114565b348015610a34575f5ffd5b50610a48610a43366004614e73565b611e62565b60405161042f919061516c565b348015610a60575f5ffd5b5061047e5461053f906001600160a01b031681565b348015610a80575f5ffd5b50610a94610a8f366004615219565b61200f565b60405161042f91906152b6565b348015610aac575f5ffd5b50610ad1604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161042f9190615319565b348015610ae9575f5ffd5b50610495610af8366004614d58565b612155565b348015610b08575f5ffd5b50610ad1610b1736600461532b565b6121d4565b348015610b27575f5ffd5b50610b52610b36366004614c80565b6104816020525f90815260409020805460019091015460ff1682565b6040805192835290151560208301520161042f565b348015610b72575f5ffd5b50610474610b8136600461536e565b6121e0565b348015610b91575f5ffd5b50610474610ba0366004614c65565b6122db565b348015610bb0575f5ffd5b50610be5610bbf366004614c65565b6104836020525f90815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161042f565b348015610c10575f5ffd5b50610495610c1f3660046153ad565b612302565b348015610c2f575f5ffd5b5060645461053f906001600160a01b031681565b348015610c4e575f5ffd5b50610c62610c5d366004614e73565b612311565b60405161042f9190615426565b348015610c7a575f5ffd5b50610423610c89366004614e73565b612326565b348015610c99575f5ffd5b5061049561200081565b348015610cae575f5ffd5b506104955f516020615b485f395f51905f5281565b348015610cce575f5ffd5b50610449612394565b348015610ce2575f5ffd5b50610474610cf136600461544c565b61240f565b348015610d01575f5ffd5b506104746125c5565b348015610d15575f5ffd5b50610d1e612604565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161042f565b348015610d4f575f5ffd5b50610474610d5e366004614cce565b612631565b348015610d6e575f5ffd5b50610474612659565b348015610d82575f5ffd5b50610b52610d91366004614cce565b61048060209081525f92835260408084209091529082529020805460019091015460ff1682565b348015610dc3575f5ffd5b50610474610dd2366004615531565b61266b565b348015610de2575f5ffd5b506104955f516020615ba85f395f51905f5281565b348015610e02575f5ffd5b50610495610e11366004614e73565b612711565b348015610e21575f5ffd5b5061049560655481565b348015610e36575f5ffd5b50610495600160ff1b81565b5f6001600160e01b031982166318a4c3c360e11b1480610e665750610e668261271f565b92915050565b5f610e7681612753565b610e7e61275d565b50565b61047f54604051631d1d5b3960e11b81523360048201525f916001600160a01b031690633a3ab67290602401602060405180830381865afa158015610ec8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eec91906155b4565b610f0957604051630f3c7c2760e01b815260040160405180910390fd5b610f168686868686612769565b90505b95945050505050565b610f2a612c04565b610f32612c27565b6001610f4033858585612c33565b6006811115610f5157610f51615412565b14610f6f57604051633a4e124d60e11b815260040160405180910390fd5b5f610f7c33858585612d65565b600301805461ffff191661010117905550610f95612d8b565b505050565b610fa2612c04565b610faa612c27565b610fc15f516020615ba85f395f51905f5282612631565b610e7e612d8b565b610fd1612c04565b610fd9612c27565b610fef5f516020615b485f395f51905f52612753565b610fc181612d9a565b5f9081525f516020615bc85f395f51905f52602052604090206001015490565b611020612c04565b611028612c27565b6001600160a01b03811661104f57604051638aab32bb60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526066602090815260408083203380855292528220549091819003611094576040516343dd54af60e11b815260040160405180910390fd5b6001600160a01b038085165f8181526066602090815260408083209487168352939052918220919091556110c9908483612ded565b826001600160a01b0316826001600160a01b0316856001600160a01b03167fcc3d45545de1c1a8f0838d40d010e05ec9b3e852342d99d1441e684a15e13c108460405161111891815260200190565b60405180910390a4505061112a612d8b565b5050565b8161114c57604051631fe1e13d60e11b815260040160405180910390fd5b61112a8282612e4c565b61115e612c04565b611166612c27565b61117c5f516020615b485f395f51905f52612753565b610fc181612e68565b61118d612c04565b611195612c27565b6111ab5f516020615ba85f395f51905f52612753565b6001600160a01b038116156111c3576111c381612ead565b5f6111cf85858561137c565b5f81815261048260205260409081902080546001600160a01b0319166001600160a01b038616908117909155905191925090859083907f6176bed8b34e20579b664c32ad00534f173e1f7c4410232beef89bed4464ddc090611234908a9089906155cf565b60405180910390a450611245612d8b565b50505050565b5f516020615b885f395f51905f528215801561127f575061126a611aeb565b6001600160a01b0316826001600160a01b0316145b15611303575f5f61128e612604565b90925090506001600160a01b0382161515806112b0575065ffffffffffff8116155b806112c357504265ffffffffffff821610155b156112f0576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b5050805465ffffffffffff60a01b191681555b610f958383612edb565b611315612c04565b61131d612c27565b600161132b33868686612c33565b600681111561133c5761133c615412565b1461135a57604051633a4e124d60e11b815260040160405180910390fd5b61136381612f0e565b8061137033868686612d65565b60050155611245612d8b565b5f83838360405160200161139293929190615609565b6040516020818303038152906040528051906020012090505b9392505050565b6113bf6035612000615641565b81565b6113ca612f3b565b6113d382612fdf565b61112a8282612fe8565b5f6113e66130a4565b505f516020615b685f395f51905f5290565b5f611401612c04565b611409612c27565b600661141733868686612c33565b600681111561142857611428615412565b1461143b57611439338585856130ed565b505b61144733858585612d65565b6007015490506113ab612d8b565b61145d612c04565b611465612c27565b61147b5f516020615b485f395f51905f52612753565b61148582826133e7565b61112a612d8b565b5f611496612c04565b61149e612c27565b6114aa858585856130ed565b90506114b4612d8b565b949350505050565b5f6114c681612753565b61112a8261355a565b5f6114d981612753565b61112a826135c5565b6114ea612c04565b6114f2612c27565b6115085f516020615ba85f395f51905f52612753565b61151181612f0e565b5f61151d85858561137c565b5f8181526104816020526040908190208490555190915084906001600160a01b0387169083907fc5314bcb93c25473b858a5086195e309861a64b4c3ddae4d0a5cb9c5fb6f30f4906112349088908890615654565b61157a612c04565b611582612c27565b6115985f516020615b485f395f51905f52612753565b610fc181613634565b5f6115aa612c04565b6115b2612c27565b6001600160a01b0386166115d95760405163bef5ceeb60e01b815260040160405180910390fd5b60026115e786868686612c33565b60068111156115f8576115f8615412565b1461161657604051631bc1990760e31b815260040160405180910390fd5b5f61162386868686612d65565b6001810180546001600160a01b0319166001600160a01b038a16179055600a8101546004820154919250906116588282615675565b9350831561167a57600283015461167a906001600160a01b0316333087613687565b5f6116836136c0565b90505f61168f85613733565b6116999085615675565b905080156117315760028501546116ba906001600160a01b03168383613746565b6116c26136c0565b600286015460408051602081018252848152905163432ce91960e11b81526001600160a01b03928316600482015290516024820152911690638659d232906044015f604051808303815f87803b15801561171a575f5ffd5b505af115801561172c573d5f5f3e3d5ffd5b505050505b6117396137cd565b6001600160a01b031663216666a48a611752888c613806565b61175c8b8f613851565b6040518463ffffffff1660e01b815260040161177a93929190615688565b5f604051808303815f87803b158015611791575f5ffd5b505af11580156117a3573d5f5f3e3d5ffd5b50505060098601545f9150158015906117c557506003860154610100900460ff165b156117ee57506009850180545f90915560028601546117ee906001600160a01b03168c83613881565b8b6001600160a01b0316865f015f9054906101000a90046001600160a01b03166001600160a01b03168c6001600160a01b03167f5165909c3d1c01c5d1e121ac6f6d01dda1ba24bc9e1f975b5a375339c15be7f38d8d8d8c6006015460405161185a94939291906156a6565b60405180910390a461186a612d8b565b6001600160a01b038b163b1515801561188e575060038601546301000000900460ff165b156118f3576040516306c791b960e11b81526001600160a01b038c1690630d8f2372906118c5908d908d908d9087906004016156a6565b5f604051808303815f87803b1580156118dc575f5ffd5b505af11580156118ee573d5f5f3e3d5ffd5b505050505b6118fb612c27565b505050505050610f19612d8b565b5f611912612c04565b6104825f61192186868661137c565b815260208101919091526040015f20546001600160a01b0316949350505050565b5f5f61195087878787612d65565b90505f61195e88888761137c565b5f8181526104806020908152604080832060028701546001600160a01b03168452909152902054909150801561199657600483018190555b5f828152610481602052604090205480156119b357600584018190555b5f6119bf8b8b8a613928565b604051631d1d5b3960e11b81526001600160a01b038e8116600483015291925090821690633a3ab67290602401602060405180830381865afa158015611a07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a2b91906155b4565b611a4857604051636ffe5a9560e01b815260040160405180910390fd5b604051631d1d5b3960e11b81523360048201526001600160a01b03821690633a3ab67290602401602060405180830381865afa158015611a8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aae91906155b4565b611acb57604051637ed449a960e01b815260040160405180910390fd5b611ad98c8c8c8c8c8c61396d565b955050505050505b9695505050505050565b5f516020615be85f395f51905f52546001600160a01b031690565b5f611b0f611aeb565b905090565b5f9182525f516020615bc85f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611b52612c04565b611b5a612c27565b6001611b6833858585612c33565b6006811115611b7957611b79615412565b14611b9757604051633a4e124d60e11b815260040160405180910390fd5b6001611ba533858585612d65565b60030180549115156101000261ff0019909216919091179055610f95612d8b565b611bce612c04565b611bd6612c27565b611bec5f516020615ba85f395f51905f52612753565b611bf4613b9c565b604051631d1d5b3960e11b81526001600160a01b0384811660048301529190911690633a3ab67290602401602060405180830381865afa158015611c3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5e91906155b4565b611c7b57604051631131fa7160e11b815260040160405180910390fd5b611c858282613be2565b5f611c9186868661137c565b5f818152610480602090815260408083206001600160a01b038816808552925291829020859055905191925090869083907f4544c320b43beb5421d5149ff92fa72b40f00ac65294c4b8ca3906f08fb5a8c290611cf3908b908a9089906156d5565b60405180910390a450611d04612d8b565b5050505050565b5f516020615be85f395f51905f52545f90600160d01b900465ffffffffffff165f516020615b885f395f51905f528115801590611d5057504265ffffffffffff831610155b611d5b575f5f611d71565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b60605f611d85612c04565b5f611d91868686613928565b9050806001600160a01b031663d01f63f56040518163ffffffff1660e01b81526004015f60405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611df59190810190615708565b816001600160a01b031663184d69ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5591906155b4565b9250925050935093915050565b611ee860408051610140810182525f80825260208083018290528284018290526060808401839052845160e081018652838152918201839052938101829052928301819052608083810182905260a0840182905260c084019190915290919082019081526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611ef0612c04565b611efc85858585612d65565b604080516101408101825282546001600160a01b0390811682526001840154811660208084019190915260028501549182168385015260ff600160a01b90920482161515606080850191909152845160e08082018752600388015480861615158352610100808204871615159584019590955262010000810486161515978301979097526301000000870485161515928201929092526401000000009095049092161515608085810191909152600486015460a080870191909152600587015460c08088019190915291850195909552600686015494840194909452600785015493830193909352600884015490820152600983015491810191909152600a909101546101208201529050949350505050565b6060816001600160401b0381111561202957612029614ad5565b60405190808252806020026020018201604052801561205c57816020015b60608152602001906001900390816120475790505b5090505f5b8281101561214e575f803086868581811061207e5761207e6157af565b905060200281019061209091906157c3565b60405161209e92919061580c565b5f60405180830381855af49150503d805f81146120d6576040519150601f19603f3d011682016040523d82523d5f602084013e6120db565b606091505b509150915081612126576044815110156120f3575f5ffd5b6004810190508080602001905181019061210d919061581b565b60405162461bcd60e51b81526004016112e79190615319565b80848481518110612139576121396157af565b60209081029190910101525050600101612061565b5092915050565b5f61215e612c04565b612166612c27565b600161217433878787612c33565b600681111561218557612185615412565b146121a357604051633a4e124d60e11b815260040160405180910390fd5b5f6121b033878787612d65565b60048101849055600a8101549091506121c99084615675565b9150506114b4612d8b565b60606113ab8383613851565b5f6121e9613c93565b805490915060ff600160401b82041615906001600160401b03165f8115801561220f5750825b90505f826001600160401b0316600114801561222a5750303b155b905081158015612238575080155b156122565760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561228057845460ff60401b1916600160401b1785555b61228b888888613cbb565b83156122d157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6122e3612c04565b6122eb612c27565b610fc15f516020615ba85f395f51905f528261112e565b5f610f16338787878787611942565b5f61231a612c04565b610f1985858585612c33565b5f61232f612c04565b5f61233c86868686612c33565b9050600681600681111561235257612352615412565b148061236f5750600581600681111561236d5761236d615412565b145b80611ae15750600381600681111561238957612389615412565b149695505050505050565b5f516020615be85f395f51905f52545f905f516020615b885f395f51905f5290600160d01b900465ffffffffffff1680158015906123d957504265ffffffffffff8216105b6123f3578154600160d01b900465ffffffffffff16612408565b6001820154600160a01b900465ffffffffffff165b9250505090565b5f612418613c93565b805490915060ff600160401b82041615906001600160401b03165f8115801561243e5750825b90505f826001600160401b031660011480156124595750303b155b905081158015612467575080155b156124855760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156124af57845460ff60401b1916600160401b1785555b6124ba8e8e88613cbb565b6124d15f516020615b485f395f51905f5288613cea565b506124f65f516020615ba85f395f51905f525f516020615b485f395f51905f52613d56565b6124ff8c612d9a565b6125088b613634565b5f5b898110156125655761255d8b8b83818110612527576125276157af565b61253d9260206060909202019081019150614c65565b8c8c8481811061254f5761254f6157af565b9050606002016020016133e7565b60010161250a565b5061256f88612e68565b83156125b557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b5f6125ce612604565b509050336001600160a01b038216146125fc57604051636116401160e11b81523360048201526024016112e7565b610e7e613d7e565b5f516020615b885f395f51905f52546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161264f57604051631fe1e13d60e11b815260040160405180910390fd5b61112a8282613e17565b5f61266381612753565b610e7e613e33565b612673612c04565b61267b612c27565b600161268933888888612c33565b600681111561269a5761269a615412565b146126b857604051633a4e124d60e11b815260040160405180910390fd5b5f6126c533888888612d65565b600301805463ffff00001916620100008615150263ff0000001916176301000000851515021764ff0000000019166401000000008415150217905550612709612d8b565b505050505050565b5f610f1933868686866115a1565b5f6001600160e01b03198216637965db0b60e01b1480610e6657506301ffc9a760e01b6001600160e01b0319831614610e66565b610e7e8133613e3d565b6127675f5f613e76565b565b5f612772612c04565b61277a612c27565b5f61278733888888612c33565b600681111561279857612798615412565b146127b65760405163f757fcff60e01b815260040160405180910390fd5b6127be613f4e565b6001600160a01b03166390978d1b876040518263ffffffff1660e01b81526004016127eb91815260200190565b602060405180830381865afa158015612806573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282a91906155b4565b612847576040516356175d8f60e01b815260040160405180910390fd5b61284f613b9c565b604051631d1d5b3960e11b81526001600160a01b0385811660048301529190911690633a3ab67290602401602060405180830381865afa158015612895573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b991906155b4565b6128d657604051631131fa7160e11b815260040160405180910390fd5b428511156128f7576040516347860b9760e01b815260040160405180910390fd5b6129046035612000615641565b8451111561292557604051630a56acd960e01b815260040160405180910390fd5b5f61292e6136c0565b604051635b97aadd60e01b81526001600160a01b0386811660048301529190911690635b97aadd90602401602060405180830381865afa158015612974573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612998919061588f565b5f015190506040518061014001604052805f6001600160a01b031681526020015f6001600160a01b03168152602001856001600160a01b031681526020015f151581526020016040518060e001604052805f151581526020015f151581526020015f151581526020015f151581526020015f151581526020018481526020015f81525081526020015f81526020015f81526020015f8152602001848152602001828152505f5f612a4a338b8b8b613f94565b815260208082019290925260409081015f20835181546001600160a01b03199081166001600160a01b039283161783558585015160018401805490921690831617905584830151600283018054606080890151939094166001600160a81b031990911617600160a01b9215159290920291909117905560808086015180516003850180549783015196830151948301519383015161ffff1990981691151561ff0019169190911761010096151587021763ffff00001916620100009415159490940263ff0000001916939093176301000000921515929092029190911764ff0000000019166401000000009515159590950294909417905560a080840151600483015560c0938401516005830155840151600682015591830151600783015560e08301516008830155820151600982015561012090910151600a909101558215612ba357612ba36001600160a01b038516333086613687565b336001600160a01b03167ff1679315ff325c257a944e0ca1bfe7b26616039e9511f9610d4ba3eca851027b888888888887604051612be6969594939291906158d0565b60405180910390a2612bf9816002615915565b915050610f19612d8b565b60325460ff1661276757604051633ee5aeb560e01b815260040160405180910390fd5b6032805460ff19169055565b5f5f612c4186868686612d65565b60028101549091506001600160a01b0316612c5f575f9150506114b4565b80546001600160a01b0316612c785760019150506114b4565b6002810154600160a01b900460ff1615612c965760069150506114b4565b60018101546001600160a01b0316612cc6574281600801541115612cbb576002612cbe565b60035b9150506114b4565b612cce6137cd565b6001600160a01b031663b551cd5086612ce78488613806565b612cf1878b613851565b6040518463ffffffff1660e01b8152600401612d0f93929190615688565b602060405180830381865afa158015612d2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d4e91906155b4565b612d59576004611ae1565b50600595945050505050565b5f5f5f612d7487878787613f94565b81526020019081526020015f209050949350505050565b6032805460ff19166001179055565b612da381612ead565b61047e80546001600160a01b0319166001600160a01b0383169081179091556040517fe983c4450684b2324d78afaa992b88be67cf4d3919d7a6539ca774d7bb5189f4905f90a250565b6040516001600160a01b03838116602483015260448201839052610f9591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613fcc565b612e5582610ff8565b612e5e81612753565b6112458383613cea565b612e7181614038565b6104848190556040518181527fc41d1b4ad42d6f594ce26dc949c6aa711df74301f1f2c17b3a36d30c9761abf39060200160405180910390a150565b612ebe81634e759c3d60e11b61407c565b610e7e576040516367cc38ef60e01b815260040160405180910390fd5b6001600160a01b0381163314612f045760405163334bd91960e11b815260040160405180910390fd5b610f958282614097565b61048454811015612f32576040516337d02b5d60e21b815260040160405180910390fd5b610e7e81614038565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612fc157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612fb55f516020615b685f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156127675760405163703e46dd60e11b815260040160405180910390fd5b610e7e5f612753565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613042575060408051601f3d908101601f1916820190925261303f9181019061592c565b60015b61306a57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016112e7565b5f516020615b685f395f51905f52811461309a57604051632a87526960e21b8152600481018290526024016112e7565b610f9583836140ee565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146127675760405163703e46dd60e11b815260040160405180910390fd5b5f5f6130fb86868686612c33565b90505f61310a87878787612d65565b60028101805460ff60a01b1916600160a01b1790559050600382600681111561313557613135615412565b0361318d57600681015460078201556009810154600a820154600483015461315d9190615675565b6131679190615675565b60028201548254919450613188916001600160a01b03918216911685613881565b6132e3565b60058260068111156131a1576131a1615412565b036132ca576131ae6137cd565b6001600160a01b031663719c6d56876131c78489613806565b6131d1888c613851565b6040518463ffffffff1660e01b81526004016131ef93929190615688565b602060405180830381865afa15801561320a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322e919061592c565b6007820181905560068201546004830154911415905f61324d84613733565b6132579083615641565b9050836009015484600a0154828461326f9190615675565b6132799190615675565b6132839190615675565b60028501549096506132c2906001600160a01b0316846132ad5785546001600160a01b03166132bc565b60018601546001600160a01b03165b88613881565b5050506132e3565b604051639c71cb8360e01b815260040160405180910390fd5b6001810154815460078301546040516001600160a01b0393841693928316928b16917f3f384afb4bd9f0aef0298c80399950011420eb33b0e1a750b20966270247b9a091613338918c918c918c918c90615943565b60405180910390a4613348612d8b565b6001600160a01b0387163b1515801561336d57506003810154640100000000900460ff165b156133d55760078101546040516304cc1fd560e01b81526001600160a01b038916916304cc1fd5916133a7918a918a918a916004016156a6565b5f604051808303815f87803b1580156133be575f5ffd5b505af11580156133d0573d5f5f3e3d5ffd5b505050505b6133dd612c27565b5050949350505050565b6133ef613b9c565b604051631d1d5b3960e11b81526001600160a01b0384811660048301529190911690633a3ab67290602401602060405180830381865afa158015613435573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061345991906155b4565b61347657604051631131fa7160e11b815260040160405180910390fd5b6134866040820160208301615989565b6001600160801b031661349c6020830183615989565b6001600160801b031611156134c457604051635b1a743760e01b815260040160405180910390fd5b6001600160a01b0382165f9081526104836020526040902081906134e882826159a4565b50506001600160a01b0382167f143b6bf2ebf8381dc4db7edfc69b944d4a518b2be84f1d6230aecb2b698100e46135226020840184615989565b6135326040850160208601615989565b604080516001600160801b039384168152929091166020830152015b60405180910390a25050565b5f613563612394565b61356c42614143565b61357691906159f5565b90506135828282614179565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200161354e565b5f6135cf82614203565b6135d842614143565b6135e291906159f5565b90506135ee8282613e76565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b61363d81612ead565b61047f80546001600160a01b0319166001600160a01b0383169081179091556040517fab1796ea525d29607f67aabc405756efd2fc7c4eb2531e627f6ec697ac618a8e905f90a250565b6040516001600160a01b0384811660248301528381166044830152606482018390526112459186918216906323b872dd90608401612e1a565b6064546040516302abf57960e61b81526453746f726560d81b60048201525f916001600160a01b03169063aafd5e40906024015b602060405180830381865afa15801561370f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0f9190615a13565b60048101545f90610e6690600290615a42565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015613793573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b7919061592c565b905061124584846137c88585615675565b61424a565b6064546040516302abf57960e61b8152654f7261636c6560d01b60048201525f916001600160a01b03169063aafd5e40906024016136f4565b60038201545f9060ff161561384a5760058301545f90810361382a57606554613830565b60058401545b90508084600801546138429190615641565b915050610e66565b5080610e66565b60606113ab836040518060400160405280600b81526020016a37b7a932b8bab2b9ba32b960a91b815250846142d9565b6138956001600160a01b038416838361431e565b610f95576001600160a01b038084165f908152606660209081526040808320938616835292905290812080548392906138cf908490615675565b92505081905550816001600160a01b0316836001600160a01b03167f1182782c307f5070cb912ad1a2b6b545dd40e5e5873d5b0eac7927f69a323c298360405161391b91815260200190565b60405180910390a3505050565b5f6104825f61393886868661137c565b815260208101919091526040015f20546001600160a01b03169050806113ab575061047e546001600160a01b03169392505050565b5f613976612c04565b61397e612c27565b6001600160a01b0387166139a55760405163062a0f5b60e21b815260040160405180910390fd5b60016139b387878787612c33565b60068111156139c4576139c4615412565b146139e257604051633a4e124d60e11b815260040160405180910390fd5b5f6139ef87878787612d65565b600381015490915060ff1615613a2357600160ff1b8303613a235760405163cad802eb60e01b815260040160405180910390fd5b80546001600160a01b0319166001600160a01b0389161781556006810183905560058101545f03613a5657606554613a5c565b60058101545b613a669042615675565b6008820155600a8101546004820154613a7f9190615675565b91508115613aa1576002810154613aa1906001600160a01b0316333085613687565b600881015460028201546040516001600160a01b038b8116938b8216937f6e51dd00371aabffa82cd401592f76ed51e98a9ea4b58751c70463a2c78b5ca193613af5938d938d938d938d9390911690615a61565b60405180910390a3613b05612d8b565b6001600160a01b0387163b15158015613b285750600381015462010000900460ff165b15613b8b57604051639c2fd1df60e01b81526001600160a01b03881690639c2fd1df90613b5d90899089908990600401615688565b5f604051808303815f87803b158015613b74575f5ffd5b505af1158015613b86573d5f5f3e3d5ffd5b505050505b613b93612c27565b50611ae1612d8b565b6064546040516302abf57960e61b81527210dbdb1b185d195c985b15da1a5d195b1a5cdd606a1b60048201525f916001600160a01b03169063aafd5e40906024016136f4565b805f03613c0257604051634935f70160e11b815260040160405180910390fd5b6001600160a01b0382165f90815261048360209081526040918290208251808401909352546001600160801b03808216808552600160801b9092041691830191909152821015613c655760405163dba3b86160e01b815260040160405180910390fd5b80602001516001600160801b0316821115610f9557604051631f7b5d6160e01b815260040160405180910390fd5b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610e66565b613cc361438b565b613ccb6143b0565b613cd86203f480826143b8565b613ce06143ca565b610f9583836143d2565b5f5f516020615b885f395f51905f5283613d4c575f613d07611aeb565b6001600160a01b031614613d2e57604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b6114b48484614404565b81613d7457604051631fe1e13d60e11b815260040160405180910390fd5b61112a82826144a5565b5f516020615b885f395f51905f525f80613d96612604565b91509150613dab8165ffffffffffff16151590565b1580613dbf57504265ffffffffffff821610155b15613de7576040516319ca5ebb60e01b815265ffffffffffff821660048201526024016112e7565b613df85f613df3611aeb565b614097565b50613e035f83613cea565b505081546001600160d01b03191690915550565b613e2082610ff8565b613e2981612753565b6112458383614097565b6127675f5f614179565b613e478282611b14565b61112a5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016112e7565b5f516020615be85f395f51905f52545f516020615b885f395f51905f5290600160d01b900465ffffffffffff168015613f10574265ffffffffffff82161015613ee757600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b02178255613f10565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b6064546040516302abf57960e61b8152721259195b9d1a599a595c95da1a5d195b1a5cdd606a1b60048201525f916001600160a01b03169063aafd5e40906024016136f4565b5f84848484604051602001613fac9493929190615aa6565b604051602081830303815290604052805190602001209050949350505050565b5f5f60205f8451602086015f885af180613feb576040513d5f823e3d81fd5b50505f513d9150811561400257806001141561400f565b6001600160a01b0384163b155b1561124557604051635274afe760e01b81526001600160a01b03851660048201526024016112e7565b63bb744800811061405c5760405163cb40339f60e01b815260040160405180910390fd5b5f8111610e7e5760405163fa050ec160e01b815260040160405180910390fd5b5f61408683614505565b80156113ab57506113ab8383614537565b5f5f516020615b885f395f51905f52831580156140cc57506140b7611aeb565b6001600160a01b0316836001600160a01b0316145b156140e4576001810180546001600160a01b03191690555b6114b484846145bd565b6140f782614636565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561413b57610f958282614699565b61112a614702565b5f65ffffffffffff821115614175576040516306dfcc6560e41b815260306004820152602481018390526044016112e7565b5090565b5f516020615b885f395f51905f525f614190612604565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b0388161717845591506141d090508165ffffffffffff16151590565b15611245576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a150505050565b5f5f61420d612394565b90508065ffffffffffff168365ffffffffffff1611614235576142308382615ad0565b6113ab565b6113ab65ffffffffffff841662069780614721565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261429b8482614730565b611245576040516001600160a01b0384811660248301525f60448301526142cf91869182169063095ea7b390606401612e1a565b6112458482613fcc565b60605f6142e68585614775565b905084816142f3856147b7565b60405160200161430593929190615aee565b6040516020818303038152906040529150509392505050565b5f6114b484856001600160a01b031663a9059cbb86866040516024016143599291906001600160a01b03929092168252602082015260400190565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614730565b61439361481f565b61276757604051631afcd79f60e31b815260040160405180910390fd5b61276761438b565b6143c061438b565b61112a8282614838565b612d8b61438b565b6143da61438b565b606480546001600160a01b0319166001600160a01b0383161790556143fe82612f0e565b50606555565b5f5f516020615bc85f395f51905f5261441d8484611b14565b61449c575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556144523390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e66565b5f915050610e66565b5f516020615bc85f395f51905f525f6144bd84610ff8565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f614517826301ffc9a760e01b614537565b8015610e665750614530826001600160e01b0319614537565b1592915050565b6040516001600160e01b0319821660248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b17815282519293505f9283928392909183918a617530fa92503d91505f5190508280156145a7575060208210155b80156145b257505f81115b979650505050505050565b5f5f516020615bc85f395f51905f526145d68484611b14565b1561449c575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e66565b806001600160a01b03163b5f0361466b57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016112e7565b5f516020615b685f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516146b59190615b0b565b5f60405180830381855af49150503d805f81146146ed576040519150601f19603f3d011682016040523d82523d5f602084013e6146f2565b606091505b5091509150610f1985838361489e565b34156127675760405163b398979f60e01b815260040160405180910390fd5b5f8282188284100282186113ab565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015611ae1575081156147615780600114611ae1565b50505050506001600160a01b03163b151590565b8151606090156147a657816040516020016147909190615b16565b6040516020818303038152906040529050610e66565b816040516020016147909190615b3c565b60606147cf6001600160801b03602084901c166148f5565b6147e58360601b6001600160601b0319166148f5565b6040516020016148099291909182526001600160c01b031916602082015260280190565b6040516020818303038152906040529050919050565b5f614828613c93565b54600160401b900460ff16919050565b61484061438b565b5f516020615b885f395f51905f526001600160a01b03821661487757604051636116401160e11b81525f60048201526024016112e7565b80546001600160d01b0316600160d01b65ffffffffffff8516021781556112455f83613cea565b6060826148ae5761423082614a86565b81511580156148c557506001600160a01b0384163b155b156148ee57604051639996b31560e01b81526001600160a01b03851660048201526024016112e7565b50806113ab565b5f5f825f1c9050806001600160801b0316905080600160401b02811777ffffffffffffffff0000000000000000ffffffffffffffff169050806401000000000281177bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16905080620100000281177dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff169050806101000281177eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff1690508060100281177f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f1690505f6008827f08080808080808080808080808080808080808080808080808080808080808081681614a0857614a08615a2e565b0460047f040404040404040404040404040404040404040404040404040404040404040484160460027f020202020202020202020202020202020202020202020202020202020202020285160417166027029091017f3030303030303030303030303030303030303030303030303030303030303030019392505050565b805115614a9557805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215614abe575f5ffd5b81356001600160e01b0319811681146113ab575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614b1157614b11614ad5565b604052919050565b5f6001600160401b03821115614b3157614b31614ad5565b50601f01601f191660200190565b5f82601f830112614b4e575f5ffd5b8135614b61614b5c82614b19565b614ae9565b818152846020838601011115614b75575f5ffd5b816020850160208301375f918101602001919091529392505050565b6001600160a01b0381168114610e7e575f5ffd5b5f5f5f5f5f60a08688031215614bb9575f5ffd5b853594506020860135935060408601356001600160401b03811115614bdc575f5ffd5b614be888828901614b3f565b9350506060860135614bf981614b91565b949793965091946080013592915050565b5f5f5f60608486031215614c1c575f5ffd5b833592506020840135915060408401356001600160401b03811115614c3f575f5ffd5b614c4b86828701614b3f565b9150509250925092565b8035614c6081614b91565b919050565b5f60208284031215614c75575f5ffd5b81356113ab81614b91565b5f60208284031215614c90575f5ffd5b5035919050565b5f5f60408385031215614ca8575f5ffd5b8235614cb381614b91565b91506020830135614cc381614b91565b809150509250929050565b5f5f60408385031215614cdf575f5ffd5b823591506020830135614cc381614b91565b5f5f5f5f60808587031215614d04575f5ffd5b8435614d0f81614b91565b93506020850135925060408501356001600160401b03811115614d30575f5ffd5b614d3c87828801614b3f565b9250506060850135614d4d81614b91565b939692955090935050565b5f5f5f5f60808587031215614d6b575f5ffd5b843593506020850135925060408501356001600160401b03811115614d8e575f5ffd5b614d9a87828801614b3f565b949793965093946060013593505050565b5f5f5f60608486031215614dbd575f5ffd5b8335614dc881614b91565b92506020840135915060408401356001600160401b03811115614c3f575f5ffd5b5f5f60408385031215614dfa575f5ffd5b8235614e0581614b91565b915060208301356001600160401b03811115614e1f575f5ffd5b614e2b85828601614b3f565b9150509250929050565b5f5f8284036060811215614e47575f5ffd5b8335614e5281614b91565b92506040601f1982011215614e65575f5ffd5b506020830190509250929050565b5f5f5f5f60808587031215614e86575f5ffd5b8435614e9181614b91565b9350602085013592506040850135915060608501356001600160401b03811115614eb9575f5ffd5b614ec587828801614b3f565b91505092959194509250565b5f60208284031215614ee1575f5ffd5b813565ffffffffffff811681146113ab575f5ffd5b5f5f5f5f60808587031215614f09575f5ffd5b8435614f1481614b91565b93506020850135925060408501356001600160401b03811115614d8e575f5ffd5b5f5f5f5f5f60a08688031215614f49575f5ffd5b8535614f5481614b91565b94506020860135614f6481614b91565b9350604086013592506060860135915060808601356001600160401b03811115614f8c575f5ffd5b614f9888828901614b3f565b9150509295509295909350565b5f5f5f5f5f5f60c08789031215614fba575f5ffd5b8635614fc581614b91565b95506020870135614fd581614b91565b9450604087013593506060870135925060808701356001600160401b03811115614ffd575f5ffd5b61500989828a01614b3f565b9699959850939692959460a09093013593505050565b5f5f5f5f5f60a08688031215615033575f5ffd5b853561503e81614b91565b94506020860135935060408601356001600160401b03811115614bdc575f5ffd5b80511515825260208101511515602083015260408101511515604083015260608101511515606083015260808101511515608083015260a081015160a083015260c081015160c08301525050565b6001600160a01b038b811682528a8116602083015289166040820152871515606082015261020081016150e3608083018961505f565b6101608201969096526101808101949094526101a08401929092526101c08301526101e09091015295945050505050565b604080825283519082018190525f9060208501906060840190835b818110156151565783516001600160a01b031683526020938401939092019160010161512f565b5050809250505082151560208301529392505050565b81516001600160a01b031681526102008101602083015161519860208401826001600160a01b03169052565b5060408301516151b360408401826001600160a01b03169052565b5060608301516151c7606084018215159052565b5060808301516151da608084018261505f565b5060a083015161016083015260c083015161018083015260e08301516101a08301526101008301516101c0830152610120909201516101e09091015290565b5f5f6020838503121561522a575f5ffd5b82356001600160401b0381111561523f575f5ffd5b8301601f8101851361524f575f5ffd5b80356001600160401b03811115615264575f5ffd5b8560208260051b8401011115615278575f5ffd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561530d57603f198786030184526152f8858351615288565b945060209384019391909101906001016152dc565b50929695505050505050565b602081525f6113ab6020830184615288565b5f5f6040838503121561533c575f5ffd5b82356001600160401b03811115615351575f5ffd5b61535d85828601614b3f565b9250506020830135614cc381614b91565b5f5f5f60608486031215615380575f5ffd5b83359250602084013561539281614b91565b915060408401356153a281614b91565b809150509250925092565b5f5f5f5f5f60a086880312156153c1575f5ffd5b85356153cc81614b91565b9450602086013593506040860135925060608601356001600160401b038111156153f4575f5ffd5b61540088828901614b3f565b95989497509295608001359392505050565b634e487b7160e01b5f52602160045260245ffd5b602081016007831061544657634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f5f5f5f5f5f5f5f6101008a8c031215615465575f5ffd5b8935985060208a013561547781614b91565b975060408a013561548781614b91565b965060608a013561549781614b91565b955060808a01356001600160401b038111156154b1575f5ffd5b8a01601f81018c136154c1575f5ffd5b80356001600160401b038111156154d6575f5ffd5b8c60206060830284010111156154ea575f5ffd5b6020919091019550935060a08a0135925061550760c08b01614c55565b915061551560e08b01614c55565b90509295985092959850929598565b8015158114610e7e575f5ffd5b5f5f5f5f5f5f60c08789031215615546575f5ffd5b863595506020870135945060408701356001600160401b03811115615569575f5ffd5b61557589828a01614b3f565b945050606087013561558681615524565b9250608087013561559681615524565b915060a08701356155a681615524565b809150509295509295509295565b5f602082840312156155c4575f5ffd5b81516113ab81615524565b6001600160a01b03831681526040602082018190525f906114b490830184615288565b5f81518060208401855e5f93019283525090919050565b6001600160601b03198460601b1681528260148201525f610f1960348301846155f2565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610e6657610e6661562d565b604081525f6156666040830185615288565b90508260208301529392505050565b80820180821115610e6657610e6661562d565b838152826020820152606060408201525f610f196060830184615288565b848152836020820152608060408201525f6156c46080830185615288565b905082606083015295945050505050565b6001600160a01b03841681526060602082018190525f906156f890830185615288565b9050826040830152949350505050565b5f60208284031215615718575f5ffd5b81516001600160401b0381111561572d575f5ffd5b8201601f8101841361573d575f5ffd5b80516001600160401b0381111561575657615756614ad5565b8060051b61576660208201614ae9565b91825260208184018101929081019087841115615781575f5ffd5b6020850194505b838510156145b2578451925061579d83614b91565b82825260209485019490910190615788565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e198436030181126157d8575f5ffd5b8301803591506001600160401b038211156157f1575f5ffd5b602001915036819003821315615805575f5ffd5b9250929050565b818382375f9101908152919050565b5f6020828403121561582b575f5ffd5b81516001600160401b03811115615840575f5ffd5b8201601f81018413615850575f5ffd5b805161585e614b5c82614b19565b818152856020838501011115615872575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031280156158a0575f5ffd5b50604051602081016001600160401b03811182821017156158c3576158c3614ad5565b6040529151825250919050565b86815285602082015260c060408201525f6158ee60c0830187615288565b6001600160a01b0395909516606083015250608081019290925260a0909101529392505050565b8082028115828204841417610e6657610e6661562d565b5f6020828403121561593c575f5ffd5b5051919050565b85815284602082015260a060408201525f61596160a0830186615288565b606083019490945250608001529392505050565b6001600160801b0381168114610e7e575f5ffd5b5f60208284031215615999575f5ffd5b81356113ab81615975565b81356159af81615975565b6001600160801b0381169050806001600160801b031983541617825560208301356159d981615975565b60801b6fffffffffffffffffffffffffffffffff191617905550565b65ffffffffffff8181168382160190811115610e6657610e6661562d565b5f60208284031215615a23575f5ffd5b81516113ab81614b91565b634e487b7160e01b5f52601260045260245ffd5b5f82615a5c57634e487b7160e01b5f52601260045260245ffd5b500490565b86815285602082015260c060408201525f615a7f60c0830187615288565b60608301959095525060808101929092526001600160a01b031660a0909101529392505050565b6001600160601b03198560601b1681528360148201528260348201525f610f1660548301846155f2565b65ffffffffffff8281168282160390811115610e6657610e6661562d565b5f610f19615b05615aff84886155f2565b866155f2565b846155f2565b5f6113ab82846155f2565b600b60fa1b81525f615b2b60018301846155f2565b601d60f91b81526001019392505050565b5f615b2b82846155f256feb92d52e77ebaa0cae5c23e882d85609efbcb44029214147dd132daf9ef1018af360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbceef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840027b8807ed0d425f20d0c4bc217dc8c5223cdf4dda073a600a26677d83eb2fb5302dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a2646970667358221220506f350f742b96a6ec4d8fb8aa805f23239e23bcf0757bb97adfdfe9b229ae4864736f6c634300081e0033