0 txs
61.9k calls
constructor
constructor((address evc, address protocolConfig, address sequenceRegistry, address balanceTracker, address permit2) integrations)
functions
accumulatedFees
viewfunction accumulatedFees() view returns (uint256)
accumulatedFeesAssets
viewfunction accumulatedFeesAssets() view returns (uint256)
asset
viewfunction asset() view returns (address)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
creator
viewfunction creator() view returns (address)
maxDeposit
viewfunction maxDeposit(address account) view returns (uint256)
maxMint
viewfunction maxMint(address account) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
totalAssets
viewfunction totalAssets() view returns (uint256)
deposit
nonpayablefunction deposit(uint256 amount, address receiver) returns (uint256)
mint
nonpayablefunction mint(uint256 amount, address receiver) returns (uint256)
redeem
nonpayablefunction redeem(uint256 amount, address receiver, address owner) returns (uint256)
skim
nonpayablefunction skim(uint256 amount, address receiver) returns (uint256)
withdraw
nonpayablefunction withdraw(uint256 amount, address receiver, address owner) returns (uint256)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BalanceForwarderStatus
event BalanceForwarderStatus(address indexed account, bool status)
Borrow
event Borrow(address indexed account, uint256 assets)
ConvertFees
event ConvertFees(address indexed sender, address indexed protocolReceiver, address indexed governorReceiver, uint256 protocolShares, uint256 governorShares)
DebtSocialized
event DebtSocialized(address indexed account, uint256 assets)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
EVaultCreated
event EVaultCreated(address indexed creator, address indexed asset, address dToken)
InterestAccrued
event InterestAccrued(address indexed account, uint256 assets)
Liquidate
event Liquidate(address indexed liquidator, address indexed violator, address collateral, uint256 repayAssets, uint256 yieldBalance)
PullDebt
event PullDebt(address indexed from, address indexed to, uint256 assets)
Repay
event Repay(address indexed account, uint256 assets)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
VaultStatus
event VaultStatus(uint256 totalShares, uint256 totalBorrows, uint256 accumulatedFees, uint256 cash, uint256 interestAccumulator, uint256 interestRate, uint256 timestamp)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
E_AccountLiquidity
error E_AccountLiquidity()
E_AmountTooLargeToEncode
error E_AmountTooLargeToEncode()
E_BadAddress
error E_BadAddress()
E_BadAssetReceiver
error E_BadAssetReceiver()
E_BadBorrowCap
error E_BadBorrowCap()
E_BadCollateral
error E_BadCollateral()
E_BadFee
error E_BadFee()
E_BadMaxLiquidationDiscount
error E_BadMaxLiquidationDiscount()
E_BadSharesOwner
error E_BadSharesOwner()
E_BadSharesReceiver
error E_BadSharesReceiver()
E_BadSupplyCap
error E_BadSupplyCap()
E_BorrowCapExceeded
error E_BorrowCapExceeded()
E_CheckUnauthorized
error E_CheckUnauthorized()
E_CollateralDisabled
error E_CollateralDisabled()
E_ConfigAmountTooLargeToEncode
error E_ConfigAmountTooLargeToEncode()
E_ControllerDisabled
error E_ControllerDisabled()
E_DebtAmountTooLargeToEncode
error E_DebtAmountTooLargeToEncode()
E_EmptyError
error E_EmptyError()
E_ExcessiveRepayAmount
error E_ExcessiveRepayAmount()
E_FlashLoanNotRepaid
error E_FlashLoanNotRepaid()
E_Initialized
error E_Initialized()
E_InsufficientAllowance
error E_InsufficientAllowance()
E_InsufficientAssets
error E_InsufficientAssets()
E_InsufficientBalance
error E_InsufficientBalance()
E_InsufficientCash
error E_InsufficientCash()
E_InsufficientDebt
error E_InsufficientDebt()
E_InvalidLTVAsset
error E_InvalidLTVAsset()
E_LiquidationCoolOff
error E_LiquidationCoolOff()
E_LTVBorrow
error E_LTVBorrow()
E_LTVLiquidation
error E_LTVLiquidation()
E_MinYield
error E_MinYield()
E_NoLiability
error E_NoLiability()
E_NoPriceOracle
error E_NoPriceOracle()
E_NotController
error E_NotController()
E_NotHookTarget
error E_NotHookTarget()
E_NotSupported
error E_NotSupported()
E_OperationDisabled
error E_OperationDisabled()
E_OutstandingDebt
error E_OutstandingDebt()
E_ProxyMetadata
error E_ProxyMetadata()
E_Reentrancy
error E_Reentrancy()
E_RepayTooMuch
error E_RepayTooMuch()
E_SelfLiquidation
error E_SelfLiquidation()
E_SelfTransfer
error E_SelfTransfer()
E_SupplyCapExceeded
error E_SupplyCapExceeded()
E_TransferFromFailed
error E_TransferFromFailed(bytes errorPermit2, bytes errorTransferFrom)
E_TransientState
error E_TransientState()
E_Unauthorized
error E_Unauthorized()
E_ViolatorLiquidityDeferred
error E_ViolatorLiquidityDeferred()
E_ZeroAssets
error E_ZeroAssets()
E_ZeroShares
error E_ZeroShares()
creation bytecode
0x61012060405234801562000011575f80fd5b50604051620042dd380380620042dd8339810160408190526200003491620000f2565b805181906200004381620000a6565b6001600160a01b03166080525060208101516200006090620000a6565b6001600160a01b031660a05260408101516200007c90620000a6565b6001600160a01b0390811660c0526060820151811660e05260809091015116610100525062000195565b5f816001600160a01b03163b5f03620000d2576040516306e1f36760e31b815260040160405180910390fd5b5090565b80516001600160a01b0381168114620000ed575f80fd5b919050565b5f60a0828403121562000103575f80fd5b60405160a081016001600160401b03811182821017156200013257634e487b7160e01b5f52604160045260245ffd5b6040526200014083620000d6565b81526200015060208401620000d6565b60208201526200016360408401620000d6565b60408201526200017660608401620000d6565b60608201526200018960808401620000d6565b60808201529392505050565b60805160a05160c05160e051610100516140df620001fe5f395f612cad01525f8181611f6c015261300801525f50505f50505f81816129a1015281816129d201528181612b7e01528181612c3801528181613303015281816137f601526138ca01526140df5ff3fe608060405234801561000f575f80fd5b5060043610610163575f3560e01c806394bf804d116100c7578063c6e6f5921161007d578063d905777e11610063578063d905777e146102ec578063ef8b30f7146102ff578063f6e50f5814610312575f80fd5b8063c6e6f592146102c6578063ce96cb77146102d9575f80fd5b8063b460af94116100ad578063b460af941461028d578063ba087652146102a0578063c63d75b6146102b3575f80fd5b806394bf804d14610267578063b3d7f6b91461027a575f80fd5b8063402d267d1161011c578063587f5ed711610102578063587f5ed7146102395780636e553f65146102415780638d56c63914610254575f80fd5b8063402d267d146102135780634cdad50614610226575f80fd5b806307a2d13a1161014c57806307a2d13a146101c15780630a28a477146101d457806338d52e0f146101e7575f80fd5b806301e1d1141461016757806302d05d3f14610182575b5f80fd5b61016f61031a565b6040519081526020015b60405180910390f35b60095473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610179565b61016f6101cf366004613c40565b6103ed565b61016f6101e2366004613c40565b6104f2565b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4013560601c61019c565b61016f610221366004613c78565b6105db565b61016f610234366004613c40565b61070e565b61016f6107d5565b61016f61024f366004613c93565b6108b4565b61016f610262366004613c93565b610b11565b61016f610275366004613c93565b610e2a565b61016f610288366004613c40565b610f38565b61016f61029b366004613cc1565b611021565b61016f6102ae366004613cc1565b611174565b61016f6102c1366004613c78565b611322565b61016f6102d4366004613c40565b611413565b61016f6102e7366004613c78565b6114fc565b61016f6102fa366004613c78565b6115e4565b61016f61030d366004613c40565b61170f565b61016f6117d0565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156103d257600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061039957503330148015610397575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156103d0576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6103db6118bd565b90506103e68161193a565b9150505b90565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156104a557600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061046c5750333014801561046a575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156104a3576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6104ae6118bd565b90506104e96104d6826104c08661197e565b6dffffffffffffffffffffffffffff16906119c7565b6dffffffffffffffffffffffffffff1690565b9150505b919050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156105aa57600c5473ffffffffffffffffffffffffffffffffffffffff163381148015906105715750333014801561056f575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156105a8576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6105b36118bd565b90506104e96104d6826105c58661197e565b6dffffffffffffffffffffffffffff1690611a0b565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff161561069357600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061065a57503330148015610658575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b15610691576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f61069c6118bd565b90506106ae8161016001516001611a65565b156106bb57505f92915050565b5f6106ca826104c08487611aa3565b90506106e96104d66dffffffffffffffffffffffffffff831684611b67565b15610704576dffffffffffffffffffffffffffff8116610706565b5f5b949350505050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156107c657600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061078d5750333014801561078b575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156107c4576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6107cf826103ed565b92915050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff161561088d57600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061085457503330148015610852575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b1561088b576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6108af6108986118bd565b60e001516dffffffffffffffffffffffffffff1690565b905090565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff1615610913576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001790555f80610967600182611b75565b915091505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86146109a15761099c8661197e565b610a3a565b82516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152610a3a9216906370a08231906024015b602060405180830381865afa158015610a11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a359190613d00565b61197e565b90506dffffffffffffffffffffffffffff8116610a5c575f9350505050610ae3565b5f610a776dffffffffffffffffffffffffffff831685611b67565b90506dffffffffffffffffffffffffffff8116610ac0576040517fca0985cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610acd848383868a611dc3565b6dffffffffffffffffffffffffffff1693505050505b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905592915050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff1615610b70576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001790555f80610bc4602082611b75565b81516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529294509092505f91610c239173ffffffffffffffffffffffffffffffffffffffff16906370a08231906024016109f6565b90505f610c488285608001516dffffffffffffffffffffffffffff9081169116111590565b610c6c5760808401516dffffffffffffffffffffffffffff90811690831603610c6e565b5f5b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8803610c9f575080610cf7565b610ca88861197e565b90506dffffffffffffffffffffffffffff8083169082161115610cf7576040517f304fad6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6dffffffffffffffffffffffffffff8116610d19575f95505050505050610ae3565b5f610d346dffffffffffffffffffffffffffff831687611b67565b90506dffffffffffffffffffffffffffff8116610d7d576040517fca0985cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d8b866080015183611de2565b6dffffffffffffffffffffffffffff1660808701819052600280547fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff166601000000000000909202919091179055610de68689878486611e03565b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556dffffffffffffffffffffffffffff1698975050505050505050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff1615610e89576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001781555f908190610ede9082611b75565b915091505f610eec8661197e565b90506dffffffffffffffffffffffffffff8116610f0e575f9350505050610ae3565b5f610f296dffffffffffffffffffffffffffff831685612104565b9050610acd848284868a611dc3565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff1615610ff057600c5473ffffffffffffffffffffffffffffffffffffffff16338114801590610fb757503330148015610fb5575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b15610fee576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f610ff96118bd565b90506104e96104d68261100b8661197e565b6dffffffffffffffffffffffffffff1690612104565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff1615611080576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001790555f806110d4600485611b75565b915091505f6110e28761197e565b90506dffffffffffffffffffffffffffff8116611104575f9350505050611145565b5f61111f6dffffffffffffffffffffffffffff831685611a0b565b905061112f848383868b8b612153565b6dffffffffffffffffffffffffffff1693505050505b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690559392505050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156111d3576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c01000000000000000000000000000000000000000000000000000000001790555f80611227600885611b75565b915091505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87146112615761125c8761197e565b61128e565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600d6020526040902061128e906121d0565b90506dffffffffffffffffffffffffffff81166112b0575f9350505050611145565b5f6112cb6dffffffffffffffffffffffffffff8316856119c7565b90506dffffffffffffffffffffffffffff8116611314576040517f6081f51b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61112f848284868b8b612153565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156113da57600c5473ffffffffffffffffffffffffffffffffffffffff163381148015906113a15750333014801561139f575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156113d8576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6113e36118bd565b90506113f58161016001516002611a65565b61140b576114066104d68285611aa3565b6104e9565b505f92915050565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156114cb57600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061149257503330148015611490575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156114c9576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6114d46118bd565b90506104e96104d6826114e68661197e565b6dffffffffffffffffffffffffffff1690611b67565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156115b457600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061157b57503330148015611579575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156115b2576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6115bd6118bd565b90506115cf8161016001516004611a65565b61140b576114066104d6826104c084876121e9565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff161561169c57600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061166357503330148015611661575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b1561169a576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6116a56118bd565b6002549091506116d8907801000000000000000000000000000000000000000000000000900463ffffffff166008611a65565b156116e557505f92915050565b5f6116f082856121e9565b90506106e96104d66dffffffffffffffffffffffffffff8316846119c7565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff16156117c757600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061178e5750333014801561178c575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b156117c5576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6107cf82611413565b6002545f907c0100000000000000000000000000000000000000000000000000000000900460ff161561188857600c5473ffffffffffffffffffffffffffffffffffffffff1633811480159061184f5750333014801561184d575060531936013560601c73ffffffffffffffffffffffffffffffffffffffff8216145b155b15611886576040517f74f3606300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5f6118916118bd565b90506103e66104d6828360e001516dffffffffffffffffffffffffffff166119c790919063ffffffff16565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a08101919091526119368161228c565b5090565b5f61195f6104d68360a0015171ffffffffffffffffffffffffffffffffffff16612740565b60808301516dffffffffffffffffffffffffffff166107cf9190613d44565b5f6dffffffffffffffffffffffffffff821115611936576040517f64e0647900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6119d384612783565b9092509050611a0281836dffffffffffffffffffffffffffff881602816119fc576119fc613d57565b0461197e565b95945050505050565b5f805f611a1784612783565b9092509050611a02827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101836dffffffffffffffffffffffffffff89165b0201816119fc576119fc613d57565b5f611a7a63ffffffff8085169084906127fd16565b8015611a9c5750600c5473ffffffffffffffffffffffffffffffffffffffff16155b9392505050565b5f80611aae8461193a565b90508361012001518110611ac5575f9150506107cf565b610120840151608085015190829003906dffffffffffffffffffffffffffff9081169003818110611af65781611af8565b805b9150611b1d86611b078461197e565b6dffffffffffffffffffffffffffff169061280e565b60c08701519092506dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff039050611b5d828210611b57578261197e565b8161197e565b9695505050505050565b5f611a9c610a35848461280e565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810182905290611bed61284a565b9150611bfd6175bf851615612988565b9050611c0f8261016001518583612af0565b611c3c73ffffffffffffffffffffffffffffffffffffffff8416600114611c365783612b1c565b81612b1c565b816101a00151158015611ca457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101200151148015611ca257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101400151145b155b15611dbc5760016101a0830152600280547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d010000000000000000000000000000000000000000000000000000000000179055608082015160a0830151611dbc9190611d259071ffffffffffffffffffffffffffffffffffff16612740565b6001919082547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff9283166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909216929093169190911717167c0100000000000000000000000000000000000000000000000000000000179055565b9250929050565b611dce858386612c7c565b611ddb8582848688611e03565b5050505050565b5f611a9c610a356dffffffffffffffffffffffffffff848116908616613d44565b73ffffffffffffffffffffffffffffffffffffffff8416611e50576040517fa8af73b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84165f908152600d602052604081209080611eb683546dffffffffffffffffffffffffffff8116917f8000000000000000000000000000000000000000000000000000000000000000909116151590565b915091505f611ec58387612d33565b84547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff82161785559050611f0d8960c0015187612d33565b6dffffffffffffffffffffffffffff1660c08a01819052600380547fffffffffffffffffffffffffffffffffffff000000000000000000000000000016909117905581156120285773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016636fc4fdc1896dffffffffffffffffffffffffffff84166040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201525f60448201526064015f604051808303815f87803b158015612011575f80fd5b505af1158015612023573d5f803e3d5ffd5b505050505b73ffffffffffffffffffffffffffffffffffffffff88165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6dffffffffffffffffffffffffffff891660405190815260200160405180910390a373ffffffffffffffffffffffffffffffffffffffff8089169088167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76dffffffffffffffffffffffffffff88166dffffffffffffffffffffffffffff8a166040805192835260208301919091520160405180910390a3505050505050505050565b5f805f61211084612783565b9092509050611a02817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101846dffffffffffffffffffffffffffff8916611a56565b60808601516dffffffffffffffffffffffffffff808716911610156121a4576040517ff077d87700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121af818486612d54565b6121bd86828585888a612e92565b6121c88683876131b1565b505050505050565b80545f906dffffffffffffffffffffffffffff166107cf565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600d602052604081208190612218906121d0565b90506dffffffffffffffffffffffffffff8116158061223b575061223b836132ba565b15612249575f9150506107cf565b60808401515f9061226a906dffffffffffffffffffffffffffff1686611b67565b90506dffffffffffffffffffffffffffff808216908316116107065781611a02565b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810135606090811c60408401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8820135811c60208401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc490910135811c825260025465ffffffffffff811691830191909152660100000000000081046dffffffffffffffffffffffffffff1660808301525f906123689074010000000000000000000000000000000000000000900461ffff16613394565b61012083015260025461239890760100000000000000000000000000000000000000000000900461ffff16613394565b6101408301526002547801000000000000000000000000000000000000000000000000810463ffffffff9081166101608501527d01000000000000000000000000000000000000000000000000000000000090910460ff1615156101a08401526003546dffffffffffffffffffffffffffff80821660c08601526e01000000000000000000000000000090910471ffffffffffffffffffffffffffffffffffff1660a085015260045490811660e0850152720100000000000000000000000000000000000090041661018083015260055461010083015260608201515f906124889065ffffffffffff1642613d84565b9050801561273a5760065461010084015160a08501516001945074010000000000000000000000000000000000000000830461ffff1692760100000000000000000000000000000000000000000000900468ffffffffffffffffff16919071ffffffffffffffffffffffffffffffffffff165f80806125186b033b2e3c9fd0803ce8000000808801908a906133e0565b915091508061254e57818502925081838161253557612535613d57565b04850361254e576b033b2e3c9fd0803ce8000000830494505b848402925084838161256257612562613d57565b04840361258157896101000151838161257d5761257d613d57565b0493505b50505060e087015160c088015160a08901516dffffffffffffffffffffffffffff92831692909116905f90651388000000009061ffff89169071ffffffffffffffffffffffffffffffffffff166125d89087613d84565b6125e29190613d97565b6125ec9190613dae565b9050801561266d575f6125fe856134b3565b60808c01516dffffffffffffffffffffffffffff1661261d9190613d44565b90506126298282613d84565b6126338483613d97565b61263d9190613dae565b60c08c01519093506dffffffffffffffffffffffffffff1661265f9084613d84565b6126699085613d44565b9350505b717fffffffffffffffffffffffffff8000000084116127325761268f846134d8565b71ffffffffffffffffffffffffffffffffffff1660a08b01526101008a018590524265ffffffffffff1660608b015260c08a01516dffffffffffffffffffffffffffff1682141580156126f057506dffffffffffffffffffffffffffff8211155b15612732576126fe8361197e565b6dffffffffffffffffffffffffffff1660e08b015261271c8261197e565b6dffffffffffffffffffffffffffff1660c08b01525b505050505050505b50919050565b5f8171ffffffffffffffffffffffffffffffffffff165f0361276357505f919050565b6107cf610a358371ffffffffffffffffffffffffffffffffffff166134b3565b5f80620f42406127ad6104d68560a0015171ffffffffffffffffffffffffffffffffffff16612740565b60808501516dffffffffffffffffffffffffffff1601019150620f42406127f58460c001516dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1690565b019050915091565b90811663ffffffff90811691161490565b5f805f61281a84612783565b909250905081816dffffffffffffffffffffffffffff8716028161284057612840613d57565b0495945050505050565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a08101919091526128c38161228c565b156103ea5760608101516002805465ffffffffffff9092167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090921691909117905560e0810151600480546dffffffffffffffffffffffffffff9283167fffffffffffffffffffffffffffffffffffff000000000000000000000000000090911617905560c082015160a083015171ffffffffffffffffffffffffffffffffffff166e0100000000000000000000000000000291161760035561010081015160055590565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146129ce576129ce613de6565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318503a1e85612a17575f612a19565b305b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015612a7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa39190613e2d565b91509150838015612ab2575080155b15612ae9576040517f13790bf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b612b0463ffffffff80851690849061352516565b15612b0e57505050565b612b1781613530565b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601612b6157612b61613de6565b73ffffffffffffffffffffffffffffffffffffffff8116612bf3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a37d54af6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612be1575f80fd5b505af1158015611ddb573d5f803e3d5ffd5b6040517f30f3166700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906330f31667906024015f604051808303815f87803b158015612be1575f80fd5b50565b8251612cd19073ffffffffffffffffffffffffffffffffffffffff1683306dffffffffffffffffffffffffffff85167f000000000000000000000000000000000000000000000000000000000000000061363d565b612cdf836080015182611de2565b6dffffffffffffffffffffffffffff166080939093018390525050600280547fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff166601000000000000909202919091179055565b5f611a9c610a356dffffffffffffffffffffffffffff808516908616613d44565b6dffffffffffffffffffffffffffff81161580612d9c57508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612da657505050565b73ffffffffffffffffffffffffffffffffffffffff8084165f908152600d602090815260408083209386168352600284019091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ddb576dffffffffffffffffffffffffffff8316811015612e4e576040517f9f428ac400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6dffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff85165f90815260028401602052604090209103908190555050505050565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600d602052604081209080612ef883546dffffffffffffffffffffffffffff8116917f8000000000000000000000000000000000000000000000000000000000000000909116151590565b90925090506dffffffffffffffffffffffffffff8086169083161015612f4a576040517f7374809300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6dffffffffffffffffffffffffffff8681169084160384547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff82161785559050612fa98a60c00151876137e8565b6dffffffffffffffffffffffffffff1660c08b01819052600380547fffffffffffffffffffffffffffffffffffff000000000000000000000000000016909117905581156130d05773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016636fc4fdc18a6dffffffffffffffffffffffffffff84166130476137f3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff90931660048401526024830191909152151560448201526064015f604051808303815f87803b1580156130b9575f80fd5b505af11580156130cb573d5f803e3d5ffd5b505050505b5f73ffffffffffffffffffffffffffffffffffffffff8a167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6dffffffffffffffffffffffffffff891660405190815260200160405180910390a373ffffffffffffffffffffffffffffffffffffffff808a1690888116908a167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6dffffffffffffffffffffffffffff89166dffffffffffffffffffffffffffff8b166040805192835260208301919091520160405180910390a450505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff821615806131fe57506131ee600284610180015163ffffffff1661352590919063ffffffff16565b80156131fe57506131fe82613881565b15613235576040517fc9e7063700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132438360800151826137e8565b6dffffffffffffffffffffffffffff90811660808501819052600280547fffffffffffffffffffffffff0000000000000000000000000000ffffffffffff166601000000000000909202919091179055612b179083908316855173ffffffffffffffffffffffffffffffffffffffff16919061398c565b6040517ffd6046d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063fd6046d7906024015f60405180830381865afa158015613347573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261338c9190810190613e8d565b511192915050565b5f61ffff82168082036133c957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b6064603f8216600a0a600683901c02049392505050565b5f80848015613495576001851680156133fb578693506133ff565b8493505b508360011c8560011c95505b851561348f578660801c15613423576001925061348f565b8687028181018181101561343c5760019450505061348f565b869004975050600186161561348457868402848882041461346757871561346757600193505061348f565b8181018181101561347d5760019450505061348f565b8690049450505b8560011c955061340b565b506134aa565b8480156134a4575f93506134a8565b8493505b505b50935093915050565b5f601f60016134c6638000000085613d44565b6134d09190613d84565b901c92915050565b5f717fffffffffffffffffffffffffff80000000821115611936576040517f9388c33400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b1663ffffffff161590565b600c5473ffffffffffffffffffffffffffffffffffffffff1680613580576040517f750f881700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808273ffffffffffffffffffffffffffffffffffffffff165f36866040516020016135ae93929190613f6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526135e691613fc6565b5f604051808303815f865af19150503d805f811461361f576040519150601f19603f3d011682016040523d82523d5f602084013e613624565b606091505b5091509150816136375761363781613a94565b50505050565b5f60608073ffffffffffffffffffffffffffffffffffffffff84161580159061367a575073ffffffffffffffffffffffffffffffffffffffff8511155b156137835760405173ffffffffffffffffffffffffffffffffffffffff888116602483015287811660448301528681166064830152898116608483015285169060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f36c78516000000000000000000000000000000000000000000000000000000001790525161373e9190613fc6565b5f604051808303815f865af19150503d805f8114613777576040519150601f19603f3d011682016040523d82523d5f602084013e61377c565b606091505b5090935091505b8261379a5761379488888888613ad5565b90935090505b826137de5781816040517f9773bb710000000000000000000000000000000000000000000000000000000081526004016137d592919061402a565b60405180910390fd5b5050505050505050565b5f611a9c828461404e565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663863789d76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190614075565b6040517f442b172c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063442b172c90602401602060405180830381865afa15801561390f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613933919061408e565b905073ffffffffffffffffffffffffffffffffffffffff8116158015906104e957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614159392505050565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390525f918291861690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905251613a3e9190613fc6565b5f604051808303815f865af19150503d805f8114613a77576040519150601f19603f3d011682016040523d82523d5f602084013e613a7c565b606091505b5091509150613a8b8282613c0d565b611ddb57611ddb815b805115613aa357805181602001fd5b6040517f2082e20000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390525f9160609183918291891690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905251613b949190613fc6565b5f604051808303815f865af19150503d805f8114613bcd576040519150601f19603f3d011682016040523d82523d5f602084013e613bd2565b606091505b5091509150613be18282613c0d565b613bec575f81613bfe565b600160405180602001604052805f8152505b93509350505094509492505050565b5f828015611a9c575081511580611a9c57506020825110158015611a9c575081806020019051810190611a9c9190614075565b5f60208284031215613c50575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114612c79575f80fd5b5f60208284031215613c88575f80fd5b8135611a9c81613c57565b5f8060408385031215613ca4575f80fd5b823591506020830135613cb681613c57565b809150509250929050565b5f805f60608486031215613cd3575f80fd5b833592506020840135613ce581613c57565b91506040840135613cf581613c57565b809150509250925092565b5f60208284031215613d10575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156107cf576107cf613d17565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b818103818111156107cf576107cf613d17565b80820281158282048414176107cf576107cf613d17565b5f82613de1577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b80516104ed81613c57565b805180151581146104ed575f80fd5b5f8060408385031215613e3e575f80fd5b8251613e4981613c57565b9150613e5760208401613e1e565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215613e9e575f80fd5b825167ffffffffffffffff80821115613eb5575f80fd5b818501915085601f830112613ec8575f80fd5b815181811115613eda57613eda613e60565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715613f1d57613f1d613e60565b604052918252848201925083810185019188831115613f3a575f80fd5b938501935b82851015613f5f57613f5085613e13565b84529385019392850192613f3f565b98975050505050505050565b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b5f5b83811015613fbe578181015183820152602001613fa6565b50505f910152565b5f8251613fd7818460208701613fa4565b9190910192915050565b5f8151808452613ff8816020860160208601613fa4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f61403c6040830185613fe1565b8281036020840152611a028185613fe1565b6dffffffffffffffffffffffffffff828116828216039080821115612ae957612ae9613d17565b5f60208284031215614085575f80fd5b611a9c82613e1e565b5f6020828403121561409e575f80fd5b8151611a9c81613c5756fea264697066735822122022916bb1154a070f3c06e559e50026060f8091934cf9309c7e3a458adcf9459a64736f6c634300081800330000000000000000000000000c9a3dd6b8f28529d72d7f9ce918d493519ee3830000000000000000000000004cd6bf1d183264c02be7748cb5cd3a47d013351b000000000000000000000000eaddd21618ad5deb412d3fd23580fd461c106b540000000000000000000000000d52d06ceb8dcdeeb40cfd9f17489b350dd7f8a3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3