0 txs
0 calls
constructor
constructor(address _etherFiDataProvider)
functions
CASH_MODULE_CONTROLLER_ROLE
viewfunction CASH_MODULE_CONTROLLER_ROLE() view returns (bytes32)
ETH
viewfunction ETH() view returns (address)
ETHER_FI_WALLET_ROLE
viewfunction ETHER_FI_WALLET_ROLE() view returns (bytes32)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
HUNDRED_PERCENT_IN_BPS
viewfunction HUNDRED_PERCENT_IN_BPS() view returns (uint256)
MAX_CASHBACK_PERCENTAGE
viewfunction MAX_CASHBACK_PERCENTAGE() view returns (uint256)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
pause
nonpayablefunction pause()
requestWithdrawal
nonpayablefunction requestWithdrawal(address safe, address[] tokens, uint256[] amounts, address recipient, address[] signers, bytes[] signatures)
setCashbackSplitToSafeBps
nonpayablefunction setCashbackSplitToSafeBps(address safe, uint256 splitInBps, address signer, bytes signature)
setDelays
nonpayablefunction setDelays(uint64 withdrawalDelay, uint64 spendLimitDelay, uint64 modeDelay)
setMode
nonpayablefunction setMode(address safe, uint8 mode, address signer, bytes signature)
setReferrerCashbackPercentageInBps
nonpayablefunction setReferrerCashbackPercentageInBps(uint64 cashbackPercentage)
setSafeTier
nonpayablefunction setSafeTier(address[] safes, uint8[] tiers)
setSettlementDispatcher
nonpayablefunction setSettlementDispatcher(uint8 binSponsor, address dispatcher)
setTierCashbackPercentage
nonpayablefunction setTierCashbackPercentage(uint8[] tiers, uint256[] cashbackPercentages)
setupModule
nonpayablefunction setupModule(bytes data)
unpause
nonpayablefunction unpause()
updateSpendingLimit
nonpayablefunction updateSpendingLimit(address safe, uint256 dailyLimitInUsd, uint256 monthlyLimitInUsd, address signer, bytes signature)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyInSameTier
error AlreadyInSameTier(uint256 index)
AmountZero
error AmountZero()
ArrayLengthMismatch
error ArrayLengthMismatch()
BorrowingsExceedMaxBorrowAfterSpending
error BorrowingsExceedMaxBorrowAfterSpending()
CannotWithdrawYet
error CannotWithdrawYet()
CashbackPercentageGreaterThanMaxAllowed
error CashbackPercentageGreaterThanMaxAllowed()
DailyLimitCannotBeGreaterThanMonthlyLimit
error DailyLimitCannotBeGreaterThanMonthlyLimit()
DuplicateElementFound
error DuplicateElementFound()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidERC1271Signer
error InvalidERC1271Signer()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidSignatures
error InvalidSignatures()
InvalidSigner
error InvalidSigner()
ModeAlreadySet
error ModeAlreadySet()
NotInitializing
error NotInitializing()
OnlyBorrowToken
error OnlyBorrowToken()
OnlyCashModuleController
error OnlyCashModuleController()
OnlyDebtManager
error OnlyDebtManager()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlyEtherFiWallet
error OnlyEtherFiWallet()
OnlyOneTokenAllowedInCreditMode
error OnlyOneTokenAllowedInCreditMode()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
OnlySafeAdmin
error OnlySafeAdmin()
RecipientCannotBeAddressZero
error RecipientCannotBeAddressZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SettlementDispatcherNotSetForBinSponsor
error SettlementDispatcherNotSetForBinSponsor()
SplitAlreadyTheSame
error SplitAlreadyTheSame()
TransactionAlreadyCleared
error TransactionAlreadyCleared()
Unauthorized
error Unauthorized()
UnsupportedToken
error UnsupportedToken()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c060405230608052348015610013575f5ffd5b5060405161485038038061485083398101604081905261003291610130565b80806001600160a01b03811661005b5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b031660a05261006f61007e565b5061007861007e565b5061015d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ce5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461012d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610140575f5ffd5b81516001600160a01b0381168114610156575f5ffd5b9392505050565b60805160a0516146a16101af5f395f81816104830152818161096501528181610ac401528181610bfb015281816110e201526116cc01525f818161196d015281816119960152611b4a01526146a15ff3fe608060405260043610610147575f3560e01c80636b7cd20c116100b35780638fd26fc31161006d5780638fd26fc3146103c4578063909030d5146103e35780639f42460214610401578063ad3cb1cc14610416578063be219a1e14610453578063f9fba81b14610472575f5ffd5b80636b7cd20c14610317578063763d74c6146103365780637666ba74146103555780637f12dc60146103745780638322fff2146103895780638456cb59146103b0575f5ffd5b806341d88bd31161010457806341d88bd3146102645780634f1ef2861461028457806352d1902d146102975780635c975abb146102ab5780635ce8700a146102d957806366725af5146102f8575f5ffd5b8063037802111461014b578063076b7a441461016c57806308c732591461018b5780632d0335ab146101bc5780632d81b95c1461021d5780633f4ba83a14610250575b5f5ffd5b348015610156575f5ffd5b5061016a610165366004613740565b6104a5565b005b348015610177575f5ffd5b5061016a6101863660046137a2565b610671565b348015610196575f5ffd5b5061019f610879565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c7575f5ffd5b5061020f6101d63660046137d5565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b6040519081526020016101b3565b348015610228575f5ffd5b5061020f7f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206781565b34801561025b575f5ffd5b5061016a6108a7565b34801561026f575f5ffd5b5061020f5f5160206146755f395f51905f5281565b61016a610292366004613832565b61090e565b3480156102a2575f5ffd5b5061020f610929565b3480156102b6575f5ffd5b505f5160206146555f395f51905f525460ff1660405190151581526020016101b3565b3480156102e4575f5ffd5b5061016a6102f3366004613919565b610944565b348015610303575f5ffd5b5061016a6103123660046139cb565b610aa3565b348015610322575f5ffd5b5061016a610331366004613ab9565b610bda565b348015610341575f5ffd5b5061016a610350366004613bc3565b610ff0565b348015610360575f5ffd5b5061016a61036f366004613c84565b611302565b34801561037f575f5ffd5b5061020f61271081565b348015610394575f5ffd5b5061019f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156103bb575f5ffd5b5061016a611485565b3480156103cf575f5ffd5b5061016a6103de366004613c9d565b6114ea565b3480156103ee575f5ffd5b5061016a6103fd366004613d59565b5050565b34801561040c575f5ffd5b5061020f6103e881565b348015610421575f5ffd5b50610446604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101b39190613dc5565b34801561045e575f5ffd5b5061016a61046d366004613dd7565b6116ab565b34801561047d575f5ffd5b5061019f7f000000000000000000000000000000000000000000000000000000000000000081565b6104ad610879565b604051632474521560e21b81525f5160206146755f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610504573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105289190613e09565b6105455760405163ebba563b60e01b815260040160405180910390fd5b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea0280546001600160401b03858116600160a01b810267ffffffffffffffff60a01b19909316929092179092557fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea038054848416600160401b81026001600160801b0319909216948716948517919091179091557fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea075460405163f940b37f60e01b81526004810193909352602483019390935260448201525f5160206146155f395f51905f52916001600160a01b03169063f940b37f906064015b5f604051808303815f87803b158015610655575f5ffd5b505af1158015610667573d5f5f3e3d5ffd5b5050505050505050565b610679610879565b604051632474521560e21b81525f5160206146755f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa1580156106d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f49190613e09565b6107115760405163ebba563b60e01b815260040160405180910390fd5b6001600160a01b0381166107385760405163b4fa3fb360e01b815260040160405180910390fd5b5f5160206146155f395f51905f526001838181111561075957610759613e28565b036107ec576007810154600982015460405163de21d2cb60e01b81526001600160a01b039283169263de21d2cb9261079b928892909116908790600401613e4c565b5f604051808303815f87803b1580156107b2575f5ffd5b505af11580156107c4573d5f5f3e3d5ffd5b5050506009820180546001600160a01b0385166001600160a01b031990911617905550505050565b6007810154600282015460405163de21d2cb60e01b81526001600160a01b039283169263de21d2cb92610829928892909116908790600401613e4c565b5f604051808303815f87803b158015610840575f5ffd5b505af1158015610852573d5f5f3e3d5ffd5b505050506002810180546001600160a01b0319166001600160a01b0384161790555b505050565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b6108af610879565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b1580156108ee575f5ffd5b505afa158015610900573d5f5f3e3d5ffd5b5050505061090c611903565b565b610916611962565b61091f82611a06565b6103fd8282611a83565b5f610932611b3f565b505f5160206146355f395f51905f5290565b60405163b7ca418b60e01b81526001600160a01b03808816600483015287917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa1580156109ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d09190613e09565b6109ed576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152889186918316906324d7806c90602401602060405180830381865afa158015610a35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a599190613e09565b610a7657604051632afafb8760e21b815260040160405180910390fd5b610a8d8987610a848c611b88565b8b8b8a8a611bc9565b610a98898989611c2b565b505050505050505050565b60405163b7ca418b60e01b81526001600160a01b03808c1660048301528b917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610b0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2f9190613e09565b610b4c576040516334d0b49960e01b815260040160405180910390fd5b610bbf8b8c6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610b8d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb19190613e77565b8c8c8c8c8c8c8c8c8c611cfb565b610bcd8b8b8b8b8b8b611e46565b5050505050505050505050565b60405163b7ca418b60e01b81526001600160a01b03808716600483015286917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610c42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c669190613e09565b610c83576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152879186918316906324d7806c90602401602060405180830381865afa158015610ccb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cef9190613e09565b610d0c57604051632afafb8760e21b815260040160405180910390fd5b6001600160a01b0388165f9081525f5160206146155f395f51905f5260208190526040909120610d3b90612116565b6001600160a01b0389165f908152602082905260409020600b015460ff166001811115610d6a57610d6a613e28565b886001811115610d7c57610d7c613e28565b03610d9a576040516309e59dbb60e41b815260040160405180910390fd5b610db08988610da88c611b88565b8b8a8a612147565b6003810154600160401b90046001600160401b03165f03610e895760078101546001600160a01b038a81165f9081526020849052604090819020600b01549051635cfd745b60e01b81529190921691635cfd745b91610e1d918d9160ff909116908d904290600401613e8e565b5f604051808303815f87803b158015610e34575f5ffd5b505af1158015610e46573d5f5f3e3d5ffd5b5050506001600160a01b038a165f908152602083905260409020600b0180548a925060ff191660018381811115610e7f57610e7f613e28565b0217905550610a98565b5f886001811115610e9c57610e9c613e28565b03610f3c576003810154610ec090600160401b90046001600160401b031642613edc565b6001600160a01b03808b165f90815260208490526040808220600c0184905560078501549051635cfd745b60e01b8152921692635cfd745b92610f0a928e92600192600401613e8e565b5f604051808303815f87803b158015610f21575f5ffd5b505af1158015610f33573d5f5f3e3d5ffd5b50505050610a98565b6001600160a01b0389165f908152602082905260408120600c810191909155600b01805489919060ff191660018381811115610f7a57610f7a613e28565b02179055506007810154604051635cfd745b60e01b81526001600160a01b0390911690635cfd745b90610fb8908c905f906001904290600401613e8e565b5f604051808303815f87803b158015610fcf575f5ffd5b505af1158015610fe1573d5f5f3e3d5ffd5b50505050505050505050505050565b610ff8610879565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611062573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110869190613e09565b6110a35760405163715cb61d60e11b815260040160405180910390fd5b815181515f5160206146155f395f51905f52919081146110d65760405163512509d360e11b815260040160405180910390fd5b5f5b818110156112cd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b7ca418b86838151811061112157611121613eef565b60200260200101516040518263ffffffff1660e01b815260040161115491906001600160a01b0391909116815260200190565b602060405180830381865afa15801561116f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111939190613e09565b6111b0576040516334d0b49960e01b815260040160405180910390fd5b8381815181106111c2576111c2613eef565b602002602001015160048111156111db576111db613e28565b835f015f8784815181106111f1576111f1613eef565b6020908102919091018101516001600160a01b031682528101919091526040015f20600d015460ff16600481111561122b5761122b613e28565b036112515760405163be307e8960e01b8152600481018290526024015b60405180910390fd5b83818151811061126357611263613eef565b6020026020010151835f015f87848151811061128157611281613eef565b6020908102919091018101516001600160a01b031682528101919091526040015f20600d01805460ff191660018360048111156112c0576112c0613e28565b02179055506001016110d8565b50600782015460405163ae1901f560e01b81526001600160a01b039091169063ae1901f59061063e9087908790600401613f87565b61130a610879565b604051632474521560e21b81525f5160206146755f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611361573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113859190613e09565b6113a25760405163ebba563b60e01b815260040160405180910390fd5b612710816001600160401b031611156113ce5760405163b4fa3fb360e01b815260040160405180910390fd5b5f5f5160206146155f395f51905f526007810154600882015460405163ebc8acff60e01b8152600160a01b9091046001600160401b039081166004830152851660248201529192506001600160a01b03169063ebc8acff906044015f604051808303815f87803b158015611440575f5ffd5b505af1158015611452573d5f5f3e3d5ffd5b5050505060080180546001600160401b0392909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b61148d610879565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b1580156114cc575f5ffd5b505afa1580156114de573d5f5f3e3d5ffd5b5050505061090c61217f565b6114f2610879565b604051632474521560e21b81525f5160206146755f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611549573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156d9190613e09565b61158a5760405163ebba563b60e01b815260040160405180910390fd5b815181515f5160206146155f395f51905f52919081146115bd5760405163512509d360e11b815260040160405180910390fd5b5f5b81811015611676576103e88482815181106115dc576115dc613eef565b602002602001015111156116035760405163bdbcac1760e01b815260040160405180910390fd5b83818151811061161557611615613eef565b6020026020010151836004015f87848151811061163457611634613eef565b6020026020010151600481111561164d5761164d613e28565b600481111561165e5761165e613e28565b815260208101919091526040015f20556001016115bf565b506007820154604051637269bb2960e01b81526001600160a01b0390911690637269bb299061063e9087908790600401613fe4565b60405163b7ca418b60e01b81526001600160a01b03808716600483015286917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611713573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117379190613e09565b611754576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152879186918316906324d7806c90602401602060405180830381865afa15801561179c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c09190613e09565b6117dd57604051632afafb8760e21b815260040160405180910390fd5b6001600160a01b0388165f9081525f5160206146155f395f51905f5260208190526040909120600f0154880361182657604051638df9baad60e01b815260040160405180910390fd5b6127108811156118495760405163b4fa3fb360e01b815260040160405180910390fd5b61185f89886118578c611b88565b8b8a8a6121c7565b60078101546001600160a01b038a81165f8181526020859052604090819020600f01549051637051eeeb60e01b815260048101929092526024820152604481018b9052911690637051eeeb906064015f604051808303815f87803b1580156118c5575f5ffd5b505af11580156118d7573d5f5f3e3d5ffd5b5050506001600160a01b039099165f90815260209190915260409020600f019690965550505050505050565b61190b612201565b5f5160206146555f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119e857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119dc5f5160206146355f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561090c5760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b158015611a69575f5ffd5b505afa158015611a7b573d5f5f3e3d5ffd5b505050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611add575060408051601f3d908101601f19168201909252611ada91810190613e77565b60015b611b0557604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611248565b5f5160206146355f395f51905f528114611b3557604051632a87526960e21b815260048101829052602401611248565b6108748383612230565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461090c5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d006020526040902080546001810190915590565b611c2287877fd3273adabd54a98e671ce86bc2efd441e80ce93d7d355ed37888ad2d9db95730888888604051602001611c0c929190918252602082015260400190565b6040516020818303038152906040528787612285565b50505050505050565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea03546001600160a01b0384165f9081525f5160206146155f395f51905f5260208190526040822090928291611c8c91879087906001600160401b03166122e7565b600785015460405163a853e0db60e01b81529294509092506001600160a01b03169063a853e0db90611cc6908990869086906004016140ba565b5f604051808303815f87803b158015611cdd575f5ffd5b505af1158015611cef573d5f5f3e3d5ffd5b50505050505050505050565b5f611da57f23619bc2acb34ce7935b1e16e77a5d9a5b67cc27d5bbbe57f69c730e193f1bf6468e8e8e8e8e8e8e604051602001611d3c95949392919061415a565b60408051601f1981840301815290829052611d5d95949392916020016141b2565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b60405163a732422d60e01b81529091506001600160a01b038d169063a732422d90611ddc908490899089908990899060040161420a565b602060405180830381865afa158015611df7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1b9190613e09565b611e385760405163274cf40160e01b815260040160405180910390fd5b505050505050505050505050565b6001600160a01b038681165f9081525f5160206146155f395f51905f526020819052604090912090918316611e8e57604051638864e6d560e01b815260040160405180910390fd5b6001861115611ed257611ed28787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061251d92505050565b611edb88612632565b60028201545f90611efc90600160a01b90046001600160401b0316426142c5565b9050611f0b8989898989612720565b60405180608001604052808989808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050509082525060408051602089810282810182019093528982529283019290918a918a9182918501908490808284375f920191909152505050908252506001600160a01b0386166020808301919091526001600160601b038416604090920191909152815180516008860192611fbf9284929101906135ef565b506020828101518051611fd8926001850192019061364e565b506040828101516060909301516001600160601b0316600160a01b026001600160a01b03938416176002909201919091556007850154905163d0a8fea560e01b815291169063d0a8fea59061203d908c908c908c908c908c908c908a906004016142e4565b5f604051808303815f87803b158015612054575f5ffd5b505af1158015612066573d5f5f3e3d5ffd5b5050505061209b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea01546001600160a01b031690565b604051630d3b088560e31b81526001600160a01b038b8116600483015291909116906369d84428906024015f6040518083038186803b1580156120dc575f5ffd5b505afa1580156120ee573d5f5f3e3d5ffd5b505050506002830154600160a01b90046001600160401b03165f03610a9857610a988961281c565b600c8101541580159061212c575080600c015442115b1561214457600b8101805460ff191690555f600c8201555b50565b611a7b86867f8f6072ce586dd365229164bcf5b37240bd637e96cc327d5228435df9b531e5cf8787604051602001611c0c9190614349565b612187612b43565b5f5160206146555f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611944565b611a7b86867ff368485550cb71952bbb2db14c6ebcbcf1890198f28ebfe08a08e9958e6357768787604051602001611c0c91815260200190565b5f5160206146555f395f51905f525460ff1661090c57604051638dfc202b60e01b815260040160405180910390fd5b61223982612b73565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561227d576108748282612bd6565b6103fd612c4a565b5f6122a286468a8888604051602001611d5d9594939291906141b2565b90506106678784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869493925050612c699050565b6122ef613687565b6122f7613687565b84848082111561231a5760405163e2ed77a160e01b815260040160405180910390fd5b61232388612d42565b6040805161016081018252895480825260018b0154602083015260028b01549282019290925260038a0154606082015260048a0154608082015260058a015460a082015260068a01546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078a0154610140820152908810156123f957600489018890556123cc864261435c565b8960060160106101000a8154816001600160401b0302191690836001600160401b03160217905550612419565b8789555f60048a015560068901805467ffffffffffffffff60801b191690555b88600101548710156124635760058901879055612436864261435c565b8960060160186101000a8154816001600160401b0302191690836001600160401b03160217905550612482565b600189018790555f60058a01556006890180546001600160c01b031690555b60408051610160810182528a54815260018b0154602082015260028b01549181019190915260038a0154606082015260048a0154608082015260058a015460a082015260068a01546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b909104166101208201526007909901546101408a0152989650505050505050565b80516001811161252b575050565b5f816001600160401b03811115612544576125446137ee565b60405190808252806020026020018201604052801561256d578160200160208202803683370190505b5090505f5b8281101561262c575f84828151811061258d5761258d613eef565b602002602001015190505f5f90505b828110156125f7578381815181106125b6576125b6613eef565b60200260200101516001600160a01b0316826001600160a01b0316036125ef57604051630e3e200f60e41b815260040160405180910390fd5b60010161259c565b508083838151811061260b5761260b613eef565b6001600160a01b039092166020928302919091019091015250600101612572565b50505050565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea07546001600160a01b038281165f9081525f5160206146155f395f51905f526020526040902060088101549190921691901561087457600a810154604051632b3b959160e01b81526001600160a01b0384811692632b3b9591926126c8928892600888019260098901929091169060040161437b565b5f604051808303815f87803b1580156126df575f5ffd5b505af11580156126f1573d5f5f3e3d5ffd5b5050506008820190505f61270582826136fa565b612712600183015f6136fa565b505f60029190910155505050565b828181146127415760405163512509d360e11b815260040160405180910390fd5b5f5b81811015611c225783838281811061275d5761275d613eef565b9050602002013586868381811061277657612776613eef565b905060200201602081019061278b91906137d5565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401602060405180830381865afa1580156127d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f59190613e77565b101561281457604051631e9acf1760e31b815260040160405180910390fd5b600101612743565b6001600160a01b0381165f9081525f5160206146155f395f51905f5260205260409020600a81015442600160a01b9091046001600160601b031611156128755760405163271c87d960e01b815260040160405180910390fd5b600a81015460088201546001600160a01b03909116905f816001600160401b038111156128a4576128a46137ee565b6040519080825280602002602001820160405280156128cd578160200160208202803683370190505b5090505f826001600160401b038111156128e9576128e96137ee565b60405190808252806020026020018201604052801561291c57816020015b60608152602001906001900390816129075790505b5090505f5b83811015612a23576008860180548290811061293f5761293f613eef565b905f5260205f20015f9054906101000a90046001600160a01b031683828151811061296c5761296c613eef565b6001600160a01b039092166020928302919091019091015260098601805463a9059cbb60e01b918791849081106129a5576129a5613eef565b5f918252602090912001546040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050828281518110612a1057612a10613eef565b6020908102919091010152600101612921565b507fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea07546040516371aa1e0f60e01b81526001600160a01b03909116906371aa1e0f90612a7f90899060088a019060098b01908a9060040161437b565b5f604051808303815f87803b158015612a96575f5ffd5b505af1158015612aa8573d5f5f3e3d5ffd5b5050506008860190505f612abc82826136fa565b612ac9600183015f6136fa565b505f600291909101556001600160a01b03861663bcde317c83856001600160401b03811115612afa57612afa6137ee565b604051908082528060200260200182016040528015612b23578160200160208202803683370190505b50846040518463ffffffff1660e01b8152600401611cc693929190614427565b5f5160206146555f395f51905f525460ff161561090c5760405163d93c066560e01b815260040160405180910390fd5b806001600160a01b03163b5f03612ba857604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611248565b5f5160206146355f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612bf291906144b1565b5f60405180830381855af49150503d805f8114612c2a576040519150601f19603f3d011682016040523d82523d5f602084013e612c2f565b606091505b5091509150612c3f858383612e91565b925050505b92915050565b341561090c5760405163b398979f60e01b815260040160405180910390fd5b813b15612d0757604051630b135d3f60e11b808252906001600160a01b03841690631626ba7e90612ca090879086906004016144bc565b602060405180830381865afa158015612cbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf91906144d4565b6001600160e01b0319161461087457604051636bda3fcd60e01b815260040160405180910390fd5b816001600160a01b0316612d1b8483612ef0565b6001600160a01b03161461087457604051632057875960e21b815260040160405180910390fd5b604080516101608101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a082015260068201546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078201546101408201525f90612ddc90612f18565b805183556020810151600184015560408101516002840155606081015160038401556080810151600484015560a0810151600584015560c08101516006909301805460e0830151610100840151610120909401516001600160401b03908116600160c01b026001600160c01b03958216600160801b02959095166fffffffffffffffffffffffffffffffff928216600160401b026001600160801b031990941691909716179190911716939093171790915550565b606082612ea657612ea18261302b565b612ee9565b8151158015612ebd57506001600160a01b0384163b155b15612ee657604051639996b31560e01b81526001600160a01b0385166004820152602401611248565b50805b9392505050565b5f5f5f5f612efe8686613054565b925092509250612f0e828261309d565b5090949350505050565b612f20613687565b6101008201516001600160401b031615801590612f4a57508161010001516001600160401b031642115b15612f635760808201805183525f908190526101008301525b6101208201516001600160401b031615801590612f8d57508161012001516001600160401b031642115b15612fa95760a08201805160208401525f908190526101208301525b8160c001516001600160401b0316421115612fe8575f604083015260c0820151610140830151612fd99190613155565b6001600160401b031660c08301525b8160e001516001600160401b0316421115613027575f606083015260e08201516101408301516130189190613183565b6001600160401b031660e08301525b5090565b80511561303b5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5f5f835160410361308b576020840151604085015160608601515f1a61307d888285856131b1565b955095509550505050613096565b505081515f91506002905b9250925092565b5f8260038111156130b0576130b0613e28565b036130b9575050565b60018260038111156130cd576130cd613e28565b036130eb5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156130ff576130ff613e28565b036131205760405163fce698f760e01b815260048101829052602401611248565b600382600381111561313457613134613e28565b036103fd576040516335e2f38360e21b815260048101829052602401611248565b5f5b61316a6001600160401b03841683613279565b9250826001600160401b03164211613157575090919050565b5f5b6131986001600160401b038416836132c6565b9250826001600160401b03164211613185575090919050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156131ea57505f9150600390508261326f565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561323b573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661326657505f92506001915082905061326f565b92505f91508190505b9450945094915050565b5f8061328583856144fb565b90505f6132956201518083614536565b90505f6132a3826001613edc565b6132b09062015180614562565b90506132bc8582614579565b9695505050505050565b5f806132d283856144fb565b90505f806132eb6132e6620151808561459f565b61334b565b5090925090506132fc6001826145b2565b9050600c8160ff16111561331a5750600161331781836145cb565b91505b5f613327838360016134b9565b6133349062015180614562565b90506133408682614579565b979650505050505050565b5f8080838161335d8262010bd96144fb565b61336a9062253d8c6144fb565b90505f62023ab161337c8360046145e5565b6133869190614536565b905060046133978262023ab16145e5565b6133a29060036144fb565b6133ac9190614536565b6133b69083614579565b91505f62164b096133c88460016144fb565b6133d490610fa06145e5565b6133de9190614536565b905060046133ee826105b56145e5565b6133f89190614536565b6134029084614579565b61340d90601f6144fb565b92505f61098f61341e8560506145e5565b6134289190614536565b90505f60506134398361098f6145e5565b6134439190614536565b61344d9086614579565b905061345a600b83614536565b945061346785600c6145e5565b6134728360026144fb565b61347c9190614579565b9150848361348b603187614579565b6134969060646145e5565b6134a091906144fb565b6134aa91906144fb565b9a919950975095505050505050565b5f61ffff841660ff8085169084168362253d8c60046064600c6134dd600e88614579565b6134e79190614536565b6134f3886113246144fb565b6134fd91906144fb565b6135079190614536565b6135129060036145e5565b61351c9190614536565b600c8061352a600e88614579565b6135349190614536565b61353f90600c6145e5565b61354a600288614579565b6135549190614579565b6135609061016f6145e5565b61356a9190614536565b6004600c613579600e89614579565b6135839190614536565b61358f896112c06144fb565b61359991906144fb565b6135a5906105b56145e5565b6135af9190614536565b6135bb617d4b87614579565b6135c591906144fb565b6135cf91906144fb565b6135d99190614579565b6135e39190614579565b98975050505050505050565b828054828255905f5260205f20908101928215613642579160200282015b8281111561364257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061360d565b50613027929150613711565b828054828255905f5260205f20908101928215613642579160200282015b8281111561364257825182559160200191906001019061366c565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81525090565b5080545f8255905f5260205f209081019061214491905b5b80821115613027575f8155600101613712565b80356001600160401b038116811461373b575f5ffd5b919050565b5f5f5f60608486031215613752575f5ffd5b61375b84613725565b925061376960208501613725565b915061377760408501613725565b90509250925092565b60028110612144575f5ffd5b80356001600160a01b038116811461373b575f5ffd5b5f5f604083850312156137b3575f5ffd5b82356137be81613780565b91506137cc6020840161378c565b90509250929050565b5f602082840312156137e5575f5ffd5b612ee98261378c565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561382a5761382a6137ee565b604052919050565b5f5f60408385031215613843575f5ffd5b61384c8361378c565b915060208301356001600160401b03811115613866575f5ffd5b8301601f81018513613876575f5ffd5b80356001600160401b0381111561388f5761388f6137ee565b6138a2601f8201601f1916602001613802565b8181528660208385010111156138b6575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f8401126138e5575f5ffd5b5081356001600160401b038111156138fb575f5ffd5b602083019150836020828501011115613912575f5ffd5b9250929050565b5f5f5f5f5f5f60a0878903121561392e575f5ffd5b6139378761378c565b955060208701359450604087013593506139536060880161378c565b925060808701356001600160401b0381111561396d575f5ffd5b61397989828a016138d5565b979a9699509497509295939492505050565b5f5f83601f84011261399b575f5ffd5b5081356001600160401b038111156139b1575f5ffd5b6020830191508360208260051b8501011115613912575f5ffd5b5f5f5f5f5f5f5f5f5f5f60c08b8d0312156139e4575f5ffd5b6139ed8b61378c565b995060208b01356001600160401b03811115613a07575f5ffd5b613a138d828e0161398b565b909a5098505060408b01356001600160401b03811115613a31575f5ffd5b613a3d8d828e0161398b565b9098509650613a50905060608c0161378c565b945060808b01356001600160401b03811115613a6a575f5ffd5b613a768d828e0161398b565b90955093505060a08b01356001600160401b03811115613a94575f5ffd5b613aa08d828e0161398b565b915080935050809150509295989b9194979a5092959850565b5f5f5f5f5f60808688031215613acd575f5ffd5b613ad68661378c565b94506020860135613ae681613780565b9350613af46040870161378c565b925060608601356001600160401b03811115613b0e575f5ffd5b613b1a888289016138d5565b969995985093965092949392505050565b5f6001600160401b03821115613b4357613b436137ee565b5060051b60200190565b5f82601f830112613b5c575f5ffd5b8135613b6f613b6a82613b2b565b613802565b8082825260208201915060208360051b860101925085831115613b90575f5ffd5b602085015b83811015613bb957803560058110613bab575f5ffd5b835260209283019201613b95565b5095945050505050565b5f5f60408385031215613bd4575f5ffd5b82356001600160401b03811115613be9575f5ffd5b8301601f81018513613bf9575f5ffd5b8035613c07613b6a82613b2b565b8082825260208201915060208360051b850101925087831115613c28575f5ffd5b6020840193505b82841015613c5157613c408461378c565b825260209384019390910190613c2f565b945050505060208301356001600160401b03811115613c6e575f5ffd5b613c7a85828601613b4d565b9150509250929050565b5f60208284031215613c94575f5ffd5b612ee982613725565b5f5f60408385031215613cae575f5ffd5b82356001600160401b03811115613cc3575f5ffd5b613ccf85828601613b4d565b92505060208301356001600160401b03811115613cea575f5ffd5b8301601f81018513613cfa575f5ffd5b8035613d08613b6a82613b2b565b8082825260208201915060208360051b850101925087831115613d29575f5ffd5b6020840193505b82841015613d4b578335825260209384019390910190613d30565b809450505050509250929050565b5f5f60208385031215613d6a575f5ffd5b82356001600160401b03811115613d7f575f5ffd5b613d8b858286016138d5565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612ee96020830184613d97565b5f5f5f5f5f60808688031215613deb575f5ffd5b613df48661378c565b945060208601359350613af46040870161378c565b5f60208284031215613e19575f5ffd5b81518015158114612ee9575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b6002811061214457612144613e28565b60608101613e5985613e3c565b9381526001600160a01b039283166020820152911660409091015290565b5f60208284031215613e87575f5ffd5b5051919050565b6001600160a01b038516815260808101613ea785613e3c565b846020830152613eb684613e3c565b60408201939093526060015292915050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115612c4457612c44613ec8565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b82811015613f3c5781516001600160a01b0316865260209586019590910190600101613f15565b5093949350505050565b5f8151808452602084019350602083015f5b82811015613f3c57815160058110613f7257613f72613e28565b86526020958601959190910190600101613f58565b604081525f613f996040830185613f03565b8281036020840152613fab8185613f46565b95945050505050565b5f8151808452602084019350602083015f5b82811015613f3c578151865260209586019590910190600101613fc6565b604081525f613ff66040830185613f46565b8281036020840152613fab8185613fb4565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015161405860c08401826001600160401b03169052565b5060e081015161407360e08401826001600160401b03169052565b506101008101516140906101008401826001600160401b03169052565b506101208101516140ad6101208401826001600160401b03169052565b5061014090810151910152565b6001600160a01b03841681526102e081016140d86020830185614008565b6140e6610180830184614008565b949350505050565b8183526020830192505f815f5b84811015613f3c576001600160a01b036141148361378c565b16865260209586019591909101906001016140fb565b8183525f6001600160fb1b03831115614141575f5ffd5b8260051b80836020870137939093016020019392505050565b606081525f61416d6060830187896140ee565b828103602084015261418081868861412a565b91505060018060a01b03831660408301529695505050505050565b5f81518060208401855e5f93019283525090919050565b8581528460208201526001600160601b03198460601b1660408201528260548201525f613340607483018461419b565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b858152606060208201525f6142236060830186886140ee565b8281036040840152838152602080820190600586901b830101865f36829003601e19015b888210156142b457858403601f190185528235818112614265575f5ffd5b8a016020810190356001600160401b03811115614280575f5ffd5b80360382131561428e575f5ffd5b6142998682846141e2565b95505050602083019250602085019450600182019150614247565b50919b9a5050505050505050505050565b6001600160601b038181168382160190811115612c4457612c44613ec8565b6001600160a01b038816815260a0602082018190525f90614308908301888a6140ee565b828103604084015261431b81878961412a565b6001600160a01b0395909516606084015250506001600160601b039190911660809091015295945050505050565b6020810161435683613e3c565b91905290565b6001600160401b038181168382160190811115612c4457612c44613ec8565b6001600160a01b03851681526080602080830182905285549183018290525f868152908120909160a0840190835b818110156143d05783546001600160a01b03168352600193840193602090930192016143a9565b5050838103604085015285548082525f87815260208082209301935090815b8181101561440d5783548552602090940193600193840193016143ef565b5050506001600160a01b0385166060850152509050613fab565b606081525f6144396060830186613f03565b828103602084015261444b8186613fb4565b9050828103604084015280845180835260208301915060208160051b840101602087015f5b838110156144a257601f1986840301855261448c838351613d97565b6020958601959093509190910190600101614470565b50909998505050505050505050565b5f612ee9828461419b565b828152604060208201525f6140e66040830184613d97565b5f602082840312156144e4575f5ffd5b81516001600160e01b031981168114612ee9575f5ffd5b8082018281125f83128015821682158216171561451a5761451a613ec8565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261454457614544614522565b600160ff1b82145f198414161561455d5761455d613ec8565b500590565b8082028115828204841417612c4457612c44613ec8565b8181035f83128015838313168383128216171561459857614598613ec8565b5092915050565b5f826145ad576145ad614522565b500490565b60ff8181168382160190811115612c4457612c44613ec8565b61ffff8181168382160190811115612c4457612c44613ec8565b8082025f8212600160ff1b8414161561460057614600613ec8565b8181058314821517612c4457612c44613ec856fee000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d5a164736f6c634300081c000a0000000000000000000000004a9c44c97bbf6079db37c4769aebe425bbcdd09a