0 txs
21 calls
constructor
No constructor.
functions
dcaMap
viewfunction dcaMap(address dca) view returns (bool)
delay
viewfunction delay() view returns (uint64)
etNextDelay
viewfunction etNextDelay() view returns (uint64)
etNextFundOperator
viewfunction etNextFundOperator() view returns (uint64)
etNextFundRecipient
viewfunction etNextFundRecipient() view returns (uint64)
etNextMaxPrice
viewfunction etNextMaxPrice() view returns (uint64)
etNextMinPrice
viewfunction etNextMinPrice() view returns (uint64)
etNextPriceOperator
viewfunction etNextPriceOperator() view returns (uint64)
etNextRevoker
viewfunction etNextRevoker() view returns (uint64)
etNextUpgradeToAndCall
viewfunction etNextUpgradeToAndCall() view returns (uint64)
fundOperator
viewfunction fundOperator() view returns (address)
fundRecipient
viewfunction fundRecipient() view returns (address)
getFixedPrice
viewfunction getFixedPrice() view returns (uint256 price, uint64 expirationTime)
maxPrice
viewfunction maxPrice() view returns (uint256)
minPrice
viewfunction minPrice() view returns (uint256)
nextDelay
viewfunction nextDelay() view returns (uint64)
nextFundOperator
viewfunction nextFundOperator() view returns (address)
nextFundRecipient
viewfunction nextFundRecipient() view returns (address)
nextImplementation
viewfunction nextImplementation() view returns (address)
nextMaxPrice
viewfunction nextMaxPrice() view returns (uint256)
nextMinPrice
viewfunction nextMinPrice() view returns (uint256)
nextPriceOperator
viewfunction nextPriceOperator() view returns (address)
nextRevoker
viewfunction nextRevoker() view returns (address)
nextUpgradeToAndCallDataHash
viewfunction nextUpgradeToAndCallDataHash() view returns (bytes32)
owner
viewfunction owner() view returns (address)
priceOperator
viewfunction priceOperator() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
revoker
viewfunction revoker() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdWhitelist
viewfunction usdWhitelist(address token) view returns (bool)
xaum
viewfunction xaum() view returns (address)
xaumBalances
viewfunction xaumBalances(address dca, address user) view returns (uint256 amt)
collectXAUm
nonpayablefunction collectXAUm(address user, uint256 amount)
initialize
nonpayablefunction initialize(address _xaum, address _owner, address _revoker, address _priceOperator, address _fundOperator, address _fundRecipient, uint64 _delay, uint256 _minPrice, uint256 _maxPrice)
renounceOwnership
nonpayablefunction renounceOwnership()
requestUpgradeToAndCall
nonpayablefunction requestUpgradeToAndCall(address _newImplementation, bytes _data)
revokeNextDelay
nonpayablefunction revokeNextDelay()
revokeNextFundOperator
nonpayablefunction revokeNextFundOperator()
revokeNextFundRecipient
nonpayablefunction revokeNextFundRecipient()
revokeNextMaxPrice
nonpayablefunction revokeNextMaxPrice()
revokeNextMinPrice
nonpayablefunction revokeNextMinPrice()
revokeNextPriceOperator
nonpayablefunction revokeNextPriceOperator()
revokeNextRevoker
nonpayablefunction revokeNextRevoker()
revokeNextUpgrade
nonpayablefunction revokeNextUpgrade()
setDCA
nonpayablefunction setDCA(address dca, bool flag)
setDelay
nonpayablefunction setDelay(uint64 _delay)
setFixedPrice
nonpayablefunction setFixedPrice(uint256 price, uint64 validPeriod)
setFundOperator
nonpayablefunction setFundOperator(address newFundOperator)
setFundRecipient
nonpayablefunction setFundRecipient(address newFundRecipient)
setMaxPrice
nonpayablefunction setMaxPrice(uint256 newMaxPrice)
setMinPrice
nonpayablefunction setMinPrice(uint256 newMinPrice)
setPriceOperator
nonpayablefunction setPriceOperator(address newPriceOperator)
setRevoker
nonpayablefunction setRevoker(address newRevoker)
setUSD
nonpayablefunction setUSD(address token, bool flag)
swapForXAUm
nonpayablefunction swapForXAUm(address user, address tokenIn, uint256 amountIn) returns (uint256 amountOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address _newImplementation, bytes _data) payable
withdrawERC20
nonpayablefunction withdrawERC20(address token, address recipient, uint256 amount)
withdrawERC721
nonpayablefunction withdrawERC721(address token, address recipient, uint256 tokenId)
withdrawForRebalance
nonpayablefunction withdrawForRebalance(address token, uint256 amount)
events
CollectXAUm
event CollectXAUm(address indexed dca, address indexed user, uint256 amount)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SetDCA
event SetDCA(address indexed dca, bool flag)
SetDelayEffected
event SetDelayEffected(uint64 newDelay)
SetDelayRequest
event SetDelayRequest(uint64 oldDelay, uint64 newDelay, uint64 et)
SetFixedPrice
event SetFixedPrice(uint256 price, uint64 expirationTime)
SetFundOperatorEffected
event SetFundOperatorEffected(address newAddr)
SetFundOperatorRequest
event SetFundOperatorRequest(address oldAddr, address newAddr, uint64 et)
SetFundRecipientEffected
event SetFundRecipientEffected(address newAddr)
SetFundRecipientRequest
event SetFundRecipientRequest(address oldAddr, address newAddr, uint64 et)
SetMaxPriceEffected
event SetMaxPriceEffected(uint256 newVal)
SetMaxPriceRequest
event SetMaxPriceRequest(uint256 oldVal, uint256 newVal, uint64 et)
SetMinPriceEffected
event SetMinPriceEffected(uint256 newVal)
SetMinPriceRequest
event SetMinPriceRequest(uint256 oldVal, uint256 newVal, uint64 et)
SetPriceOperatorEffected
event SetPriceOperatorEffected(address newAddr)
SetPriceOperatorRequest
event SetPriceOperatorRequest(address oldAddr, address newAddr, uint64 et)
SetRecipient
event SetRecipient(address indexed user, address indexed recipient)
SetRevokerEffected
event SetRevokerEffected(address newAddr)
SetRevokerRequest
event SetRevokerRequest(address oldAddr, address newAddr, uint64 et)
SetUSD
event SetUSD(address indexed token, bool flag)
SwapForXAUm
event SwapForXAUm(address indexed dca, address indexed user, address indexed tokenIn, uint256 amountIn, uint256 amountOut)
Upgraded
event Upgraded(address indexed implementation)
UpgradeToAndCallRequest
event UpgradeToAndCallRequest(address newImplementation, bytes data)
WithdrawSystemFund
event WithdrawSystemFund(address indexed token, uint256 amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
DelayTooSmall
error DelayTooSmall()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
FixedPriceExpired
error FixedPriceExpired()
InvalidInitialization
error InvalidInitialization()
InvalidPriceLimit
error InvalidPriceLimit(uint256 minPrice, uint256 maxPrice)
InvalidUpgradeToAndCallData
error InvalidUpgradeToAndCallData()
InvalidUpgradeToAndCallImpl
error InvalidUpgradeToAndCallImpl()
NoSystemFundRecipient
error NoSystemFundRecipient()
NotDCA
error NotDCA(address)
NotEnoughSystemXAUm
error NotEnoughSystemXAUm(uint256 have, uint256 need)
NotEnoughUserXAUm
error NotEnoughUserXAUm(address user, uint256 have, uint256 need)
NotFundOperator
error NotFundOperator(address)
NotInitializing
error NotInitializing()
NotPriceOperator
error NotPriceOperator(address)
NotRevoker
error NotRevoker(address)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PriceOutOfRange
error PriceOutOfRange(uint256 price)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SignatureExpired
error SignatureExpired(uint256)
TokenInNotInWhitelist
error TokenInNotInWhitelist(address tokenIn)
TooEarlyToUpgradeToAndCall
error TooEarlyToUpgradeToAndCall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroTokenRecipient
error ZeroTokenRecipient()
creation bytecode
0x60a06040523060805234801561001457600080fd5b506080516130ef61003e6000396000818161236801528181612391015261243a01526130ef6000f3fe6080604052600436106103975760003560e01c806382666c61116101dc578063c884df4111610102578063e306ae57116100a0578063eeb65b5c1161006f578063eeb65b5c14610b10578063f2fde38b14610b30578063f43952e314610b50578063f542d44414610b7057600080fd5b8063e306ae5714610a8c578063e35eddb814610ac4578063e38d6b5c14610ae4578063e45be8eb14610afa57600080fd5b8063d939c960116100dc578063d939c96014610a10578063dcf8fd2b14610a30578063de209fc114610a57578063e22dc18614610a6c57600080fd5b8063c884df41146109a9578063cc62c0bb146109c9578063d3c3bbd0146109e957600080fd5b8063a2132b6e1161017a578063be8551bb11610149578063be8551bb14610929578063bfb6202814610949578063c107330214610969578063c6b3ddb61461098957600080fd5b8063a2132b6e14610881578063ad3cb1cc14610897578063ae8bd784146108ed578063b280e6a61461091457600080fd5b80639083dd9d116101b65780639083dd9d1461080c578063950e61c61461082c5780639aacd60e1461084c578063a0941d0c1461086c57600080fd5b806382666c61146107785780638585e9941461079f5780638da5cb5b146107cf57600080fd5b80634f1ef286116102c15780636f4c58c61161025f57806373e269ae1161022e57806373e269ae146106fc5780637478015c146107115780637da380d81461073857806382641e7f1461075857600080fd5b80636f4c58c61461068b578063715018a6146106b25780637180276e146106c757806373ab208c146106dc57600080fd5b806368af313c1161029b57806368af313c146106115780636a42b8f8146106415780636ab8fc18146106615780636c9f4dc51461067657600080fd5b80634f1ef286146105c957806352d1902d146105dc5780635ea8cd12146105f157600080fd5b80632ad613a811610339578063361a284511610308578063361a2845146105315780634025feb21461056957806344004cc1146105895780634a506553146105a957600080fd5b80632ad613a81461048a5780632bfae270146104ca5780632c30d989146104f157806335dec5d11461051157600080fd5b806311532e771161037557806311532e771461041b5780631b0961be1461043f578063213c6182146104545780632488a8a01461046a57600080fd5b806303f646621461039c57806309ff18f0146103be5780630f4e81ac146103fb575b600080fd5b3480156103a857600080fd5b506103bc6103b7366004612b37565b610b90565b005b3480156103ca57600080fd5b506000546103de906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b506103bc610416366004612b60565b610cfb565b34801561042757600080fd5b5061043160015481565b6040519081526020016103f2565b34801561044b57600080fd5b506103bc610d63565b34801561046057600080fd5b5061043160105481565b34801561047657600080fd5b506006546103de906001600160a01b031681565b34801561049657600080fd5b506104ba6104a5366004612b37565b60146020526000908152604090205460ff1681565b60405190151581526020016103f2565b3480156104d657600080fd5b506002546103de90600160401b90046001600160a01b031681565b3480156104fd57600080fd5b506103bc61050c366004612b60565b610da8565b34801561051d57600080fd5b506004546103de906001600160a01b031681565b34801561053d57600080fd5b50600e54610551906001600160401b031681565b6040516001600160401b0390911681526020016103f2565b34801561057557600080fd5b506103bc610584366004612b97565b610e08565b34801561059557600080fd5b506103bc6105a4366004612b97565b610ebd565b3480156105b557600080fd5b506103bc6105c4366004612be9565b610f05565b6103bc6105d7366004612be9565b610f9b565b3480156105e857600080fd5b5061043161108d565b3480156105fd57600080fd5b506103bc61060c366004612caa565b6110bc565b34801561061d57600080fd5b50601254601354604080519283526001600160401b039091166020830152016103f2565b34801561064d57600080fd5b50600354610551906001600160401b031681565b34801561066d57600080fd5b506103bc6111c2565b34801561068257600080fd5b506103bc6111e0565b34801561069757600080fd5b50600b5461055190600160a01b90046001600160401b031681565b3480156106be57600080fd5b506103bc611220565b3480156106d357600080fd5b506103bc611234565b3480156106e857600080fd5b506104316106f7366004612b97565b611277565b34801561070857600080fd5b506103bc61148f565b34801561071d57600080fd5b5060035461055190600160401b90046001600160401b031681565b34801561074457600080fd5b50601154610551906001600160401b031681565b34801561076457600080fd5b506005546103de906001600160a01b031681565b34801561078457600080fd5b5060095461055190600160a01b90046001600160401b031681565b3480156107ab57600080fd5b506104ba6107ba366004612b37565b60156020526000908152604090205460ff1681565b3480156107db57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103de565b34801561081857600080fd5b506103bc610827366004612b37565b6114d2565b34801561083857600080fd5b50600254610551906001600160401b031681565b34801561085857600080fd5b506007546103de906001600160a01b031681565b34801561087857600080fd5b506103bc611631565b34801561088d57600080fd5b50610431600d5481565b3480156108a357600080fd5b506108e06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103f29190612d13565b3480156108f957600080fd5b5060035461055190600160801b90046001600160401b031681565b34801561092057600080fd5b506103bc611671565b34801561093557600080fd5b506103bc610944366004612b37565b6116c8565b34801561095557600080fd5b506103bc610964366004612b37565b611827565b34801561097557600080fd5b506103bc610984366004612d3d565b611986565b34801561099557600080fd5b50600b546103de906001600160a01b031681565b3480156109b557600080fd5b506103bc6109c4366004612d58565b611b4a565b3480156109d557600080fd5b506008546103de906001600160a01b031681565b3480156109f557600080fd5b5060055461055190600160a01b90046001600160401b031681565b348015610a1c57600080fd5b50600a546103de906001600160a01b031681565b348015610a3c57600080fd5b5060075461055190600160a01b90046001600160401b031681565b348015610a6357600080fd5b506103bc611c27565b348015610a7857600080fd5b506103bc610a87366004612d82565b611c6a565b348015610a9857600080fd5b50610431610aa7366004612e1c565b601660209081526000928352604080842090915290825290205481565b348015610ad057600080fd5b506103bc610adf366004612d58565b611dab565b348015610af057600080fd5b50610431600f5481565b348015610b0657600080fd5b50610431600c5481565b348015610b1c57600080fd5b506009546103de906001600160a01b031681565b348015610b3c57600080fd5b506103bc610b4b366004612b37565b611fd5565b348015610b5c57600080fd5b506103bc610b6b366004612caa565b61202c565b348015610b7c57600080fd5b506103bc610b8b366004612e4f565b612132565b610b98612235565b610ba1816122a9565b6007546001600160401b03600160a01b820416906001600160a01b038381169116148015610bd757506001600160401b03811615155b8015610beb575042816001600160401b0316105b15610c4657600680546001600160a01b0319166001600160a01b0384169081179091556040519081527f9fc7173e31e91d594bc58ae61036a8e59c0139c53011fb072a295b1e0f8cc7f2906020015b60405180910390a15050565b600780546001600160a01b0319166001600160a01b038416179055600354610c77906001600160401b031642612e88565b6007805467ffffffffffffffff60a01b1916600160a01b6001600160401b0393841681029190911791829055600654604080516001600160a01b039283168152918716602083015291909204909216918101919091527fee10cccd014adebf0f4e4cc3cffe7a932dd778d53556ebea064640d38f51f2ce90606001610c3a565b5050565b610d03612235565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fde11557eafb42b3ba7ad81e7c478d3a1ee5dc2bf8c841b51e652fd5e8b56cc7791015b60405180910390a25050565b6004546001600160a01b03163314610d9557604051635a4c7a3b60e01b81523360048201526024015b60405180910390fd5b6011805467ffffffffffffffff19169055565b610db0612235565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f3e9b1c4c3880b8b0f9c3b53e86efe36864931879283057996d50cdeb91378f199101610d57565b610e10612235565b6001600160a01b038216610e37576040516369b9a98f60e01b815260040160405180910390fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038381166024830152604482018390528416906323b872dd90606401600060405180830381600087803b158015610ea057600080fd5b505af1158015610eb4573d6000803e3d6000fd5b50505050505050565b610ec5612235565b6001600160a01b038216610eec576040516369b9a98f60e01b815260040160405180910390fd5b610f006001600160a01b03841683836122e9565b505050565b610f0d612235565b600080546001600160a01b0319166001600160a01b038416179055805160208201206001556003546001600160401b0316610f489042612e88565b6002805467ffffffffffffffff19166001600160401b03929092169190911790556040517fcc54b42f78b332711d2d2b40bd7edb325a1fef0124753b0689728b7209ca1e2e90610c3a9084908490612eaf565b610fa361235d565b6000546001600160a01b03838116911614610fea576040517f9ab1811500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154815160208301201461102b576040517fefac8be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160401b031680158061104c575042816001600160401b0316115b15611083576040517f260343ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f008383612414565b600061109761242f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6110c4612235565b6110d081600f54612478565b600e54600d546001600160401b0390911690821480156110f857506001600160401b03811615155b801561110c575042816001600160401b0316105b1561114657600c8290556040518281527fe2987378ad7d74329c8f2a84a611519db35a6b20438c7137ca4634f325ed370790602001610c3a565b600d8290556003546001600160401b03166111619042612e88565b600e805467ffffffffffffffff19166001600160401b03929092169182179055600c5460408051918252602082018590528101919091527f028a4589081839a7045fbcd79b34eb2e445b4a93537dc166265172a1ff131b8390606001610c3a565b6111ca612235565b6005805467ffffffffffffffff60a01b19169055565b6004546001600160a01b0316331461120d57604051635a4c7a3b60e01b8152336004820152602401610d8c565b600e805467ffffffffffffffff19169055565b611228612235565b61123260006124bc565b565b6004546001600160a01b0316331461126157604051635a4c7a3b60e01b8152336004820152602401610d8c565b6009805467ffffffffffffffff60a01b19169055565b3360009081526014602052604081205460ff166112a957604051633a29ae2760e11b8152336004820152602401610d8c565b60135433906001600160401b03164211156112f0576040517fa6cb3e2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526015602052604090205460ff1661134d576040517fc44a19830000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610d8c565b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b19190612ed9565b905060006113c0826024612efc565b6012549091506113d182600a612ff9565b6113db9087613008565b6113e5919061301f565b93506113fc6001600160a01b03871684308861252d565b6001600160a01b038084166000908152601660209081526040808320938b1683529290529081208054869290611433908490613041565b909155505060408051868152602081018690526001600160a01b03808916928a821692918716917fc3e165fa1b3472fd478e2f1a19b858d41bf132bb22f7253a26c648254f5d8661910160405180910390a45050509392505050565b6004546001600160a01b031633146114bc57604051635a4c7a3b60e01b8152336004820152602401610d8c565b6007805467ffffffffffffffff60a01b19169055565b6114da612235565b6114e3816122a9565b6005546001600160401b03600160a01b820416906001600160a01b03838116911614801561151957506001600160401b03811615155b801561152d575042816001600160401b0316105b1561158057600480546001600160a01b0319166001600160a01b0384169081179091556040519081527fc1f235bba1c838187a7f50f73c2940cd988836882c74b7dfc478d28a37d79d5890602001610c3a565b600580546001600160a01b0319166001600160a01b0384161790556003546115b1906001600160401b031642612e88565b6005805467ffffffffffffffff60a01b1916600160a01b6001600160401b0393841681029190911791829055600454604080516001600160a01b039283168152918716602083015291909204909216918101919091527f8a674bc274bfa5b54e4ea4c4831280b18b2ccbb2aadfc7075f9cec0eecd0fb6490606001610c3a565b6004546001600160a01b0316331461165e57604051635a4c7a3b60e01b8152336004820152602401610d8c565b6002805467ffffffffffffffff19169055565b6004546001600160a01b0316331461169e57604051635a4c7a3b60e01b8152336004820152602401610d8c565b600380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff169055565b6116d0612235565b6116d9816122a9565b6009546001600160401b03600160a01b820416906001600160a01b03838116911614801561170f57506001600160401b03811615155b8015611723575042816001600160401b0316105b1561177657600880546001600160a01b0319166001600160a01b0384169081179091556040519081527f4bdcd6e0599e9bfdada395f01007a41cafe2957804a5f213854f9461f48dd43690602001610c3a565b600980546001600160a01b0319166001600160a01b0384161790556003546117a7906001600160401b031642612e88565b6009805467ffffffffffffffff60a01b1916600160a01b6001600160401b0393841681029190911791829055600854604080516001600160a01b039283168152918716602083015291909204909216918101919091527f60c502ab55043984654d07e19506a8ee0910c9e8d4db8c78dd6f13a3cdbf397290606001610c3a565b61182f612235565b611838816122a9565b600b546001600160401b03600160a01b820416906001600160a01b03838116911614801561186e57506001600160401b03811615155b8015611882575042816001600160401b0316105b156118d557600a80546001600160a01b0319166001600160a01b0384169081179091556040519081527f068df68792f7063280c90042dcd83020c7fe93c379f1be4b043fcc85339eec4a90602001610c3a565b600b80546001600160a01b0319166001600160a01b038416179055600354611906906001600160401b031642612e88565b600b805467ffffffffffffffff60a01b1916600160a01b6001600160401b0393841681029190911791829055600a54604080516001600160a01b039283168152918716602083015291909204909216918101919091527f332624dab4454ab2d9d0435dd0fc0b969d7f1abe15145e82c1081ee3aaae746690606001610c3a565b61198e612235565b610e106001600160401b03821610156119d3576040517fed75f3c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600160801b81046001600160401b0390811691600160401b90048116908316148015611a0a57506001600160401b03811615155b8015611a1e575042816001600160401b0316105b15611a72576003805467ffffffffffffffff19166001600160401b0384169081179091556040519081527f0ed594aee59a2d00c8a1183779743ed2c0f8e413f761a48b181a72cb86e1a05a90602001610c3a565b600380546001600160401b03808516600160401b027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff83168117909355611abe92811691161742612e88565b600380547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8116600160801b6001600160401b03948516810291821793849055604080519386169286169290921783528685166020840152909204909216908201527f8189ce093e30309b5e2dffeabdf7adf977853585d6b56995e8c8098342f6546f90606001610c3a565b6008546001600160a01b03163314611b90576040517f01e992f4000000000000000000000000000000000000000000000000000000008152336004820152602401610d8c565b600a546001600160a01b0316611bd2576040517fce1744c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a54611bec906001600160a01b038481169116836122e9565b816001600160a01b03167f823ad11973590a76849e63c48ff16270505b87a544544c360175d3e781949def82604051610d5791815260200190565b6004546001600160a01b03163314611c5457604051635a4c7a3b60e01b8152336004820152602401610d8c565b600b805467ffffffffffffffff60a01b19169055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611caf5750825b90506000826001600160401b03166001148015611ccb5750303b155b905081158015611cd9575080155b15611d10576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d3f57845468ff00000000000000001916600160401b1785555b611d508e8e8e8e8e8e8e8e8e61256c565b8315611d9b57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b3360009081526014602052604090205460ff16611ddd57604051633a29ae2760e11b8152336004820152602401610d8c565b3360008181526016602090815260408083206001600160a01b038716845290915290205482811015611e54576040517f3fdbf4600000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101849052606401610d8c565b6002546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091600160401b90046001600160a01b0316906370a0823190602401602060405180830381865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee19190613054565b905083811015611f27576040517fb396e2460000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610d8c565b6001600160a01b03808416600090815260166020908152604080832093891683529290529081208054869290611f5e90849061306d565b9091555050600254611f8190600160401b90046001600160a01b031684866122e9565b846001600160a01b0316836001600160a01b03167f7992133c1bd6a5f75e2d06960e74cd6b1fa7fb9d32bb3db5f970955fd7d3572f86604051611fc691815260200190565b60405180910390a35050505050565b611fdd612235565b6001600160a01b038116612020576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610d8c565b612029816124bc565b50565b612034612235565b612040600c5482612478565b6011546010546001600160401b03909116908214801561206857506001600160401b03811615155b801561207c575042816001600160401b0316105b156120b657600f8290556040518281527f5d9e0d9be14f497c2d816d8b729820ec6e15aaedfac011fb74c8007fe79b41a590602001610c3a565b60108290556003546001600160401b03166120d19042612e88565b6011805467ffffffffffffffff19166001600160401b03929092169182179055600f5460408051918252602082018590528101919091527f8fbc293edb8d329676e4f589411c5cd193039462282a8fe4e36b65e8de218e9390606001610c3a565b6006546001600160a01b03163314612178576040517f0904ba19000000000000000000000000000000000000000000000000000000008152336004820152602401610d8c565b600f548211806121895750600c5482105b156121c3576040517ff7f2772a00000000000000000000000000000000000000000000000000000000815260048101839052602401610d8c565b60006121cf8242612e88565b60128490556013805467ffffffffffffffff19166001600160401b0383169081179091556040805186815260208101929092529192507fcce5dc82fd49ad160d45f87e966657ac5e0e94477b778696eac9b05ba7f7d38a910160405180910390a1505050565b336122677f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614611232576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610d8c565b6001600160a01b038116612029576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052610f0091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612633565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123f657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123ea7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156112325760405163703e46dd60e11b815260040160405180910390fd5b61241c61235d565b612425826126af565b610cf782826126b7565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112325760405163703e46dd60e11b815260040160405180910390fd5b80821115610cf7576040517f948f7f9c0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d8c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526125669186918216906323b872dd90608401612316565b50505050565b61257461279f565b61257e8282612478565b61258788612801565b600280547fffffffff0000000000000000000000000000000000000000ffffffffffffffff16600160401b6001600160a01b039b8c1602179055600480546001600160a01b0319908116988b16989098179055600680548816968a169690961790955560088054871694891694909417909355600a805490951691909616179092556003805467ffffffffffffffff19166001600160401b0390951694909417909355600c5550600f55565b60006126486001600160a01b03841683612812565b9050805160001415801561266d57508080602001905181019061266b9190613080565b155b15610f00576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610d8c565b612029612235565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612711575060408051601f3d908101601f1916820190925261270e91810190613054565b60015b61273957604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d8c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612795576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610d8c565b610f008383612829565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611232576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61280961279f565b6120298161287f565b606061282083836000612887565b90505b92915050565b6128328261293f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561287757610f0082826129b6565b610cf7612a2c565b611fdd61279f565b6060814710156128c5576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610d8c565b600080856001600160a01b031684866040516128e1919061309d565b60006040518083038185875af1925050503d806000811461291e576040519150601f19603f3d011682016040523d82523d6000602084013e612923565b606091505b5091509150612933868383612a64565b925050505b9392505050565b806001600160a01b03163b60000361297557604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d8c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516129d3919061309d565b600060405180830381855af49150503d8060008114612a0e576040519150601f19603f3d011682016040523d82523d6000602084013e612a13565b606091505b5091509150612a23858383612a64565b95945050505050565b3415611232576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612a7957612a7482612ad9565b612938565b8151158015612a9057506001600160a01b0384163b155b15612ad2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610d8c565b5080612938565b805115612ae95780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80356001600160a01b0381168114612b3257600080fd5b919050565b600060208284031215612b4957600080fd5b61282082612b1b565b801515811461202957600080fd5b60008060408385031215612b7357600080fd5b612b7c83612b1b565b91506020830135612b8c81612b52565b809150509250929050565b600080600060608486031215612bac57600080fd5b612bb584612b1b565b9250612bc360208501612b1b565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215612bfc57600080fd5b612c0583612b1b565b915060208301356001600160401b0380821115612c2157600080fd5b818501915085601f830112612c3557600080fd5b813581811115612c4757612c47612bd3565b604051601f8201601f19908116603f01168101908382118183101715612c6f57612c6f612bd3565b81604052828152886020848701011115612c8857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215612cbc57600080fd5b5035919050565b60005b83811015612cde578181015183820152602001612cc6565b50506000910152565b60008151808452612cff816020860160208601612cc3565b601f01601f19169290920160200192915050565b6020815260006128206020830184612ce7565b80356001600160401b0381168114612b3257600080fd5b600060208284031215612d4f57600080fd5b61282082612d26565b60008060408385031215612d6b57600080fd5b612d7483612b1b565b946020939093013593505050565b60008060008060008060008060006101208a8c031215612da157600080fd5b612daa8a612b1b565b9850612db860208b01612b1b565b9750612dc660408b01612b1b565b9650612dd460608b01612b1b565b9550612de260808b01612b1b565b9450612df060a08b01612b1b565b9350612dfe60c08b01612d26565b925060e08a013591506101008a013590509295985092959850929598565b60008060408385031215612e2f57600080fd5b612e3883612b1b565b9150612e4660208401612b1b565b90509250929050565b60008060408385031215612e6257600080fd5b82359150612e4660208401612d26565b634e487b7160e01b600052601160045260246000fd5b6001600160401b03818116838216019080821115612ea857612ea8612e72565b5092915050565b6001600160a01b0383168152604060208201526000612ed16040830184612ce7565b949350505050565b600060208284031215612eeb57600080fd5b815160ff8116811461293857600080fd5b60ff828116828216039081111561282357612823612e72565b600181815b80851115612f50578160001904821115612f3657612f36612e72565b80851615612f4357918102915b93841c9390800290612f1a565b509250929050565b600082612f6757506001612823565b81612f7457506000612823565b8160018114612f8a5760028114612f9457612fb0565b6001915050612823565b60ff841115612fa557612fa5612e72565b50506001821b612823565b5060208310610133831016604e8410600b8410161715612fd3575081810a612823565b612fdd8383612f15565b8060001904821115612ff157612ff1612e72565b029392505050565b600061282060ff841683612f58565b808202811582820484141761282357612823612e72565b60008261303c57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561282357612823612e72565b60006020828403121561306657600080fd5b5051919050565b8181038181111561282357612823612e72565b60006020828403121561309257600080fd5b815161293881612b52565b600082516130af818460208701612cc3565b919091019291505056fea2646970667358221220b4dcfe8af18ff593d386b21bb1e14e42dc05c72863ca91281bedbb36d183494864736f6c63430008180033