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)
getCashEventEmitter
viewfunction getCashEventEmitter() view returns (address)
getCashModuleSetters
viewfunction getCashModuleSetters() view returns (address)
getData
viewfunction getData(address safe) view returns (tuple)
getDebtManager
viewfunction getDebtManager() view returns (address)
getDelays
viewfunction getDelays() view returns (uint64, uint64, uint64)
getMode
viewfunction getMode(address safe) view returns (uint8)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
getPendingCashback
viewfunction getPendingCashback(address account) view returns (uint256)
getPendingWithdrawalAmount
viewfunction getPendingWithdrawalAmount(address safe, address token) view returns (uint256)
getReferrerCashbackPercentage
viewfunction getReferrerCashbackPercentage() view returns (uint64)
getSafeCashbackPercentageAndSplit
viewfunction getSafeCashbackPercentageAndSplit(address safe) view returns (uint256, uint256)
getSafeTier
viewfunction getSafeTier(address safe) view returns (uint8)
getSettlementDispatcher
viewfunction getSettlementDispatcher(uint8 binSponsor) view returns (address settlementDispatcher)
getTierCashbackPercentage
viewfunction getTierCashbackPercentage(uint8 tier) view returns (uint256)
getWhitelistedWithdrawAssets
viewfunction getWhitelistedWithdrawAssets() view returns (address[])
HUNDRED_PERCENT_IN_BPS
viewfunction HUNDRED_PERCENT_IN_BPS() view returns (uint256)
incomingCreditModeStartTime
viewfunction incomingCreditModeStartTime(address safe) view returns (uint256)
isWhitelistedWithdrawAsset
viewfunction isWhitelistedWithdrawAsset(address asset) view returns (bool)
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)
transactionCleared
viewfunction transactionCleared(address safe, bytes32 txId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
clearPendingCashback
nonpayablefunction clearPendingCashback(address[] users)
initialize
nonpayablefunction initialize(address _roleRegistry, address _debtManager, address _settlementDispatcherReap, address _settlementDispatcherRain, address _cashbackDispatcher, address _cashEventEmitter, address _cashModuleSetters)
pause
nonpayablefunction pause()
postLiquidate
nonpayablefunction postLiquidate(address safe, address liquidator, tuple[] tokensToSend)
preLiquidate
nonpayablefunction preLiquidate(address safe)
processWithdrawal
nonpayablefunction processWithdrawal(address safe)
repay
nonpayablefunction repay(address safe, address token, uint256 amountInUsd)
setCashModuleSettersAddress
nonpayablefunction setCashModuleSettersAddress(address newCashModuleSetters)
setupModule
nonpayablefunction setupModule(bytes data)
spend
nonpayablefunction spend(address safe, address spender, address referrer, bytes32 txId, uint8 binSponsor, address[] tokens, uint256[] amountsInUsd, bool shouldReceiveCashback)
unpause
nonpayablefunction unpause()
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()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExceededDailySpendingLimit
error ExceededDailySpendingLimit()
ExceededMonthlySpendingLimit
error ExceededMonthlySpendingLimit()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidTimezoneOffset
error InvalidTimezoneOffset()
InvalidWithdrawAsset
error InvalidWithdrawAsset(address asset)
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
0x60c060405230608052348015610013575f5ffd5b50604051615f71380380615f7183398101604081905261003291610130565b80806001600160a01b03811661005b5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b031660a05261006f61007e565b5061007861007e565b5061015d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ce5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461012d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610140575f5ffd5b81516001600160a01b0381168114610156575f5ffd5b9392505050565b60805160a051615da66101cb5f395f81816107f501528181610c2801528181610dfb01528181611341015281816115db015281816118a00152818161196c01528181611c4501528181611e8901526120c101525f81816135e80152818161361101526137ca0152615da65ff3fe60806040526004361061023a575f3560e01c806373676b6f1161012d5780639f424602116100aa578063c8d31d061161006e578063c8d31d0614610753578063ce2b894c14610772578063d69fd605146107a6578063e5a53ea7146107c5578063f9fba81b146107e45761023a565b80639f424602146106975780639fc86239146106ac578063ac4b21ee146106d8578063ad3cb1cc146106f7578063af2ea953146107345761023a565b806386e93728116100f157806386e93728146105fa5780638caf758f14610619578063909030d51461064557806391f4d6a5146106645780639b2ddc65146106835761023a565b806373676b6f1461055f5780637f12dc601461058b5780638322fff2146105a05780638456cb59146105c7578063867c89ee146105db5761023a565b80633c1a5012116101bb57806352d1902d1161017f57806352d1902d146104a957806357a2219c146104bd5780635ba3b816146104d15780635c975abb146104f25780636bc07b2b146105215761023a565b80633c1a5012146104115780633f4ba83a1461043057806341d88bd3146104445780634f1ef286146104775780634f25dbcf1461048a5761023a565b80632d0335ab116102025780632d0335ab146103135780632d81b95c146103745780633511b2f2146103a757806335876476146103c657806338266b22146103e55761023a565b806308c73259146102715780630a994e0e146102a25780630bd735b7146102c15780631da649cf146102e05780632691f9ea146102ff575b348015610245575f5ffd5b505f61024f610817565b9050365f5f375f5f365f845af43d5f5f3e80801561026b573d5ff35b3d5ffd5b005b34801561027c575f5ffd5b50610285610832565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ad575f5ffd5b5061026f6102bc366004614fee565b610860565b3480156102cc575f5ffd5b5061026f6102db366004615075565b6108a5565b3480156102eb575f5ffd5b5061026f6102fa36600461517d565b610b44565b34801561030a575f5ffd5b50610285610cfc565b34801561031e575f5ffd5b5061036661032d366004614fee565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b604051908152602001610299565b34801561037f575f5ffd5b506103667f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206781565b3480156103b2575f5ffd5b5061026f6103c136600461521d565b610d17565b3480156103d1575f5ffd5b5061026f6103e03660046152ee565b610fa4565b3480156103f0575f5ffd5b506104046103ff366004614fee565b611318565b604051610299919061548d565b34801561041c575f5ffd5b5061026f61042b366004614fee565b6115ba565b34801561043b575f5ffd5b5061026f611680565b34801561044f575f5ffd5b506103667fa680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d581565b61026f610485366004615588565b6116e7565b348015610495575f5ffd5b506103666104a436600461562d565b611702565b3480156104b4575f5ffd5b50610366611747565b3480156104c8575f5ffd5b50610285610817565b3480156104dc575f5ffd5b506104e5611762565b6040516102999190615684565b3480156104fd575f5ffd5b505f516020615d7a5f395f51905f525460ff165b6040519015158152602001610299565b34801561052c575f5ffd5b5061053561177c565b604080516001600160401b0394851681529284166020840152921691810191909152606001610299565b34801561056a575f5ffd5b506105736117bc565b6040516001600160401b039091168152602001610299565b348015610596575f5ffd5b5061036661271081565b3480156105ab575f5ffd5b5061028573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156105d2575f5ffd5b5061026f6117de565b3480156105e6575f5ffd5b506103666105f5366004614fee565b611843565b348015610605575f5ffd5b50610511610614366004614fee565b61186d565b348015610624575f5ffd5b50610638610633366004614fee565b61187d565b6040516102999190615696565b348015610650575f5ffd5b5061026f61065f3660046156b0565b611954565b34801561066f575f5ffd5b5061028561067e36600461571c565b611a54565b34801561068e575f5ffd5b50610285611ace565b3480156106a2575f5ffd5b506103666103e881565b3480156106b7575f5ffd5b506106cb6106c6366004614fee565b611ad7565b6040516102999190615735565b3480156106e3575f5ffd5b506103666106f2366004614fee565b611b2c565b348015610702575f5ffd5b50610727604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102999190615770565b34801561073f575f5ffd5b5061026f61074e366004615782565b611b56565b34801561075e575f5ffd5b5061036661076d3660046157c0565b611c22565b34801561077d575f5ffd5b5061079161078c366004614fee565b611e64565b60408051928352602083019190915201610299565b3480156107b1575f5ffd5b5061026f6107c0366004614fee565b611f97565b3480156107d0575f5ffd5b506105116107df3660046157f7565b61209e565b3480156107ef575f5ffd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b5f61082061217e565b600801546001600160a01b0316919050565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b610868611ace565b6001600160a01b0316336001600160a01b0316146108995760405163647018d360e11b815260040160405180910390fd5b6108a2816121a2565b50565b6108ad611ace565b6001600160a01b0316336001600160a01b0316146108de5760405163647018d360e11b815260040160405180910390fd5b80515f816001600160401b038111156108f9576108f9615009565b604051908082528060200260200182016040528015610922578160200160208202803683370190505b5090505f826001600160401b0381111561093e5761093e615009565b60405190808252806020026020018201604052801561097157816020015b606081526020019060019003908161095c5790505b5090505f805b84811015610a96575f86828151811061099257610992615821565b6020026020010151602001511115610a8e578581815181106109b6576109b6615821565b60200260200101515f01518483815181106109d3576109d3615821565b60200260200101906001600160a01b031690816001600160a01b03168152505063a9059cbb60e01b87878381518110610a0e57610a0e615821565b60209081029190910181015101516040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050838381518110610a7c57610a7c615821565b60200260200101819052508160010191505b600101610977565b50808352808252866001600160a01b031663bcde317c84836001600160401b03811115610ac557610ac5615009565b604051908082528060200260200182016040528015610aee578160200160208202803683370190505b50856040518463ffffffff1660e01b8152600401610b0e93929190615835565b5f604051808303815f87803b158015610b25575f5ffd5b505af1158015610b37573d5f5f3e3d5ffd5b5050505050505050505050565b610b4c612280565b610b546122b0565b610b5c610832565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610bc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bea91906158bf565b610c075760405163715cb61d60e11b815260040160405180910390fd5b60405163b7ca418b60e01b81526001600160a01b03808516600483015284917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610c6f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9391906158bf565b610cb0576040516334d0b49960e01b815260040160405180910390fd5b5f610cb9611ace565b9050610cc5818561231d565b610ce15760405162da3d4760e31b815260040160405180910390fd5b610ced8582868661238f565b5050610cf7612749565b505050565b5f610d0561217e565b600701546001600160a01b0316919050565b610d1f612280565b610d276122b0565b610d2f610832565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610d99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dbd91906158bf565b610dda5760405163715cb61d60e11b815260040160405180910390fd5b60405163b7ca418b60e01b81526001600160a01b03808c1660048301528b917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610e42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6691906158bf565b610e83576040516334d0b49960e01b815260040160405180910390fd5b5f610e8c61217e565b6001600160a01b038d165f90815260208290526040812091925090610eb7908e8e8d8c8c8c8c612773565b90505f6001600160a01b038e165f908152602084905260409020600b015460ff166001811115610ee957610ee961545c565b03610f7957610f74828e8c8f8f8e8e8e808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508d8d808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508c92508f91506129029050565b610f8d565b610f8d828e8c8f8f8e8e8e8e8e8b8f612d5b565b505050610f98612749565b50505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610fe85750825b90505f826001600160401b031660011480156110035750303b155b905081158015611011575080155b1561102f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561105957845460ff60401b1916600160401b1785555b6110628c613125565b5f61106b61217e565b90508b816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505f6001600160a01b03168b6001600160a01b031614806110bc57506001600160a01b038a16155b806110ce57506001600160a01b038916155b806110e057506001600160a01b038816155b156110fe5760405163b4fa3fb360e01b815260040160405180910390fd5b6002810180546009830180546001600160a01b038e81166001600160a01b0319928316179092556006850180548e84169083161790556007850180548d84169083161790556001600160e01b0319909216818f1617600160a01b1790925560038301805468010000000000000e106001600160801b0319909116179055600883018054928a169290911691909117905560c8600482015f8060048111156111a7576111a761545c565b81526020019081526020015f208190555061012c816004015f600160048111156111d3576111d361545c565b60048111156111e4576111e461545c565b81526020019081526020015f2081905550610190816004015f600260048111156112105761121061545c565b60048111156112215761122161545c565b81526020019081526020015f2081905550610190816004015f6003600481111561124d5761124d61545c565b600481111561125e5761125e61545c565b81526020019081526020015f208190555060c8816004015f6004808111156112885761128861545c565b60048111156112995761129961545c565b815260208101919091526040015f2055600801805467ffffffffffffffff60a01b1916601960a21b179055831561130a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b611320614ecd565b60405163b7ca418b60e01b81526001600160a01b03808416600483015283917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611388573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ac91906158bf565b6113c9576040516334d0b49960e01b815260040160405180910390fd5b5f6113d261217e565b6001600160a01b0385165f90815260209182526040808220815161020081018352815460a0808301918252600184015460c0840152600284015460e084015260038401546101008401526004840154610120840152600584015461014084015260068401546001600160401b03808216610160860152600160401b82048116610180860152600160801b820481166101a0860152600160c01b909104166101c084015260078401546101e084015290825283516008840180548089028301840190965260808201868152949850959692959286019490938492909184918401828280156114e657602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116114c8575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561153c57602002820191905f5260205f20905b815481526020019060010190808311611528575b5050509183525050600291909101546001600160a01b038116602080840191909152600160a01b9091046001600160601b0316604090920191909152908252600b85015491019060ff1660018111156115975761159761545c565b8152600c8401546020820152601090930154604090930192909252509392505050565b60405163b7ca418b60e01b81526001600160a01b03808316600483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611622573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164691906158bf565b611663576040516334d0b49960e01b815260040160405180910390fd5b61166b6122b0565b61167482613177565b61167c612749565b5050565b611688610832565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b1580156116c7575f5ffd5b505afa1580156116d9573d5f5f3e3d5ffd5b505050506116e561357e565b565b6116ef6135dd565b6116f882613681565b61167c82826136fe565b5f61170b61217e565b6004015f8360048111156117215761172161545c565b60048111156117325761173261545c565b81526020019081526020015f20549050919050565b5f6117506137bf565b505f516020615d5a5f395f51905f5290565b606061177761176f61217e565b600a01613808565b905090565b5f5f5f5f61178861217e565b6002810154600390910154600160a01b9091046001600160401b03908116968183169650600160401b909204169350915050565b5f6117c561217e565b60080154600160a01b90046001600160401b0316919050565b6117e6610832565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b158015611825575f5ffd5b505afa158015611837573d5f5f3e3d5ffd5b505050506116e56138dc565b5f61184c61217e565b6001600160a01b039092165f90815260059290920160205250604090205490565b5f61187782613924565b92915050565b60405163b7ca418b60e01b81526001600160a01b0380831660048301525f9183917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa1580156118e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190991906158bf565b611926576040516334d0b49960e01b815260040160405180910390fd5b61192e61217e565b6001600160a01b03939093165f908152602093909352505060409020600d015460ff1690565b60405163b7ca418b60e01b81523360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b7ca418b90602401602060405180830381865afa1580156119b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119dd91906158bf565b6119fa576040516334d0b49960e01b815260040160405180910390fd5b5f8080611a09858701876158da565b9250925092505f611a1861217e565b335f908152602091909152604090209050611a358185858561393a565b50600b8101805460ff191660011790555f600f90910155505050505050565b5f6001826001811115611a6957611a6961545c565b03611a8a57611a7661217e565b600901546001600160a01b03169050611aa2565b611a9261217e565b600201546001600160a01b031690505b6001600160a01b038116611ac957604051633bb72dd760e11b815260040160405180910390fd5b919050565b5f611777613aaa565b5f5f611ae161217e565b6001600160a01b0384165f90815260209190915260409020600c81015490915015801590611b12575080600c015442115b15611b1f57505f92915050565b600b015460ff1692915050565b5f611b3561217e565b6001600160a01b039092165f9081526020929092525060409020600c015490565b611b5e6122b0565b611b66612280565b805f819003611b885760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b81811015611c18575f848483818110611ba557611ba5615821565b9050602002016020810190611bba9190614fee565b6001600160a01b031603611be15760405163b4fa3fb360e01b815260040160405180910390fd5b611c10848483818110611bf657611bf6615821565b9050602002016020810190611c0b9190614fee565b613ac5565b600101611b8a565b505061167c612749565b60405163b7ca418b60e01b81526001600160a01b0380841660048301525f9184917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015611c8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cae91906158bf565b611ccb576040516334d0b49960e01b815260040160405180910390fd5b5f611cd461217e565b6001600160a01b0386165f908152602091825260409081902081516008909101805460a0948102830185019093526080820183815291939092849291849190840182828015611d4a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611d2c575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611da057602002820191905f5260205f20905b815481526020019060010190808311611d8c575b5050509183525050600291909101546001600160a01b0381166020830152600160a01b90046001600160601b0316604090910152805151909150805f5b82811015611e2a57866001600160a01b0316845f01518281518110611e0457611e04615821565b60200260200101516001600160a01b031603611e2257809150611e2a565b600101611ddd565b50818103611e38575f611e57565b82602001518181518110611e4e57611e4e615821565b60200260200101515b94505050505b5092915050565b60405163b7ca418b60e01b81526001600160a01b0382811660048301525f91829184917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611ed0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef491906158bf565b611f11576040516334d0b49960e01b815260040160405180910390fd5b5f611f1a61217e565b6001600160a01b0386165f908152602082905260408120600d015491925060048084019260ff1690811115611f5157611f5161545c565b6004811115611f6257611f6261545c565b815260208082019290925260409081015f908120546001600160a01b03989098168152929091529020600f0154939492505050565b611f9f610832565b604051632474521560e21b81527fa680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d560048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015612009573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202d91906158bf565b61204a5760405163ebba563b60e01b815260040160405180910390fd5b6001600160a01b0381166120715760405163b4fa3fb360e01b815260040160405180910390fd5b8061207a61217e565b60080180546001600160a01b0319166001600160a01b039290921691909117905550565b60405163b7ca418b60e01b81526001600160a01b0380841660048301525f9184917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015612106573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212a91906158bf565b612147576040516334d0b49960e01b815260040160405180910390fd5b61214f61217e565b6001600160a01b0385165f90815260209182526040808220868352600e01909252205460ff1691505092915050565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea0090565b5f6121ab61217e565b600701546001600160a01b031690505f6121c361217e565b6001600160a01b0384165f90815260209190915260409020600881015490915015610cf757600a810154604051632b3b959160e01b81526001600160a01b0384811692632b3b9591926122289288926008880192600989019290911690600401615903565b5f604051808303815f87803b15801561223f575f5ffd5b505af1158015612251573d5f5f3e3d5ffd5b5050506008820190505f6122658282614f38565b612272600183015f614f38565b505f60029190910155505050565b5f516020615d7a5f395f51905f525460ff16156116e55760405163d93c066560e01b815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c156122f057604051633ee5aeb560e01b815260040160405180910390fd5b6116e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90613c16565b60405163497883cd60e11b81526001600160a01b0382811660048301525f91908416906392f1079a90602401602060405180830381865afa158015612364573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238891906158bf565b9392505050565b60405162afe6ab60e81b81526001600160a01b038381166004830152602482018390525f919085169063afe6ab0090604401602060405180830381865afa1580156123dc573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240091906159b3565b9050805f03612422576040516365e52d5160e11b815260040160405180910390fd5b61242d858483613c1d565b604080516003808252608082019092525f91602082016060803683375050604080516003808252608082019092529293505f929150602082015b6060815260200190600190039081612467575050604080516003808252608082019092529192505f91906020820160608036833701905050905085835f815181106124b4576124b4615821565b60200260200101906001600160a01b031690816001600160a01b03168152505086836001815181106124e8576124e8615821565b60200260200101906001600160a01b031690816001600160a01b031681525050858360028151811061251c5761251c615821565b6001600160a01b0392831660209182029290920181019190915260408051928a16602484015260448084018890528151808503909101815260649093019052810180516001600160e01b031663095ea7b360e01b179052825183905f9061258557612585615821565b602090810291909101810191909152604080516001600160a01b038b8116602483015289166044820152606480820188905282518083039091018152608490910190915290810180516001600160e01b0316631da649cf60e01b1790528251839060019081106125f7576125f7615821565b60209081029190910101526040516001600160a01b03881660248201525f604482015263095ea7b360e01b90606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508260028151811061266c5761266c615821565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b0389169063bcde317c906126a790869085908790600401615835565b5f604051808303815f87803b1580156126be575f5ffd5b505af11580156126d0573d5f5f3e3d5ffd5b505050506126dc61217e565b6007015460405162c18c2560e41b81526001600160a01b038a811660048301528881166024830152604482018790526064820188905290911690630c18c250906084015b5f604051808303815f87803b158015612737575f5ffd5b505af115801561130a573d5f5f3e3d5ffd5b6116e55f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00612317565b5f8381036127945760405163b4fa3fb360e01b815260040160405180910390fd5b8382146127b45760405163512509d360e11b815260040160405180910390fd5b876001600160a01b0316876001600160a01b0316036127e65760405163b4fa3fb360e01b815260040160405180910390fd5b6127ef89613e06565b5f868152600e8a01602052604090205460ff16156128205760405163767a99bf60e01b815260040160405180910390fd5b5f600b8a015460ff16600181111561283a5761283a61545c565b1480156128475750600184115b15612865576040516310949f4d60e21b815260040160405180910390fd5b5f805b8381101561289e5784848281811061288257612882615821565b905060200201358261289491906159de565b9150600101612868565b50805f036128bf576040516365e52d5160e11b815260040160405180910390fd5b5f878152600e8b0160205260409020805460ff191660011790556128e38a82613e36565b6128ec88613ac5565b6128f589613ac5565b9998505050505050505050565b60018a01548451612934916001600160a01b03169086905f9061292757612927615821565b602002602001015161231d565b6129515760405163350b944160e11b815260040160405180910390fd5b60018a015484515f916001600160a01b03169063afe6ab00908790849061297a5761297a615821565b6020026020010151865f8151811061299457612994615821565b60200260200101516040518363ffffffff1660e01b81526004016129cd9291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156129e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0c91906159b3565b9050805f03612a2e576040516365e52d5160e11b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f929150602082015b6060815260200190600190039081612a665750506040805160018082528183019092529192505f91906020808301908036833750505060018f015484519192506001600160a01b03169084905f90612ac057612ac0615821565b60200260200101906001600160a01b031690816001600160a01b03168152505063eda7fbcd60e01b89895f81518110612afb57612afb615821565b602002602001015186604051602401612b16939291906159f1565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050825f81518110612b5b57612b5b615821565b60200260200101819052505f815f81518110612b7957612b79615821565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b038e169063bcde317c90612bb490869085908790600401615835565b5f604051808303815f87803b158015612bcb575f5ffd5b505af1925050508015612bdc575060015b612c4757612be98d6121a2565b604051632f378c5f60e21b81526001600160a01b038e169063bcde317c90612c1990869085908790600401615835565b5f604051808303815f87803b158015612c30575f5ffd5b505af1158015612c42573d5f5f3e3d5ffd5b505050505b6040805160018082528183019092525f916020808301908036833701905050905084815f81518110612c7b57612c7b615821565b6020026020010181815250508e6007015f9054906101000a90046001600160a01b03166001600160a01b0316634739153e8f8f8d8d868e8e5f6040518963ffffffff1660e01b8152600401612cd7989796959493929190615a1b565b5f604051808303815f87803b158015612cee575f5ffd5b505af1158015612d00573d5f5f3e3d5ffd5b505050508515612d4a57612d2f8f8f8e8b5f81518110612d2257612d22615821565b6020026020010151613eda565b6001600160a01b038b1615612d4a57612d4a8f8f8d8a6140d2565b505050505050505050505050505050565b5f856001600160401b03811115612d7457612d74615009565b604051908082528060200260200182016040528015612d9d578160200160208202803683370190505b5090505f5b8681101561300e5760018e0154612de8906001600160a01b0316898984818110612dce57612dce615821565b9050602002016020810190612de39190614fee565b61231d565b612e055760405163350b944160e11b815260040160405180910390fd5b60018e01546001600160a01b031663afe6ab00898984818110612e2a57612e2a615821565b9050602002016020810190612e3f9190614fee565b888885818110612e5157612e51615821565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401602060405180830381865afa158015612ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec591906159b3565b828281518110612ed757612ed7615821565b602002602001018181525050818181518110612ef557612ef5615821565b6020026020010151888883818110612f0f57612f0f615821565b9050602002016020810190612f249190614fee565b6001600160a01b03166370a082318f6040518263ffffffff1660e01b8152600401612f5e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612f79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9d91906159b3565b1015612fbc57604051631e9acf1760e31b815260040160405180910390fd5b6130068d898984818110612fd257612fd2615821565b9050602002016020810190612fe79190614fee565b848481518110612ff957612ff9615821565b6020026020010151613c1d565b600101612da2565b5061301c8c8989898561423a565b60078d015460405163239c8a9f60e11b81526001600160a01b0390911690634739153e90613061908f908f908d908d908d9089908e908e908e90600190600401615acf565b5f604051808303815f87803b158015613078575f5ffd5b505af115801561308a573d5f5f3e3d5ffd5b5050505060018d0154604051630d3b088560e31b81526001600160a01b038e81166004830152909116906369d84428906024015f6040518083038186803b1580156130d3575f5ffd5b505afa1580156130e5573d5f5f3e3d5ffd5b505050508115613116576130fb8d8d8c86613eda565b6001600160a01b03891615613116576131168d8d8b866140d2565b50505050505050505050505050565b61312d614503565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f50080546001600160a01b0319166001600160a01b03831617815561316f61454c565b61167c614554565b5f61318061217e565b90505f61318b61217e565b6001600160a01b0384165f90815260209190915260409020600a81015490915042600160a01b9091046001600160601b031611156131dc5760405163271c87d960e01b815260040160405180910390fd5b61324282826008015f0180548060200260200160405190810160405280929190818152602001828054801561323857602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161321a575b5050505050614574565b600a81015460088201546001600160a01b03909116905f816001600160401b0381111561327157613271615009565b60405190808252806020026020018201604052801561329a578160200160208202803683370190505b5090505f826001600160401b038111156132b6576132b6615009565b6040519080825280602002602001820160405280156132e957816020015b60608152602001906001900390816132d45790505b5090505f5b838110156133f0576008860180548290811061330c5761330c615821565b905f5260205f20015f9054906101000a90046001600160a01b031683828151811061333957613339615821565b6001600160a01b039092166020928302919091019091015260098601805463a9059cbb60e01b9187918490811061337257613372615821565b5f918252602090912001546040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508282815181106133dd576133dd615821565b60209081029190910101526001016132ee565b50866001600160a01b031663bcde317c83856001600160401b0381111561341957613419615009565b604051908082528060200260200182016040528015613442578160200160208202803683370190505b50846040518463ffffffff1660e01b815260040161346293929190615835565b5f604051808303815f87803b158015613479575f5ffd5b505af115801561348b573d5f5f3e3d5ffd5b5050505061349761217e565b600701546040516371aa1e0f60e01b81526001600160a01b03909116906371aa1e0f906134d4908a9060088a019060098b01908a90600401615903565b5f604051808303815f87803b1580156134eb575f5ffd5b505af11580156134fd573d5f5f3e3d5ffd5b5050506008860190505f6135118282614f38565b61351e600183015f614f38565b505f600291909101556001860154604051630d3b088560e31b81526001600160a01b038981166004830152909116906369d84428906024015f6040518083038186803b15801561356c575f5ffd5b505afa158015610b37573d5f5f3e3d5ffd5b6135866145fe565b5f516020615d7a5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061366357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166136575f516020615d5a5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156116e55760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b1580156136e4575f5ffd5b505afa1580156136f6573d5f5f3e3d5ffd5b505050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613758575060408051601f3d908101601f19168201909252613755918101906159b3565b60015b61378557604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f516020615d5a5f395f51905f5281146137b557604051632a87526960e21b81526004810182905260240161377c565b610cf7838361462d565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116e55760405163703e46dd60e11b815260040160405180910390fd5b63978aab926004525f818152602481206060915068fbb67fda52d4bfb8bf81548060a01b60a01c6040519450846020018260601c925083831415830281528161389657821561389157600191508185015460601c92508215613891578284141590920260208301525060028381015460601c918215613891576003915083831415830260408201525b6138c6565b600191821c915b828110156138c4578581015460601c858114158102600583901b840152935060010161389d565b505b8186528160051b81016040525050505050919050565b6138e4612280565b5f516020615d7a5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336135bf565b5f6118778261393161217e565b600a0190614682565b613942614f53565b8383808211156139655760405163e2ed77a160e01b815260040160405180910390fd5b6201518084138061397957506201517f1984125b1561399757604051638fa93def60e01b815260040160405180910390fd5b85875560018701859055600787018490556139b2428561472b565b60068801805467ffffffffffffffff19166001600160401b039290921691909117905560078701546139e5904290614778565b6006880180546001600160401b03928316600160401b9081026fffffffffffffffff000000000000000019831681179384905560408051610160810182528d54815260018e0154602082015260028e01549181019190915260038d0154606082015260048d0154608082015260058d015460a08201529085169285169290921760c08301528204831660e0820152600160801b82048316610100820152600160c01b909104909116610120820152600788015461014082015292505050949350505050565b5f613ab361217e565b600101546001600160a01b0316919050565b5f613ace61217e565b6001600160a01b0383165f9081526005820160205260409020549091501561167c576006810154604051630726648360e11b81526001600160a01b0384811660048301525f928392839290911690630e4cc906906024016060604051808303815f875af1158015613b41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b659190615b89565b9250925092508015613c0f5760078401546001600160a01b038681165f8181526005880160205260409081902054905163cfd269ff60e01b81526004810192909252868316602483015260448201869052606482015291169063cfd269ff906084015f604051808303815f87803b158015613bde575f5ffd5b505af1158015613bf0573d5f5f3e3d5ffd5b5050506001600160a01b0386165f908152600586016020526040812055505b5050505050565b80825d5050565b5f613c2661217e565b600701546001600160a01b031690505f613c3e61217e565b6001600160a01b038681165f818152602093909352604080842090516370a0823160e01b815260048101929092529350908616906370a0823190602401602060405180830381865afa158015613c96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cba91906159b3565b905080841115613cdd57604051631e9acf1760e31b815260040160405180910390fd5b6008820154805f5b82811015613d3757876001600160a01b0316856008015f018281548110613d0e57613d0e615821565b5f918252602090912001546001600160a01b031603613d2f57809150613d37565b600101613ce5565b50818103613d49575050505050505050565b82846008016001018281548110613d6257613d62615821565b905f5260205f20015487613d7691906159de565b1115613dfc57613d868684615bc9565b60098501805483908110613d9c57613d9c615821565b5f918252602090912001556001600160a01b03851663740242f28989613dc28a88615bc9565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401612720565b5050505050505050565b600c81015415801590613e1c575080600c015442115b156108a257600b8101805460ff191690555f600c90910155565b613e3f826147f2565b81546002830154613e519083906159de565b1115613e70576040516398ba620f60e01b815260040160405180910390fd5b8160010154818360030154613e8591906159de565b1115613ea45760405163e44dfa8d60e01b815260040160405180910390fd5b80826002015f828254613eb791906159de565b9250508190555080826003015f828254613ed191906159de565b90915550505050565b5f5f613ee585611e64565b60068801546040516301ed32f560e41b81526001600160a01b03898116600483015288811660248301526044820188905260648201859052608482018490529395509193505f92839283928392839283929190911690631ed32f509060a40160c0604051808303815f875af1158015613f60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f849190615bdc565b95509550955095509550955080613ff2576001600160a01b038b165f90815260058d01602052604081208054869290613fbe9084906159de565b90915550506001600160a01b038a165f90815260058d01602052604081208054849290613fec9084906159de565b90915550505b613ffc82856159de565b6001600160a01b038c165f90815260208e90526040812060100180549091906140269084906159de565b909155505060078c015460405163ab2a5f1760e01b81526001600160a01b038d811660048301528c81166024830152604482018c905288811660648301526084820188905260a4820187905260c4820186905260e482018590528315156101048301529091169063ab2a5f1790610124015f604051808303815f87803b1580156140ae575f5ffd5b505af11580156140c0573d5f5f3e3d5ffd5b50505050505050505050505050505050565b6008840154600160a01b90046001600160401b03161561423457600684015460088501546040516301ed32f560e41b81526001600160a01b038681166004830152858116602483015260448201859052600160a01b9092046001600160401b031660648201525f60848201819052928392839283929190911690631ed32f509060a40160c0604051808303815f875af1158015614171573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141959190615bdc565b95509550955050509350806141d3576001600160a01b0386165f908152600589016020526040812080548492906141cd9084906159de565b90915550505b6007880154604051636d15504b60e01b81526001600160a01b03898116600483015288811660248301526044820188905286811660648301526084820186905260a4820185905283151560c483015290911690636d15504b9060e401612720565b50505050565b5f826001600160401b0381111561425357614253615009565b60405190808252806020026020018201604052801561427c578160200160208202803683370190505b5090505f836001600160401b0381111561429857614298615009565b6040519080825280602002602001820160405280156142cb57816020015b60608152602001906001900390816142b65790505b5090505f846001600160401b038111156142e7576142e7615009565b604051908082528060200260200182016040528015614310578160200160208202803683370190505b5090505f61431d88611a54565b90505f5b868110156144395787878281811061433b5761433b615821565b90506020020160208101906143509190614fee565b85828151811061436257614362615821565b60200260200101906001600160a01b031690816001600160a01b03168152505063a9059cbb60e01b8287838151811061439d5761439d615821565b60209081029190910101516040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505084828151811061440857614408615821565b60200260200101819052505f83828151811061442657614426615821565b6020908102919091010152600101614321565b50604051632f378c5f60e21b81526001600160a01b038a169063bcde317c9061446a90879086908890600401615835565b5f604051808303815f87803b158015614481575f5ffd5b505af1925050508015614492575060015b6144f85761449f896121a2565b604051632f378c5f60e21b81526001600160a01b038a169063bcde317c906144cf90879086908890600401615835565b5f604051808303815f87803b1580156144e6575f5ffd5b505af1158015613116573d5f5f3e3d5ffd5b505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166116e557604051631afcd79f60e31b815260040160405180910390fd5b6116e5614503565b61455c614503565b5f516020615d7a5f395f51905f52805460ff19169055565b80515f5b81811015614234576145af83828151811061459557614595615821565b602002602001015185600a0161468290919063ffffffff16565b6145f6578281815181106145c5576145c5615821565b6020026020010151604051635414a25b60e01b815260040161377c91906001600160a01b0391909116815260200190565b600101614578565b5f516020615d7a5f395f51905f525460ff166116e557604051638dfc202b60e01b815260040160405180910390fd5b61463682614941565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561467a57610cf782826149a4565b61167c614a16565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016146bd5763f5a267f15f526004601cfd5b826146cf5768fbb67fda52d4bfb8bf92505b80546001600160601b0381166147125760019250838160601c031561472357600182015460601c841461472357600282015460601c8414614723575f9250614723565b81602052835f5260405f2054151592505b505092915050565b5f806147378385615c39565b90505f6147476201518083615c6c565b90505f6147558260016159de565b6147629062015180615c98565b905061476e8582615caf565b9695505050505050565b5f806147848385615c39565b90505f8061479d6147986201518085615cce565b614a35565b5090925090506147ae600182615ce1565b9050600c8160ff1611156147cc575060016147c98183615cfa565b91505b5f6147d983836001614ba3565b6147e69062015180615c98565b9050611e578682615caf565b604080516101608101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a082015260068201546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078201546101408201525f9061488c90614cd9565b805183556020810151600184015560408101516002840155606081015160038401556080810151600484015560a0810151600584015560c08101516006909301805460e0830151610100840151610120909401516001600160401b03908116600160c01b026001600160c01b03958216600160801b02959095166fffffffffffffffffffffffffffffffff928216600160401b026001600160801b031990941691909716179190911716939093171790915550565b806001600160a01b03163b5f0361497657604051634c9c8ce360e01b81526001600160a01b038216600482015260240161377c565b5f516020615d5a5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516149c09190615d14565b5f60405180830381855af49150503d805f81146149f8576040519150601f19603f3d011682016040523d82523d5f602084013e6149fd565b606091505b5091509150614a0d858383614dec565b95945050505050565b34156116e55760405163b398979f60e01b815260040160405180910390fd5b5f80808381614a478262010bd9615c39565b614a549062253d8c615c39565b90505f62023ab1614a66836004615d2a565b614a709190615c6c565b90506004614a818262023ab1615d2a565b614a8c906003615c39565b614a969190615c6c565b614aa09083615caf565b91505f62164b09614ab2846001615c39565b614abe90610fa0615d2a565b614ac89190615c6c565b90506004614ad8826105b5615d2a565b614ae29190615c6c565b614aec9084615caf565b614af790601f615c39565b92505f61098f614b08856050615d2a565b614b129190615c6c565b90505f6050614b238361098f615d2a565b614b2d9190615c6c565b614b379086615caf565b9050614b44600b83615c6c565b9450614b5185600c615d2a565b614b5c836002615c39565b614b669190615caf565b91508483614b75603187615caf565b614b80906064615d2a565b614b8a9190615c39565b614b949190615c39565b9a919950975095505050505050565b5f61ffff841660ff8085169084168362253d8c60046064600c614bc7600e88615caf565b614bd19190615c6c565b614bdd88611324615c39565b614be79190615c39565b614bf19190615c6c565b614bfc906003615d2a565b614c069190615c6c565b600c80614c14600e88615caf565b614c1e9190615c6c565b614c2990600c615d2a565b614c34600288615caf565b614c3e9190615caf565b614c4a9061016f615d2a565b614c549190615c6c565b6004600c614c63600e89615caf565b614c6d9190615c6c565b614c79896112c0615c39565b614c839190615c39565b614c8f906105b5615d2a565b614c999190615c6c565b614ca5617d4b87615caf565b614caf9190615c39565b614cb99190615c39565b614cc39190615caf565b614ccd9190615caf565b98975050505050505050565b614ce1614f53565b6101008201516001600160401b031615801590614d0b57508161010001516001600160401b031642115b15614d245760808201805183525f908190526101008301525b6101208201516001600160401b031615801590614d4e57508161012001516001600160401b031642115b15614d6a5760a08201805160208401525f908190526101208301525b8160c001516001600160401b0316421115614da9575f604083015260c0820151610140830151614d9a9190614e48565b6001600160401b031660c08301525b8160e001516001600160401b0316421115614de8575f606083015260e0820151610140830151614dd99190614e76565b6001600160401b031660e08301525b5090565b606082614e0157614dfc82614ea4565b612388565b8151158015614e1857506001600160a01b0384163b155b15614e4157604051639996b31560e01b81526001600160a01b038516600482015260240161377c565b5080612388565b5f5b614e5d6001600160401b0384168361472b565b9250826001600160401b03164211614e4a575090919050565b5f5b614e8b6001600160401b03841683614778565b9250826001600160401b03164211614e78575090919050565b805115614eb45780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6040518060a00160405280614ee0614f53565b8152602001614f20604051806080016040528060608152602001606081526020015f6001600160a01b031681526020015f6001600160601b031681525090565b81526020015f81526020015f81526020015f81525090565b5080545f8255905f5260205f20908101906108a29190614fc6565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81525090565b5b80821115614de8575f8155600101614fc7565b6001600160a01b03811681146108a2575f5ffd5b5f60208284031215614ffe575f5ffd5b813561238881614fda565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561503f5761503f615009565b60405290565b604051601f8201601f191681016001600160401b038111828210171561506d5761506d615009565b604052919050565b5f5f5f60608486031215615087575f5ffd5b833561509281614fda565b925060208401356150a281614fda565b915060408401356001600160401b038111156150bc575f5ffd5b8401601f810186136150cc575f5ffd5b80356001600160401b038111156150e5576150e5615009565b6150f460208260051b01615045565b80828252602082019150602060608402850101925088831115615115575f5ffd5b6020840193505b8284101561516f576060848a031215615133575f5ffd5b61513b61501d565b843561514681614fda565b81526020858101358183015260408087013590830152908352606090940193919091019061511c565b809450505050509250925092565b5f5f5f6060848603121561518f575f5ffd5b833561519a81614fda565b925060208401356151aa81614fda565b929592945050506040919091013590565b803560028110611ac9575f5ffd5b5f5f83601f8401126151d9575f5ffd5b5081356001600160401b038111156151ef575f5ffd5b6020830191508360208260051b8501011115615209575f5ffd5b9250929050565b80151581146108a2575f5ffd5b5f5f5f5f5f5f5f5f5f5f6101008b8d031215615237575f5ffd5b8a3561524281614fda565b995060208b013561525281614fda565b985060408b013561526281614fda565b975060608b0135965061527760808c016151bb565b955060a08b01356001600160401b03811115615291575f5ffd5b61529d8d828e016151c9565b90965094505060c08b01356001600160401b038111156152bb575f5ffd5b6152c78d828e016151c9565b90945092505060e08b01356152db81615210565b809150509295989b9194979a5092959850565b5f5f5f5f5f5f5f60e0888a031215615304575f5ffd5b873561530f81614fda565b9650602088013561531f81614fda565b9550604088013561532f81614fda565b9450606088013561533f81614fda565b9350608088013561534f81614fda565b925060a088013561535f81614fda565b915060c088013561536f81614fda565b8091505092959891949750929550565b5f8151808452602084019350602083015f5b828110156153af578151865260209586019590910190600101615391565b5093949350505050565b8051608080845281519084018190525f9160200190829060a08601905b808310156154015783516001600160a01b0316825260209384019360019390930192909101906153d6565b5060208501519250858103602087015261541b818461537f565b92505050604083015161543960408601826001600160a01b03169052565b50606083015161545460608601826001600160601b03169052565b509392505050565b634e487b7160e01b5f52602160045260245ffd5b600281106108a2576108a261545c565b61548981615470565b9052565b602081525f825180516020840152602081015160408401526040810151606084015260608101516080840152608081015160a084015260a081015160c084015260c08101516154e760e08501826001600160401b03169052565b5060e08101516001600160401b038116610100850152506101008101516001600160401b038116610120850152506101208101516001600160401b03811661014085015250610140015161016083015260208301516101e06101808401526155536102008401826153b9565b905060408401516155686101a0850182615480565b5060608401516101c08401526080909301516101e0909201919091525090565b5f5f60408385031215615599575f5ffd5b82356155a481614fda565b915060208301356001600160401b038111156155be575f5ffd5b8301601f810185136155ce575f5ffd5b80356001600160401b038111156155e7576155e7615009565b6155fa601f8201601f1916602001615045565b81815286602083850101111561560e575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f6020828403121561563d575f5ffd5b813560058110612388575f5ffd5b5f8151808452602084019350602083015f5b828110156153af5781516001600160a01b031686526020958601959091019060010161565d565b602081525f612388602083018461564b565b60208101600583106156aa576156aa61545c565b91905290565b5f5f602083850312156156c1575f5ffd5b82356001600160401b038111156156d6575f5ffd5b8301601f810185136156e6575f5ffd5b80356001600160401b038111156156fb575f5ffd5b85602082840101111561570c575f5ffd5b6020919091019590945092505050565b5f6020828403121561572c575f5ffd5b612388826151bb565b602081016156aa83615470565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6123886020830184615742565b5f5f60208385031215615793575f5ffd5b82356001600160401b038111156157a8575f5ffd5b6157b4858286016151c9565b90969095509350505050565b5f5f604083850312156157d1575f5ffd5b82356157dc81614fda565b915060208301356157ec81614fda565b809150509250929050565b5f5f60408385031215615808575f5ffd5b823561581381614fda565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b606081525f615847606083018661564b565b8281036020840152615859818661537f565b9050828103604084015280845180835260208301915060208160051b840101602087015f5b838110156158b057601f1986840301855261589a838351615742565b602095860195909350919091019060010161587e565b50909998505050505050505050565b5f602082840312156158cf575f5ffd5b815161238881615210565b5f5f5f606084860312156158ec575f5ffd5b505081359360208301359350604090920135919050565b6001600160a01b03851681526080602080830182905285549183018290525f868152908120909160a0840190835b818110156159585783546001600160a01b0316835260019384019360209093019201615931565b5050838103604085015285548082525f87815260208082209301935090815b81811015615995578354855260209094019360019384019301615977565b5050506001600160a01b038516606085015250905095945050505050565b5f602082840312156159c3575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611877576118776159ca565b606081016159fe85615470565b9381526001600160a01b0392909216602083015260409091015290565b6001600160a01b038916815260208101889052615a3787615470565b86604082015261010060608201525f615a5461010083018861564b565b8281036080840152615a66818861537f565b905082810360a0840152615a7a818761537f565b9150508360c0830152615a8c83615470565b8260e08301529998505050505050505050565b8183525f6001600160fb1b03831115615ab6575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038b168152602081018a90525f6101008201615af18b615470565b604083018b905261010060608401528890528861012083015f5b8a811015615b3b578235615b1e81614fda565b6001600160a01b0316825260209283019290910190600101615b0b565b508381036080850152615b4e818a61537f565b91505082810360a0840152615b64818789615a9f565b9150508360c0830152615b7a60e0830184615480565b9b9a5050505050505050505050565b5f5f5f60608486031215615b9b575f5ffd5b8351615ba681614fda565b602085015160408601519194509250615bbe81615210565b809150509250925092565b81810381811115611877576118776159ca565b5f5f5f5f5f5f60c08789031215615bf1575f5ffd5b8651615bfc81614fda565b6020880151604089015160608a015160808b015160a08c0151949a5092985090965094509250615c2b81615210565b809150509295509295509295565b8082018281125f831280158216821582161715614723576147236159ca565b634e487b7160e01b5f52601260045260245ffd5b5f82615c7a57615c7a615c58565b600160ff1b82145f1984141615615c9357615c936159ca565b500590565b8082028115828204841417611877576118776159ca565b8181035f831280158383131683831282161715611e5d57611e5d6159ca565b5f82615cdc57615cdc615c58565b500490565b60ff8181168382160190811115611877576118776159ca565b61ffff8181168382160190811115611877576118776159ca565b5f82518060208501845e5f920191825250919050565b8082025f8212600160ff1b84141615615d4557615d456159ca565b8181058314821517611877576118776159ca56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a000000000000000000000000dc515cb479a64552c5a11a57109c314e40a1a778