0 txs
2.2k calls
constructor
constructor()
functions
aaveReferralCode
viewfunction aaveReferralCode() view returns (uint16)
aaveTreasuryConnector
viewfunction aaveTreasuryConnector() view returns (address)
APX_ETH
viewfunction APX_ETH() 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)
dineroTreasuryConnector
viewfunction dineroTreasuryConnector() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isRecipientWhitelistEnabled
viewfunction isRecipientWhitelistEnabled() view returns (bool)
isSpenderWhitelistEnabled
viewfunction isSpenderWhitelistEnabled() view returns (bool)
lidoReferralCode
viewfunction lidoReferralCode() view returns (address)
lidoTreasuryConnector
viewfunction lidoTreasuryConnector() view returns (address)
operationLimits
viewfunction operationLimits(uint8 operation) view returns (uint256 limit)
operationRegistry
viewfunction operationRegistry(uint8 operation, bytes32 idempotencyKey) view returns (bool exist)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
recipientWhitelist
viewfunction recipientWhitelist() view returns (address)
SERVICE_ROLE
viewfunction SERVICE_ROLE() view returns (bytes32)
spenderWhitelist
viewfunction spenderWhitelist() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
WST_ETH
viewfunction WST_ETH() view returns (address)
aaveBorrow
nonpayablefunction aaveBorrow(bytes32 _idempotencyKey, address _token, uint256 _borrowAmount, uint256 _rateMode)
aaveRepay
nonpayablefunction aaveRepay(bytes32 _idempotencyKey, address _token, uint256 _repayAmount, uint256 _rateMode)
aaveRepayAndWithdraw
nonpayablefunction aaveRepayAndWithdraw(bytes32 _idempotencyKey, address _repayToken, uint256 _repayAmount, address _withdrawToken, uint256 _withdrawAmount, uint256 _rateMode)
aaveSupply
nonpayablefunction aaveSupply(bytes32 _idempotencyKey, address _token, uint256 _supplyAmount)
aaveSupplyAndBorrow
nonpayablefunction aaveSupplyAndBorrow(bytes32 _idempotencyKey, address _supplyToken, uint256 _supplyAmount, address _borrowToken, uint256 _borrowAmount, uint256 _rateMode)
aaveWithdraw
nonpayablefunction aaveWithdraw(bytes32 _idempotencyKey, address _token, uint256 _withdrawAmount)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
decreaseAllowance
nonpayablefunction decreaseAllowance(bytes32 _idempotencyKey, address _token, address _spender, uint256 _decreaseAmount)
dineroDeposit
nonpayablefunction dineroDeposit(bytes32 _idempotencyKey, uint256 _amount) returns (uint256 pxETHPostFeeAmount, uint256 feeAmount, uint256 apxETHAmount)
dineroInitiateRedemption
nonpayablefunction dineroInitiateRedemption(bytes32 _idempotencyKey, uint256 _apxETHAmount) returns (uint256 pxETHPostFeeAmount, uint256 feeAmount)
dineroInstantRedeemWithApxEth
nonpayablefunction dineroInstantRedeemWithApxEth(bytes32 _idempotencyKey, uint256 _apxETHAmount) returns (uint256 pxETHPostFeeAmount, uint256 feeAmount)
dineroRedeem
nonpayablefunction dineroRedeem(bytes32 _idempotencyKey, uint256[] _upxETHTokenIds)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseAllowance
nonpayablefunction increaseAllowance(bytes32 _idempotencyKey, address _token, address _spender, uint256 _increaseAmount)
initialize
nonpayablefunction initialize(address _lidoTreasuryConnector, address _aaveTreasuryConnector, address _dineroTreasuryConnector, address _recipientWhitelist, address _spenderWhitelist)
lidoClaimWithdrawals
nonpayablefunction lidoClaimWithdrawals(bytes32 _idempotencyKey, uint256[] _requestIds)
lidoDeposit
nonpayablefunction lidoDeposit(bytes32 _idempotencyKey, uint256 _amount) returns (uint256 wstETHAmount)
lidoRequestWithdrawals
nonpayablefunction lidoRequestWithdrawals(bytes32 _idempotencyKey, uint256[] _amounts) returns (uint256[] requestIds)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setAaveReferralCode
nonpayablefunction setAaveReferralCode(uint16 _aaveReferralCode)
setAaveTreasuryConnector
nonpayablefunction setAaveTreasuryConnector(address _aaveTreasuryConnector)
setDineroTreasuryConnector
nonpayablefunction setDineroTreasuryConnector(address _dineroTreasuryConnector)
setLidoReferralCode
nonpayablefunction setLidoReferralCode(address _lidoReferralCode)
setLidoTreasuryConnector
nonpayablefunction setLidoTreasuryConnector(address _lidoTreasuryConnector)
setOperationLimit
nonpayablefunction setOperationLimit(uint8 _operation, uint256 _limit)
setRecipientWhitelist
nonpayablefunction setRecipientWhitelist(address _recipientWhitelist)
setRecipientWhitelistEnabled
nonpayablefunction setRecipientWhitelistEnabled(bool _isEnabled)
setSpenderWhitelist
nonpayablefunction setSpenderWhitelist(address _spenderWhitelist)
setSpenderWhitelistEnabled
nonpayablefunction setSpenderWhitelistEnabled(bool _isEnabled)
transferERC20
nonpayablefunction transferERC20(bytes32 _idempotencyKey, address _token, address _to, uint256 _amount)
transferETH
nonpayablefunction transferETH(bytes32 _idempotencyKey, address _to, uint256 _amount)
unpause
nonpayablefunction unpause()
events
AaveBorrowed
event AaveBorrowed(bytes32 indexed _idempotencyKey, address indexed _token, uint256 _amount, uint256 _rateMode)
AaveReferralCodeSet
event AaveReferralCodeSet(uint16 _aaveReferralCode)
AaveRepaid
event AaveRepaid(bytes32 indexed _idempotencyKey, address indexed _token, uint256 _amount, uint256 _rateMode)
AaveSupplied
event AaveSupplied(bytes32 indexed _idempotencyKey, address indexed _token, uint256 _amount)
AaveTreasuryConnectorSet
event AaveTreasuryConnectorSet(address indexed _aaveTreasuryConnector)
AaveWithdrawn
event AaveWithdrawn(bytes32 indexed _idempotencyKey, address indexed _token, uint256 _amount)
DecreasedAllowance
event DecreasedAllowance(bytes32 indexed _idempotencyKey, address indexed _token, address indexed _spender, uint256 _decreaseAmount)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
DineroDeposited
event DineroDeposited(bytes32 indexed _idempotencyKey, uint256 _amount, uint256 _pxETHPostFeeAmount, uint256 _feeAmount, uint256 _apxETHAmount)
DineroInitiatedRedemption
event DineroInitiatedRedemption(bytes32 indexed _idempotencyKey, uint256 _apxETHAmount, uint256 _pxETHPostFeeAmount, uint256 _feeAmount)
DineroInstantRedeemed
event DineroInstantRedeemed(bytes32 indexed _idempotencyKey, uint256 _apxETHAmount, uint256 _pxETHPostFeeAmount, uint256 _feeAmount)
DineroRedeemed
event DineroRedeemed(bytes32 indexed _idempotencyKey, uint256[] _upxETHTokenIds)
DineroTreasuryConnectorSet
event DineroTreasuryConnectorSet(address indexed _dineroTreasuryConnector)
IncreasedAllowance
event IncreasedAllowance(bytes32 indexed _idempotencyKey, address indexed _token, address indexed _spender, uint256 _increaseAmount)
Initialized
event Initialized(uint64 version)
LidoDeposited
event LidoDeposited(bytes32 indexed _idempotencyKey, uint256 _amount, uint256 _wstETHAmount)
LidoReferralCodeSet
event LidoReferralCodeSet(address indexed _lidoReferralCode)
LidoTreasuryConnectorSet
event LidoTreasuryConnectorSet(address indexed _lidoTreasuryConnector)
LidoWithdrawalsClaimed
event LidoWithdrawalsClaimed(bytes32 indexed _idempotencyKey, uint256[] _requestIds)
LidoWithdrawalsRequested
event LidoWithdrawalsRequested(bytes32 indexed _idempotencyKey, uint256[] _requestIds, uint256[] _amounts, uint256 _totalAmount)
OperationLimitSet
event OperationLimitSet(uint8 _operation, uint256 _limit)
Paused
event Paused(address account)
Received
event Received(address indexed _from, uint256 _amount)
RecipientWhitelistEnabledSet
event RecipientWhitelistEnabledSet(bool isEnabled)
RecipientWhitelistSet
event RecipientWhitelistSet(address indexed recipientWhitelist)
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)
SpenderWhitelistEnabledSet
event SpenderWhitelistEnabledSet(bool isEnabled)
SpenderWhitelistSet
event SpenderWhitelistSet(address indexed spenderWhitelist)
TransferredERC20
event TransferredERC20(bytes32 indexed _idempotencyKey, address indexed _token, address indexed _to, uint256 _amount)
TransferredETH
event TransferredETH(bytes32 indexed _idempotencyKey, address indexed _to, uint256 _amount)
Unpaused
event Unpaused(address account)
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)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
IdempotencyKeyAlreadyExist
error IdempotencyKeyAlreadyExist(bytes32 _idempotencyKey)
InsufficientFunds
error InsufficientFunds()
InvalidAaveTreasuryConnector
error InvalidAaveTreasuryConnector(address _aaveTreasuryConnector)
InvalidAmount
error InvalidAmount(uint256 _amount)
InvalidDineroTreasuryConnector
error InvalidDineroTreasuryConnector(address _dineroTreasuryConnector)
InvalidInitialization
error InvalidInitialization()
InvalidLidoTreasuryConnector
error InvalidLidoTreasuryConnector(address _lidoTreasuryConnector)
InvalidRecipientWhitelist
error InvalidRecipientWhitelist(address _recipientWhitelist)
InvalidSpenderWhitelist
error InvalidSpenderWhitelist(address _spenderWhitelist)
NotInitializing
error NotInitializing()
OperationLimitExceeded
error OperationLimitExceeded(uint8 _operation, uint256 _amount)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedDecreaseAllowance
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnknownRecipient
error UnknownRecipient(address _recipient)
UnknownSpender
error UnknownSpender(address _spender)
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615dc5806100d96000396000f3fe6080604052600436106103bc5760003560e01c806363603f89116101f2578063a3f516cf1161010d578063cec1ce59116100a0578063d602b9fd1161006f578063d602b9fd14610d1e578063e31d54f614610d33578063e7b60dea14610d53578063f4574b0a14610d8557600080fd5b8063cec1ce5914610c5e578063cefc142914610c7e578063cf6eefb714610c93578063d547741f14610cfe57600080fd5b8063b0fc4f58116100dc578063b0fc4f5814610be1578063b27af95514610c09578063cc8463c814610c29578063cd164f4d14610c3e57600080fd5b8063a3f516cf14610b46578063a884b93014610b66578063adb103fb14610b86578063b067bcfc14610ba657600080fd5b80638bf60a1011610185578063934ad23111610154578063934ad23114610aa9578063a1eda53c14610ac9578063a20e7d4714610afd578063a217fddf14610b3157600080fd5b80638bf60a10146109ef5780638da5cb5b14610a0f5780638ef87b6114610a2457806391d1485414610a4457600080fd5b80638456cb59116101c15780638456cb591461095057806384ef8ffc146109655780638875b5b8146109a25780638b481cba146109c257600080fd5b806363603f89146108d0578063649a5ec7146108f057806368f321b9146109105780636ad7ba421461093057600080fd5b806336568abe116102e25780635468b3ee116102755780635e9f90a1116102445780635e9f90a1146108505780635eb167161461087057806360498a5a14610890578063634e93da146108b057600080fd5b80635468b3ee146107965780635664cb48146107d15780635c59ebe1146107f95780635c975abb1461081957600080fd5b8063401c176e116102b1578063401c176e14610704578063489c9344146107245780634baca74b146107565780634c0d858a1461077657600080fd5b806336568abe1461068f57806337b60b52146106af5780633c8e33a3146106cf5780633f4ba83a146106ef57600080fd5b80630b3fbf891161035a5780631459457a116103295780631459457a146105e05780632007612314610600578063248a9ca3146106205780632f2ff15d1461066f57600080fd5b80630b3fbf891461054b5780630fff76731461056b57806310b4e6e51461058b578063131c5fd8146105c057600080fd5b806302b8f54c1161039657806302b8f54c1461049657806308e169d9146104ce5780630aa6220b146104f05780630b189c621461050557600080fd5b806301ffc9a7146103fd578063022d63fb146104325780630258de4a1461045b57600080fd5b366103f85760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561040957600080fd5b5061041d6104183660046155cb565b610da5565b60405190151581526020015b60405180910390f35b34801561043e57600080fd5b50620697805b60405165ffffffffffff9091168152602001610429565b34801561046757600080fd5b50610488610476366004615621565b60076020526000908152604090205481565b604051908152602001610429565b3480156104a257600080fd5b506003546104b6906001600160a01b031681565b6040516001600160a01b039091168152602001610429565b3480156104da57600080fd5b506104ee6104e936600461563c565b610e01565b005b3480156104fc57600080fd5b506104ee610e8f565b34801561051157600080fd5b506001546105389074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001610429565b34801561055757600080fd5b506104ee610566366004615675565b610ea5565b34801561057757600080fd5b506104886105863660046156bd565b611172565b34801561059757600080fd5b506105ab6105a63660046156bd565b611363565b60408051928352602083019190915201610429565b3480156105cc57600080fd5b506104ee6105db3660046156df565b611581565b3480156105ec57600080fd5b506104ee6105fb3660046156fc565b611647565b34801561060c57600080fd5b506104ee61061b36600461577b565b611b62565b34801561062c57600080fd5b5061048861063b366004615798565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561067b57600080fd5b506104ee61068a3660046157b1565b611be6565b34801561069b57600080fd5b506104ee6106aa3660046157b1565b611c2b565b3480156106bb57600080fd5b506104ee6106ca3660046157e1565b611d78565b3480156106db57600080fd5b506002546104b6906001600160a01b031681565b3480156106fb57600080fd5b506104ee612034565b34801561071057600080fd5b506104ee61071f3660046157e1565b612047565b34801561073057600080fd5b5060045461041d9074010000000000000000000000000000000000000000900460ff1681565b34801561076257600080fd5b506104ee6107713660046156df565b612337565b34801561078257600080fd5b506104ee610791366004615819565b6123a3565b3480156107a257600080fd5b506107b66107b13660046156bd565b612426565b60408051938452602084019290925290820152606001610429565b3480156107dd57600080fd5b506104b6737f39c581f595b53c5cb19bd0b3f8da6c935e2ca081565b34801561080557600080fd5b506104ee6108143660046156df565b61261f565b34801561082557600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661041d565b34801561085c57600080fd5b506105ab61086b3660046156bd565b6126e5565b34801561087c57600080fd5b506104ee61088b366004615843565b612896565b34801561089c57600080fd5b506004546104b6906001600160a01b031681565b3480156108bc57600080fd5b506104ee6108cb3660046156df565b612a61565b3480156108dc57600080fd5b506104ee6108eb366004615880565b612a75565b3480156108fc57600080fd5b506104ee61090b3660046158ff565b612be6565b34801561091c57600080fd5b506005546104b6906001600160a01b031681565b34801561093c57600080fd5b506104ee61094b366004615927565b612bfa565b34801561095c57600080fd5b506104ee612c4c565b34801561097157600080fd5b507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b03166104b6565b3480156109ae57600080fd5b506000546104b6906001600160a01b031681565b3480156109ce57600080fd5b506109e26109dd366004615880565b612c5f565b60405161042991906159bf565b3480156109fb57600080fd5b506104ee610a0a366004615675565b612efb565b348015610a1b57600080fd5b506104b661303d565b348015610a3057600080fd5b506104ee610a3f366004615843565b613075565b348015610a5057600080fd5b5061041d610a5f3660046157b1565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610ab557600080fd5b506104ee610ac43660046156df565b613504565b348015610ad557600080fd5b50610ade6135ca565b6040805165ffffffffffff938416815292909116602083015201610429565b348015610b0957600080fd5b506104887fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b81565b348015610b3d57600080fd5b50610488600081565b348015610b5257600080fd5b506104ee610b613660046157e1565b613689565b348015610b7257600080fd5b506104ee610b8136600461577b565b61398d565b348015610b9257600080fd5b506104ee610ba1366004615880565b613a11565b348015610bb257600080fd5b5061041d610bc1366004615819565b600660209081526000928352604080842090915290825290205460ff1681565b348015610bed57600080fd5b506104b6739ba021b0a9b958b5e75ce9f6dff97c7ee52cb3e681565b348015610c1557600080fd5b506001546104b6906001600160a01b031681565b348015610c3557600080fd5b50610444613b62565b348015610c4a57600080fd5b506104ee610c59366004615927565b613c43565b348015610c6a57600080fd5b506104ee610c793660046156df565b613c8c565b348015610c8a57600080fd5b506104ee613d52565b348015610c9f57600080fd5b507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840054604080516001600160a01b03831681527401000000000000000000000000000000000000000090920465ffffffffffff16602083015201610429565b348015610d0a57600080fd5b506104ee610d193660046157b1565b613dc0565b348015610d2a57600080fd5b506104ee613e01565b348015610d3f57600080fd5b506104ee610d4e366004615675565b613e14565b348015610d5f57600080fd5b5060055461041d9074010000000000000000000000000000000000000000900460ff1681565b348015610d9157600080fd5b506104ee610da03660046156df565b614028565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f31498786000000000000000000000000000000000000000000000000000000001480610dfb5750610dfb826140ee565b92915050565b6000610e0c81614185565b600180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527fe0be24ebb7514020df908916e2c30fafa7348f505af5e997176cc031348cad1d906020015b60405180910390a15050565b6000610e9a81614185565b610ea261418f565b50565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b610ecf81614185565b60008581527fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b6020526040902054600890869060ff1615610f44576040517f0d295dcb000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600454859074010000000000000000000000000000000000000000900460ff168015610ff65750600480546040517fb23bc7d70000000000000000000000000000000000000000000000000000000081526001600160a01b038481169382019390935291169063b23bc7d790602401602060405180830381865afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190615a01565b155b15611038576040517f557ea9fe0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610f3b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561106c5761106c6000614185565b6110758761419c565b61107e8661419c565b611087856141dc565b611092600886614219565b6110a66001600160a01b038816878761428c565b856001600160a01b0316876001600160a01b0316897f8a8f502e2134bcf1036dbf0032323e227e08d693381ca565b83bcb479d3757cb886040516110ec91815260200190565b60405180910390a45060016006600084600e81111561110d5761110d6159d2565b600e81111561111e5761111e6159d2565b8152602080820192909252604090810160009081209481529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055505050505050565b60007fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61119e81614185565b60008481527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f86020526040812054859060ff161561120b576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b611213614300565b61121c856141dc565b6112258561435c565b611230600086614219565b6001546000546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f340fa0190879060240160206040518083038185885af1158015611298573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112bd9190615a1e565b604080518781526020810183905291955087917f4750b5abb59ae8bbd229eddb078f7dad5a8da8501dcf8001f3164465d8df5a85910160405180910390a260016006600084600e811115611313576113136159d2565b600e811115611324576113246159d2565b8152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050505092915050565b6000807fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61139081614185565b60008581527f248457bacb20e239ae314d8db91c0f270e453c28ee138c84f97aea6cfcf9a4996020526040902054600d90869060ff1615611400576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b611408614300565b611411866141dc565b61141c600d87614219565b60035461144890739ba021b0a9b958b5e75ce9f6dff97c7ee52cb3e6906001600160a01b031688614396565b6003546040517f08820634000000000000000000000000000000000000000000000000000000008152600481018890526001600160a01b039091169063088206349060240160408051808303816000875af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190615a37565b6040805189815260208101849052908101829052919650945087907fdd5a5911a79dd249817e82d80c8c6d08998195bd871c31c6e013d8d6fdc4f001906060015b60405180910390a260016006600084600e811115611530576115306159d2565b600e811115611541576115416159d2565b8152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050509250929050565b600061158c81614185565b6115958261419c565b816001600160a01b03163b6000036115e4576040517fedf63ab30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610f3b565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f0d8d0348aa7c7a34847e1fb041788fa1dad1273634062cba79ddc19cbb81efda90600090a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116925750825b905060008267ffffffffffffffff1660011480156116af5750303b155b9050811580156116bd575080155b156116f4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117555784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b611762620151803361443f565b61176a614451565b60076020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df8190557fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b8288190557f3be6fd20d5acfde5b873b48692cd31f4d3c7e8ee8a813af4696af8859e5ca6c68190557fb805995a7ec585a251200611a61d179cfd7fb105e1ab17dc415a7336783786f78190557fbcdda56b5d08466ec462cbbe0adfa57cb0a15fcc8940ef68f702f21b787bc9358190557f55c5b153ab560fcde54a63b18c7f53d75501706907cef8767fbded79ab9997c78190557fb7c49cceb9f85950584035457a41ebbd8cf93b9b612733ad25aa9731ac43aad68190557f4b1bf46c9f1bd48ff8274d40bad76a6615cb6c59a637d451a3994194b2db86be8190557ff1f3e9c34634a546b3672c043f73844d83d55591bbe61b8e7e3a72bca1a812bf8190557f3ed157e83ab1bb1f6b7b3760b3368106283d4e15d1f1b08e20d06576445a99948190557fb7511a2dbe1513c8574eaafb5266301ff1bbf641d4144b093d6d1b500334bf2f8190557f74b6357e277c778e8ad9a2761a935d45336ec91439b9e1b117eda2efdfe38fad819055600d6000527fc6af84bcd7a912c26772dce2b27a335c9acc50e9113bac42fd0b48deecc0f30c556119708a61419c565b600180546001600160a01b038c167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556000805490911690556119b88961419c565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16179055600180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff169055611a1c8861419c565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611a588761419c565b600480547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b0389161774010000000000000000000000000000000000000000179055611aab8661419c565b600580547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b03881617740100000000000000000000000000000000000000001790558315611b565784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6000611b6d81614185565b6005805483151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517fb9aec9ecdd81ea5f1c1f922502122e0e334e5806181fa23ca7a5c73467961f2d90610e8390841515815260200190565b81611c1d576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c278282614461565b5050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840082158015611c8657507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b038381169116145b15611d69577feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400546001600160a01b0381169074010000000000000000000000000000000000000000900465ffffffffffff1681151580611cec575065ffffffffffff8116155b80611cff57504265ffffffffffff821610155b15611d40576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff82166004820152602401610f3b565b505080547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff1681555b611d7383836144a5565b505050565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b611da281614185565b60008481527f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e6020526040902054600790859060ff1615611e12576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b600454859074010000000000000000000000000000000000000000900460ff168015611ec45750600480546040517fb23bc7d70000000000000000000000000000000000000000000000000000000081526001600160a01b038481169382019390935291169063b23bc7d790602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190615a01565b155b15611f06576040517f557ea9fe0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610f3b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611f3a57611f3a6000614185565b611f438661419c565b611f4c856141dc565b611f558561435c565b611f60600786614219565b611f736001600160a01b038716866144f1565b856001600160a01b0316877fb1437f3968df49039ddeaca753cece147807b018a798356802922de1783243a287604051611faf91815260200190565b60405180910390a35060016006600084600e811115611fd057611fd06159d2565b600e811115611fe157611fe16159d2565b8152602080820192909252604090810160009081209481529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050505050565b600061203f81614185565b610ea26145ba565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61207181614185565b60008481527f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d26020526040902054600390859060ff16156120e1576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b6120e9614300565b6120f28561419c565b6120fb846141dc565b612106600385614219565b6002546040517ff70a25080000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015290911690819063f70a250890602401602060405180830381865afa15801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f9190615a01565b156122455761219d8561435c565b6001546040517f79ce00290000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018890527401000000000000000000000000000000000000000090920461ffff166044820152908216906379ce00299087906064016000604051808303818588803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b50505050506122fb565b6122596001600160a01b0387168287614396565b6001546040517f79ce00290000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018890527401000000000000000000000000000000000000000090920461ffff166044820152908216906379ce002990606401600060405180830381600087803b1580156122e257600080fd5b505af11580156122f6573d6000803e3d6000fd5b505050505b856001600160a01b0316877fd70a152f96fcae407dc221ac26eda053052d9b5af89d755d887b4bd154224c3c87604051611faf91815260200190565b600061234281614185565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117825560405190917fa3f0abb5e96d3671235887c1694cc096588cbf2fa204d0079a138a77f401055b91a25050565b60006123ae81614185565b816007600085600e8111156123c5576123c56159d2565b600e8111156123d6576123d66159d2565b8152602001908152602001600020819055507f7b8ec74c93cc0634b9c84c7ac52e046d416d3c9bf1019f79e66b50027e2a3afe8383604051612419929190615a5b565b60405180910390a1505050565b60008060007fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61245581614185565b60008681527f85291c2e7881182c13e19eca9b58927ebfdc2c5d04882018eeb33d8241d357116020526040902054600b90879060ff16156124c5576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b6124cd614300565b6124d6876141dc565b6124df8761435c565b6124ea600b88614219565b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b815260040160606040518083038185885af115801561253f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125649190615aa0565b604080518b81526020810185905290810183905260608101829052929850909650945088907fa5133852cdfd5e0dc9bc1d3261479e81a94fa785ab177c5b402f292a2ad2f62a9060800160405180910390a260016006600084600e8111156125ce576125ce6159d2565b600e8111156125df576125df6159d2565b8152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050509250925092565b600061262a81614185565b6126338261419c565b816001600160a01b03163b600003612682576040517fabf0b0520000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610f3b565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f1d807242981bc86dc0dae692dc3d4771b331d445dee97b582e4cb3c499f6e11290600090a25050565b6000807fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61271281614185565b60008581527f0b94fa1b86997cc1f1148bfbe25b674e8cefc7cc6f976aa8d7c7966bd4cca3476020526040902054600c90869060ff1615612782576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b61278a614300565b612793866141dc565b61279e600c87614219565b6003546127ca90739ba021b0a9b958b5e75ce9f6dff97c7ee52cb3e6906001600160a01b031688614396565b6003546040517ffe5be481000000000000000000000000000000000000000000000000000000008152600481018890526001600160a01b039091169063fe5be4819060240160408051808303816000875af115801561282d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128519190615a37565b6040805189815260208101849052908101829052919650945087907f348be79f4ca2a69f0f5fd0e7c66764bb80dad45e717bb970263f68f11c1450d090606001611510565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b6128c081614185565b60008581527fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed6020526040902054600490869060ff1615612930576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b612938614300565b6129418661419c565b61294a856141dc565b612955600486614219565b6002546001546040517fc858f5f90000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015260248201899052604482018890527401000000000000000000000000000000000000000090920461ffff166064820152911690819063c858f5f990608401600060405180830381600087803b1580156129e957600080fd5b505af11580156129fd573d6000803e3d6000fd5b505060408051898152602081018990526001600160a01b038b1693508b92507f0854afcb9d3032f2b1e6c58c9406c2c7cc33d348cef06ec1db58e7ace1078b6f91015b60405180910390a35060016006600084600e81111561110d5761110d6159d2565b6000612a6c81614185565b611c278261464a565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b612a9f81614185565b60008481527faca6cdb4b5fe0ec50731a73f714dd191dc1911bfeb3f9eeb9e94ed0f6065ef8d6020526040902054600e90859060ff1615612b0f576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b612b17614300565b6003546040517ff9afb26a0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f9afb26a90612b629088908890600401615b19565b600060405180830381600087803b158015612b7c57600080fd5b505af1158015612b90573d6000803e3d6000fd5b50505050857f333b4351a4be6fa4882156bb1b25cefc26dfa37931aa996e95ccd82619b2dde18686604051612bc6929190615b19565b60405180910390a260016006600084600e811115611fd057611fd06159d2565b6000612bf181614185565b611c27826146bd565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b612c2481614185565b612c2c614300565b612c37878787612047565b612c4387858585612896565b50505050505050565b6000612c5781614185565b610ea2614726565b60607fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b612c8b81614185565b60008581527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a316020526040902054600190869060ff1615612cfb576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b612d03614300565b6000805b86811015612d5e57612d30888883818110612d2457612d24615b2d565b905060200201356141dc565b878782818110612d4257612d42615b2d565b9050602002013582612d549190615b8b565b9150600101612d07565b50612d68816141dc565b612d73600182614219565b600154612d9f90737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0906001600160a01b031683614396565b6001546040517f959210080000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690639592100890612dec908a908a908690600401615b9e565b6000604051808303816000875af1158015612e0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e519190810190615bf1565b9450877f90b3f6eed1dd065309afcfff993d9586d2946f4bfc753b136e0176b54d47d80f86898985604051612e899493929190615ccd565b60405180910390a25060016006600084600e811115612eaa57612eaa6159d2565b600e811115612ebb57612ebb6159d2565b8152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050509392505050565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b612f2581614185565b60008581527f4da38fc8e544afc56a4c2a17752b8ddb67d8e23ac4583c9029d2e2d1dbe6c9886020526040902054600a90869060ff1615612f95576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b612f9d614300565b612fa68661419c565b612faf8561419c565b612fb8846141dc565b612fc3600a85614219565b612fd76001600160a01b038716868661479f565b846001600160a01b0316866001600160a01b0316887f5883a61a9a7274699ccfdc56327c4092a49ae949a512fc86865b6af3c27856ce8760405161301d91815260200190565b60405180910390a460016006600084600e81111561110d5761110d6159d2565b60006130707feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b905090565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61309f81614185565b60008581527f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f6020526040902054600690869060ff161561310f576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b613117614300565b6131208661419c565b613129856141dc565b613134600686614219565b6002546040517ff70a25080000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015290911690819063f70a250890602401602060405180830381865afa158015613199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bd9190615a01565b15613376577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86036132e457806001600160a01b031663ce584374826001600160a01b031663affa88176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325a9190615d05565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260248101889052604401602060405180830381865afa1580156132bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e19190615a1e565b95505b6132ed8661435c565b6040517f8cd2e0c70000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301526024820188905260448201879052821690638cd2e0c79088906064016000604051808303818588803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b50505050506134c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860361342a576040517fce5843740000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301526024820187905282169063ce58437490604401602060405180830381865afa158015613403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134279190615a1e565b95505b61343e6001600160a01b0388168288614396565b6040517f8cd2e0c70000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301526024820188905260448201879052821690638cd2e0c790606401600060405180830381600087803b1580156134a857600080fd5b505af11580156134bc573d6000803e3d6000fd5b505050505b60408051878152602081018790526001600160a01b038916918a917f7b4649eccf71c32f485d16602072e9073bade100d73c2e753ee8c2df2fef79e69101612a40565b600061350f81614185565b6135188261419c565b816001600160a01b03163b600003613567576040517f7271d1380000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610f3b565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f1bda301accadaa2758255977c0623426e29478c32e0a2957acda7a10052f4cd790600090a25050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff167feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400811580159061364d57504265ffffffffffff831610155b61365957600080613680565b600181015474010000000000000000000000000000000000000000900465ffffffffffff16825b92509250509091565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b6136b381614185565b60008481527fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b6020526040902054600590859060ff1615613723576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b61372b614300565b6137348561419c565b61373d846141dc565b613748600585614219565b6002546001600160a01b0316600185016138d6576040517ff70a25080000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152821690630712f6b390829063f70a250890602401602060405180830381865afa1580156137c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e79190615a01565b6137f15787613853565b826001600160a01b031663affa88176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561382f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138539190615d05565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156138af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d39190615a1e565b94505b6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301526024820187905282169063f3fef3a390604401600060405180830381600087803b15801561393957600080fd5b505af115801561394d573d6000803e3d6000fd5b50505050856001600160a01b0316877fa0a5910823dc2f8ceb8c655828f7e21a91e3741562a5b4179db58b8745825cfe87604051611faf91815260200190565b600061399881614185565b6004805483151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517fcc897334103893747c41d7bff261a5cf543ed7cbf9efe82b7953b858f63619c290610e8390841515815260200190565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b613a3b81614185565b60008481527f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace296020526040902054600290859060ff1615613aab576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b613ab3614300565b6001546040517f48e30f540000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906348e30f5490613afe9088908890600401615b19565b600060405180830381600087803b158015613b1857600080fd5b505af1158015613b2c573d6000803e3d6000fd5b50505050857f0c258583e61d16b84e3e28efd015ea5cca18e9bddcd2138cbaa466e82c1bbc378686604051612bc6929190615b19565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000907feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015801590613be557504265ffffffffffff8216105b613c165781547a010000000000000000000000000000000000000000000000000000900465ffffffffffff16613c3c565b600182015474010000000000000000000000000000000000000000900465ffffffffffff165b9250505090565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b613c6d81614185565b613c75614300565b613c8187878785613075565b612c43878585613689565b6000613c9781614185565b613ca08261419c565b816001600160a01b03163b600003613cef576040517f0594bf390000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610f3b565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f83d897134a307b0d57c47b7d56841073dd80bb5adc21cb0d138ce6a310bb06c090600090a25050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400546001600160a01b0316338114613db8576040517fc22c8022000000000000000000000000000000000000000000000000000000008152336004820152602401610f3b565b610ea261488e565b81613df7576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2782826149a5565b6000613e0c81614185565b610ea26149e9565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b613e3e81614185565b60008581527fca4d0c6c94a9477136dd41a99cc19ecbe441c8f6609efe7c6fa65be007a473236020526040902054600990869060ff1615613eae576040517f0d295dcb00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b600554859074010000000000000000000000000000000000000000900460ff168015613f5e57506005546040517fb23bc7d70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063b23bc7d790602401602060405180830381865afa158015613f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5c9190615a01565b155b15613fa0576040517fbb85f9d20000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610f3b565b613fa8614300565b613fb18761419c565b613fba8661419c565b613fc3856141dc565b613fce600986614219565b613fe26001600160a01b0388168787614396565b856001600160a01b0316876001600160a01b0316897f53473edbfba7670720e26f8d285fbbc4f33b83b971db9377088962c87ffecd48886040516110ec91815260200190565b600061403381614185565b61403c8261419c565b816001600160a01b03163b60000361408b576040517f95fcbbf00000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610f3b565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f368a5df0138581ab8804a1a521d3d7656bb8c3efc694ecee7cb3f093dcb2327590600090a25050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610dfb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610dfb565b610ea281336149f4565b61419a600080614a81565b565b6001600160a01b038116610ea2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610ea2576040517f3728b83d00000000000000000000000000000000000000000000000000000000815260048101829052602401610f3b565b6007600083600e81111561422f5761422f6159d2565b600e811115614240576142406159d2565b815260200190815260200160002054811115611c275781816040517fc02fd804000000000000000000000000000000000000000000000000000000008152600401610f3b929190615a5b565b6040516001600160a01b03838116602483015260448201839052611d7391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614c0d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561419a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b47811115610ea2576040517f356680b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156143ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144239190615a1e565b905061443984846144348585615b8b565b614c89565b50505050565b614447614d47565b611c278282614dae565b614459614d47565b61419a614e6c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461449b81614185565b6144398383614ebd565b6001600160a01b03811633146144e7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d738282614fa0565b8047101561452d576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f3b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461457a576040519150601f19603f3d011682016040523d82523d6000602084013e61457f565b606091505b5050905080611d73576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6145c2615037565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6000614654613b62565b61465d42615092565b6146679190615d22565b905061467382826150e2565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b60006146c882615190565b6146d142615092565b6146db9190615d22565b90506146e78282614a81565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101610e83565b61472e614300565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361462c565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015614808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061482c9190615a1e565b905081811015614881576040517fe570110f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610f3b565b6144398484848403614c89565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840080546001600160a01b0381169074010000000000000000000000000000000000000000900465ffffffffffff168015806148f157504265ffffffffffff821610155b15614932576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff82166004820152602401610f3b565b61496d60006149687feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b614fa0565b50614979600083614ebd565b505081547fffffffffffff00000000000000000000000000000000000000000000000000001690915550565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546149df81614185565b6144398383614fa0565b61419a6000806150e2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611c27576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610f3b565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401547feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015614b94574265ffffffffffff82161015614b6a576001820154825479ffffffffffffffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090910465ffffffffffff167a01000000000000000000000000000000000000000000000000000002178255614b94565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b03167401000000000000000000000000000000000000000065ffffffffffff9485160279ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009290931691909102919091179055565b6000614c226001600160a01b038416836151df565b90508051600014158015614c47575080806020019051810190614c459190615a01565b155b15611d73576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610f3b565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052614d0884826151ed565b614439576040516001600160a01b03848116602483015260006044830152614d3d91869182169063095ea7b3906064016142b9565b6144398482614c0d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661419a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614db6614d47565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d86984006001600160a01b038216614e1a576040517fc22c802200000000000000000000000000000000000000000000000000000000815260006004820152602401610f3b565b805479ffffffffffffffffffffffffffffffffffffffffffffffffffff167a01000000000000000000000000000000000000000000000000000065ffffffffffff851602178155614439600083614ebd565b614e74614d47565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60007feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840083614f8e576000614f187feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b6001600160a01b031614614f58576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385161790555b614f988484615295565b949350505050565b60007feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840083158015614ffd57507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b038481169116145b1561502d576001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b614f988484615389565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661419a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600065ffffffffffff8211156150de576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526030600482015260248101839052604401610f3b565b5090565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840080547401000000000000000000000000000000000000000065ffffffffffff84811682027fffffffffffff000000000000000000000000000000000000000000000000000084166001600160a01b038816171784559104168015614439576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b60008061519b613b62565b90508065ffffffffffff168365ffffffffffff16116151c3576151be8382615d41565b6151d8565b6151d865ffffffffffff84166206978061544d565b9392505050565b60606151d883836000615463565b6000806000846001600160a01b03168460405161520a9190615d60565b6000604051808303816000865af19150503d8060008114615247576040519150601f19603f3d011682016040523d82523d6000602084013e61524c565b606091505b50915091508180156152765750805115806152765750808060200190518101906152769190615a01565b801561528c57506000856001600160a01b03163b115b95945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16615378576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561532e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610dfb565b6000915050610dfb565b5092915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615615378576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610dfb565b600081831061545c57816151d8565b5090919050565b6060814710156154a1576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610f3b565b600080856001600160a01b031684866040516154bd9190615d60565b60006040518083038185875af1925050503d80600081146154fa576040519150601f19603f3d011682016040523d82523d6000602084013e6154ff565b606091505b509150915061550f868383615519565b9695505050505050565b606082615529576151be82615589565b815115801561554057506001600160a01b0384163b155b15615582576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610f3b565b50806151d8565b8051156155995780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156155dd57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146151d857600080fd5b8035600f811061561c57600080fd5b919050565b60006020828403121561563357600080fd5b6151d88261560d565b60006020828403121561564e57600080fd5b813561ffff811681146151d857600080fd5b6001600160a01b0381168114610ea257600080fd5b6000806000806080858703121561568b57600080fd5b84359350602085013561569d81615660565b925060408501356156ad81615660565b9396929550929360600135925050565b600080604083850312156156d057600080fd5b50508035926020909101359150565b6000602082840312156156f157600080fd5b81356151d881615660565b600080600080600060a0868803121561571457600080fd5b853561571f81615660565b9450602086013561572f81615660565b9350604086013561573f81615660565b9250606086013561574f81615660565b9150608086013561575f81615660565b809150509295509295909350565b8015158114610ea257600080fd5b60006020828403121561578d57600080fd5b81356151d88161576d565b6000602082840312156157aa57600080fd5b5035919050565b600080604083850312156157c457600080fd5b8235915060208301356157d681615660565b809150509250929050565b6000806000606084860312156157f657600080fd5b83359250602084013561580881615660565b929592945050506040919091013590565b6000806040838503121561582c57600080fd5b6158358361560d565b946020939093013593505050565b6000806000806080858703121561585957600080fd5b84359350602085013561586b81615660565b93969395505050506040820135916060013590565b60008060006040848603121561589557600080fd5b83359250602084013567ffffffffffffffff808211156158b457600080fd5b818601915086601f8301126158c857600080fd5b8135818111156158d757600080fd5b8760208260051b85010111156158ec57600080fd5b6020830194508093505050509250925092565b60006020828403121561591157600080fd5b813565ffffffffffff811681146151d857600080fd5b60008060008060008060c0878903121561594057600080fd5b86359550602087013561595281615660565b945060408701359350606087013561596981615660565b9598949750929560808101359460a0909101359350915050565b60008151808452602080850194506020840160005b838110156159b457815187529582019590820190600101615998565b509495945050505050565b6020815260006151d86020830184615983565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215615a1357600080fd5b81516151d88161576d565b600060208284031215615a3057600080fd5b5051919050565b60008060408385031215615a4a57600080fd5b505080516020909101519092909150565b60408101600f8410615a96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9281526020015290565b600080600060608486031215615ab557600080fd5b8351925060208401519150604084015190509250925092565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115615b0057600080fd5b8260051b80836020870137939093016020019392505050565b602081526000614f98602083018486615ace565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610dfb57610dfb615b5c565b604081526000615bb2604083018587615ace565b9050826020830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020808385031215615c0457600080fd5b825167ffffffffffffffff80821115615c1c57600080fd5b818501915085601f830112615c3057600080fd5b815181811115615c4257615c42615bc2565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715615c8557615c85615bc2565b604052918252848201925083810185019188831115615ca357600080fd5b938501935b82851015615cc157845184529385019392850192615ca8565b98975050505050505050565b606081526000615ce06060830187615983565b8281036020840152615cf3818688615ace565b91505082604083015295945050505050565b600060208284031215615d1757600080fd5b81516151d881615660565b65ffffffffffff81811683821601908082111561538257615382615b5c565b65ffffffffffff82811682821603908082111561538257615382615b5c565b6000825160005b81811015615d815760208186018101518583015201615d67565b50600092019182525091905056fea264697066735822122060d849bf51ed9e5e218ebda96ae68286551f77b348e3ec09c1f539064eb0cf6264736f6c63430008190033