584 txs
1.6k calls
constructor
constructor(string name, string symbol, address _asset, address _nonfungiblePositionManager, address _interestRateModel, address _oracle, address _permit2)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
BORROW_SAFETY_BUFFER_X32
viewfunction BORROW_SAFETY_BUFFER_X32() view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256 assets)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256 shares)
dailyDebtIncreaseLimitLastReset
viewfunction dailyDebtIncreaseLimitLastReset() view returns (uint32)
dailyDebtIncreaseLimitLeft
viewfunction dailyDebtIncreaseLimitLeft() view returns (uint256)
dailyDebtIncreaseLimitMin
viewfunction dailyDebtIncreaseLimitMin() view returns (uint256)
dailyLendIncreaseLimitLastReset
viewfunction dailyLendIncreaseLimitLastReset() view returns (uint32)
dailyLendIncreaseLimitLeft
viewfunction dailyLendIncreaseLimitLeft() view returns (uint256)
dailyLendIncreaseLimitMin
viewfunction dailyLendIncreaseLimitMin() view returns (uint256)
debtSharesTotal
viewfunction debtSharesTotal() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
emergencyAdmin
viewfunction emergencyAdmin() view returns (address)
factory
viewfunction factory() view returns (address)
globalDebtLimit
viewfunction globalDebtLimit() view returns (uint256)
globalLendLimit
viewfunction globalLendLimit() view returns (uint256)
interestRateModel
viewfunction interestRateModel() view returns (address)
lastDebtExchangeRateX96
viewfunction lastDebtExchangeRateX96() view returns (uint256)
lastExchangeRateUpdate
viewfunction lastExchangeRateUpdate() view returns (uint64)
lastLendExchangeRateX96
viewfunction lastLendExchangeRateX96() view returns (uint256)
lendInfo
viewfunction lendInfo(address account) view returns (uint256 amount)
loanAtIndex
viewfunction loanAtIndex(address owner, uint256 index) view returns (uint256)
loanCount
viewfunction loanCount(address owner) view returns (uint256)
loanInfo
viewfunction loanInfo(uint256 tokenId) view returns (uint256 debt, uint256 fullValue, uint256 collateralValue, uint256 liquidationCost, uint256 liquidationValue)
loans
viewfunction loans(uint256) view returns (uint256 debtShares)
MAX_COLLATERAL_FACTOR_X32
viewfunction MAX_COLLATERAL_FACTOR_X32() view returns (uint32)
MAX_DAILY_DEBT_INCREASE_X32
viewfunction MAX_DAILY_DEBT_INCREASE_X32() view returns (uint32)
MAX_DAILY_LEND_INCREASE_X32
viewfunction MAX_DAILY_LEND_INCREASE_X32() view returns (uint32)
MAX_LIQUIDATION_PENALTY_X32
viewfunction MAX_LIQUIDATION_PENALTY_X32() view returns (uint32)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
MIN_LIQUIDATION_PENALTY_X32
viewfunction MIN_LIQUIDATION_PENALTY_X32() view returns (uint32)
MIN_RESERVE_PROTECTION_FACTOR_X32
viewfunction MIN_RESERVE_PROTECTION_FACTOR_X32() view returns (uint32)
minLoanSize
viewfunction minLoanSize() view returns (uint256)
name
viewfunction name() view returns (string)
nonfungiblePositionManager
viewfunction nonfungiblePositionManager() view returns (address)
oracle
viewfunction oracle() view returns (address)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address owner)
pendingOwner
viewfunction pendingOwner() view returns (address)
permit2
viewfunction permit2() view returns (address)
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)
reserveFactorX32
viewfunction reserveFactorX32() view returns (uint32)
reserveProtectionFactorX32
viewfunction reserveProtectionFactorX32() view returns (uint32)
symbol
viewfunction symbol() view returns (string)
tokenConfigs
viewfunction tokenConfigs(address) view returns (uint32 collateralFactorX32, uint32 collateralValueLimitFactorX32, uint192 totalDebtShares)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
transformApprovals
viewfunction transformApprovals(address, uint256, address) view returns (bool)
transformedTokenId
viewfunction transformedTokenId() view returns (uint256)
transformerAllowList
viewfunction transformerAllowList(address) view returns (bool)
vaultInfo
viewfunction vaultInfo() view returns (uint256 debt, uint256 lent, uint256 balance, uint256 reserves, uint256 debtExchangeRateX96, uint256 lendExchangeRateX96)
acceptOwnership
nonpayablefunction acceptOwnership()
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
approveTransform
nonpayablefunction approveTransform(uint256 tokenId, address target, bool isActive)
borrow
nonpayablefunction borrow(uint256 tokenId, uint256 assets)
create
nonpayablefunction create(uint256 tokenId, address recipient)
createWithPermit
nonpayablefunction createWithPermit(uint256 tokenId, address recipient, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
decreaseLiquidityAndCollect
nonpayablefunction decreaseLiquidityAndCollect(tuple params) returns (uint256 amount0, uint256 amount1)
deposit
nonpayablefunction deposit(uint256 assets, address receiver, bytes permitData) returns (uint256)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
liquidate
nonpayablefunction liquidate(tuple params) returns (uint256 amount0, uint256 amount1)
mint
nonpayablefunction mint(uint256 shares, address receiver, bytes permitData) returns (uint256)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
onERC721Received
nonpayablefunction onERC721Received(address, address from, uint256 tokenId, bytes data) returns (bytes4)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256)
remove
nonpayablefunction remove(uint256 tokenId, address recipient, bytes data)
renounceOwnership
nonpayablefunction renounceOwnership()
repay
nonpayablefunction repay(uint256 tokenId, uint256 amount, bool isShare, bytes permitData) returns (uint256 assets, uint256 shares)
repay
nonpayablefunction repay(uint256 tokenId, uint256 amount, bool isShare) returns (uint256 assets, uint256 shares)
setEmergencyAdmin
nonpayablefunction setEmergencyAdmin(address admin)
setLimits
nonpayablefunction setLimits(uint256 _minLoanSize, uint256 _globalLendLimit, uint256 _globalDebtLimit, uint256 _dailyLendIncreaseLimitMin, uint256 _dailyDebtIncreaseLimitMin)
setReserveFactor
nonpayablefunction setReserveFactor(uint32 _reserveFactorX32)
setReserveProtectionFactor
nonpayablefunction setReserveProtectionFactor(uint32 _reserveProtectionFactorX32)
setTokenConfig
nonpayablefunction setTokenConfig(address token, uint32 collateralFactorX32, uint32 collateralValueLimitFactorX32)
setTransformer
nonpayablefunction setTransformer(address transformer, bool active)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transform
nonpayablefunction transform(uint256 tokenId, address transformer, bytes data) returns (uint256 newTokenId)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256)
withdrawReserves
nonpayablefunction withdrawReserves(uint256 amount, address receiver)
events
Add
event Add(uint256 indexed tokenId, address owner, uint256 oldTokenId)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ApprovedTransform
event ApprovedTransform(uint256 indexed tokenId, address owner, address target, bool isActive)
Borrow
event Borrow(uint256 indexed tokenId, address owner, uint256 assets, uint256 shares)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
ExchangeRateUpdate
event ExchangeRateUpdate(uint256 debtExchangeRateX96, uint256 lendExchangeRateX96)
Liquidate
event Liquidate(uint256 indexed tokenId, address liquidator, address owner, uint256 value, uint256 cost, uint256 amount0, uint256 amount1, uint256 reserve, uint256 missing)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Remove
event Remove(uint256 indexed tokenId, address owner, address recipient)
Repay
event Repay(uint256 indexed tokenId, address repayer, address owner, uint256 assets, uint256 shares)
SetEmergencyAdmin
event SetEmergencyAdmin(address emergencyAdmin)
SetLimits
event SetLimits(uint256 minLoanSize, uint256 globalLendLimit, uint256 globalDebtLimit, uint256 dailyLendIncreaseLimitMin, uint256 dailyDebtIncreaseLimitMin)
SetReserveFactor
event SetReserveFactor(uint32 reserveFactorX32)
SetReserveProtectionFactor
event SetReserveProtectionFactor(uint32 reserveProtectionFactorX32)
SetTokenConfig
event SetTokenConfig(address token, uint32 collateralFactorX32, uint32 collateralValueLimitFactorX32)
SetTransformer
event SetTransformer(address transformer, bool active)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawCollateral
event WithdrawCollateral(uint256 indexed tokenId, address owner, address recipient, uint128 liquidity, uint256 amount0, uint256 amount1)
WithdrawReserves
event WithdrawReserves(uint256 amount, address receiver)
errors
AmountError
error AmountError()
ChainlinkPriceError
error ChainlinkPriceError()
CollateralFactorExceedsMax
error CollateralFactorExceedsMax()
CollateralFail
error CollateralFail()
CollateralValueLimit
error CollateralValueLimit()
CollectError
error CollectError()
DailyDebtIncreaseLimit
error DailyDebtIncreaseLimit()
DailyLendIncreaseLimit
error DailyLendIncreaseLimit()
DebtChanged
error DebtChanged()
EtherSendFailed
error EtherSendFailed()
ExceedsMaxReward
error ExceedsMaxReward()
GlobalDebtLimit
error GlobalDebtLimit()
GlobalLendLimit
error GlobalLendLimit()
InsufficientLiquidity
error InsufficientLiquidity()
InterestNotUpdated
error InterestNotUpdated()
InvalidConfig
error InvalidConfig()
InvalidPool
error InvalidPool()
InvalidToken
error InvalidToken()
MinLoanSize
error MinLoanSize()
MissingSwapData
error MissingSwapData()
NeedsRepay
error NeedsRepay()
NoEtherToken
error NoEtherToken()
NoLiquidity
error NoLiquidity()
NoSharesRepayed
error NoSharesRepayed()
NotConfigured
error NotConfigured()
NotEnoughReward
error NotEnoughReward()
NotLiquidatable
error NotLiquidatable()
NotReady
error NotReady()
NotSupportedFeeTier
error NotSupportedFeeTier()
NotSupportedWhatToDo
error NotSupportedWhatToDo()
NotWETH
error NotWETH()
PriceDifferenceExceeded
error PriceDifferenceExceeded()
Reentrancy
error Reentrancy()
SameRange
error SameRange()
SameToken
error SameToken()
SelfSend
error SelfSend()
SequencerDown
error SequencerDown()
SequencerGracePeriodNotOver
error SequencerGracePeriodNotOver()
SequencerUptimeFeedInvalid
error SequencerUptimeFeedInvalid()
SlippageError
error SlippageError()
SwapAmountTooLarge
error SwapAmountTooLarge()
SwapFailed
error SwapFailed()
TooMuchEtherSent
error TooMuchEtherSent()
TransferError
error TransferError()
TransformFailed
error TransformFailed()
TransformNotAllowed
error TransformNotAllowed()
TWAPCheckFailed
error TWAPCheckFailed()
Unauthorized
error Unauthorized()
WrongContract
error WrongContract()
creation bytecode
0x6101606040526c010000000000000000000000006009819055600a556200002d60646401000000006200023b565b6019600c6101000a81548163ffffffff021916908363ffffffff16021790555034801562000059575f80fd5b5060405162006606380380620066068339810160408190526200007c9162000331565b868660036200008c83826200048b565b5060046200009b82826200048b565b505050620000b8620000b2620001c860201b60201c565b620001cc565b6001600160a01b0385166101208190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000102573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000128919062000557565b60ff16610140526001600160a01b03841660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000178573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200019e919062000580565b6001600160a01b0390811660a05292831660c05290821660e0521661010052506200059e92505050565b3390565b600680546001600160a01b0319169055620001e781620001ea565b50565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f826200025657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200027f575f80fd5b81516001600160401b03808211156200029c576200029c6200025b565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c76200025b565b8160405283815260209250866020858801011115620002e4575f80fd5b5f91505b83821015620003075785820183015181830184015290820190620002e8565b5f602085830101528094505050505092915050565b6001600160a01b0381168114620001e7575f80fd5b5f805f805f805f60e0888a03121562000348575f80fd5b87516001600160401b03808211156200035f575f80fd5b6200036d8b838c016200026f565b985060208a015191508082111562000383575f80fd5b50620003928a828b016200026f565b9650506040880151620003a5816200031c565b6060890151909550620003b8816200031c565b6080890151909450620003cb816200031c565b60a0890151909350620003de816200031c565b60c0890151909250620003f1816200031c565b8091505092959891949750929550565b600181811c908216806200041657607f821691505b6020821081036200043557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200048657805f5260205f20601f840160051c81016020851015620004625750805b601f840160051c820191505b8181101562000483575f81556001016200046e565b50505b505050565b81516001600160401b03811115620004a757620004a76200025b565b620004bf81620004b8845462000401565b846200043b565b602080601f831160018114620004f5575f8415620004dd5750858301515b5f19600386901b1c1916600185901b1785556200054f565b5f85815260208120601f198616915b82811015620005255788860151825594840194600190910190840162000504565b50858210156200054357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000568575f80fd5b815160ff8116811462000579575f80fd5b9392505050565b5f6020828403121562000591575f80fd5b815162000579816200031c565b60805160a05160c05160e051610100516101205161014051615f28620006de5f395f6105a801525f818161060b01528181610c5f01528181610f4f01528181611fad015281816120a10152818161223c01528181612591015281816139b301528181613aa401528181613c8f01528181613d8001528181613e5801526146e701525f81816104bc0152818161202f01528181613a320152613d0e01525f818161084601528181613e2801526142c701525f8181610ba60152612e6101525f610a6801525f81816109ff01528181610fd90152818161125c015281816114580152818161193701528181611aa801528181611b5a01528181612278015281816127ad015281816129160152818161297701528181612b02015281816131b50152818161421e01528181614418015281816144cf0152614c030152615f285ff3fe608060405234801561000f575f80fd5b5060043610610412575f3560e01c806301de9ba81461041657806301e1d1141461042b57806306fdde031461044657806307a2d13a1461045b578063095ea7b31461046e5780630a28a477146104915780630ecbcdab146104a457806312261ee7146104b7578063150b7a02146104eb57806318160ddd146105175780631b69dc5f1461051f57806323b872dd1461058e578063313ce567146105a157806335da3394146105d25780633767ecaf146105e557806338d52e0f14610606578063395093511461062d5780633d4b6b6414610640578063402d267d146106535780634483f8a114610666578063464744cc1461066f5780634ac17015146106845780634cdad5061461045b5780634f0564a81461068d578063501ec738146106b557806351a40da3146106ea5780635b81aaf2146106f25780635ced8385146106fb5780635d76e1981461071d578063625138ef146107305780636352211e146107635780636e553f651461078b5780636fcf2e091461079e5780636fd52298146107c957806370905dce146107dc57806370a08231146107ef578063715018a614610802578063729dbda11461080a57806373c025191461081357806378cc76441461082657806379ba5097146108395780637dc0d1d01461084157806381b8a2da146108685780638349d6be14610870578063841c8983146108945780638518da611461089c578063879f4130146108a557806387c5ac6f146108bc57806387e92dbf146108c55780638da5cb5b146108cd578063936b8dd0146108d557806394bf804d146108e857806395d89b41146108fb5780639642370c146109035780639995dfd8146109165780639bcf51fe14610929578063a2f182d41461093c578063a457c2d71461094f578063a628a9c014610962578063a9059cbb1461096a578063a95558aa1461097d578063ab37994914610994578063ac9650d8146109a7578063ae41abab146109c7578063b0ea65e6146109d0578063b3d7f6b9146109e7578063b44a2722146109fa578063b460af9414610a21578063ba08765214610a34578063be757d0614610a47578063be7ae9aa14610a50578063c45a015514610a63578063c63d75b614610a8a578063c6e6f59214610a9d578063cabd329f14610ab0578063cd2fc4f714610ac3578063ce96cb7714610acc578063cf09b4ae14610adf578063d4759f0614610ae8578063d905777e14610afb578063dd62ed3e14610b0e578063dd6dc33214610b21578063ddd8aafe14610962578063e1ec3c6814610b38578063e30c397814610b57578063ebdab50c14610b5f578063ef8b30f714610a9d578063f01fe69214610b68578063f2fde38b14610b7b578063f30a0a7914610b8e578063f3fdb15a14610ba1578063faa9bce914610bc8575b5f80fd5b610429610424366004614ff5565b610bdb565b005b610433610c46565b6040519081526020015b60405180910390f35b61044e610cd8565b60405161043d919061505b565b61043361046936600461506d565b610d68565b61048161047c366004615098565b610d87565b604051901515815260200161043d565b61043361049f36600461506d565b610da0565b6104296104b23660046150c2565b610db9565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b60405161043d91906150e2565b6104fe6104f936600461513a565b610fcd565b6040516001600160e01b0319909116815260200161043d565b600254610433565b61056261052d3660046151a7565b60076020525f908152604090205463ffffffff80821691600160201b810490911690600160401b90046001600160c01b031683565b6040805163ffffffff94851681529390921660208401526001600160c01b03169082015260600161043d565b61048161059c3660046151c2565b61115e565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161043d565b6104296105e03660046151a7565b611181565b6105f86105f3366004615200565b6111d4565b60405161043d929190615217565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b61048161063b366004615098565b61158c565b61042961064e366004614ff5565b6115ad565b6104336106613660046151a7565b61163e565b61043360115481565b6106776116a3565b60405161043d9190615225565b610433600b5481565b61043361069b3660046151a7565b6001600160a01b03165f9081526013602052604090205490565b6106bd6116b5565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161043d565b610677611705565b61043360085481565b6104816107093660046151a7565b60176020525f908152604090205460ff1681565b6105f861072b366004615243565b611720565b61048161073e36600461528a565b601860209081525f938452604080852082529284528284209052825290205460ff1681565b6104de61077136600461506d565b5f908152601560205260409020546001600160a01b031690565b6104336107993660046152c9565b611771565b6019546107b1906001600160401b031681565b6040516001600160401b03909116815260200161043d565b6105f86107d73660046152f7565b611796565b601a546104de906001600160a01b031681565b6104336107fd3660046151a7565b6117be565b6104296117d8565b61043360095481565b610433610821366004615322565b6117eb565b610433610834366004615322565b61183a565b610429611bf9565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b610677611c7c565b61088361087e36600461506d565b611c8d565b60405161043d959493929190615379565b610677611cf0565b610433600f5481565b60195461067790600160401b900463ffffffff1681565b61043360105481565b610433611d01565b6104de611d25565b6104296108e336600461539c565b611d34565b6104336108f63660046152c9565b611de9565b61044e611e0f565b6105f86109113660046153d0565b611e1e565b610429610924366004615406565b61220e565b610433610937366004615098565b61232c565b61042961094a366004615432565b612366565b61048161095d366004615098565b612439565b6106776124b3565b610481610978366004615098565b6124c2565b60195461067790600160801b900463ffffffff1681565b6104296109a23660046152c9565b6124cf565b6109ba6109b5366004615469565b6125fb565b60405161043d91906154d7565b61043360165481565b60195461067790600160a01b900463ffffffff1681565b6104336109f536600461506d565b6126e0565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b610433610a2f366004615539565b6126f9565b610433610a42366004615539565b612711565b610433600c5481565b610429610a5e366004615322565b61272a565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b610433610a983660046151a7565b612863565b610433610aab36600461506d565b6128c4565b610429610abe36600461556d565b6128dc565b610433600e5481565b610433610ada3660046151a7565b612a1b565b610433600d5481565b610433610af63660046151a7565b612a64565b610433610b093660046151a7565b612a7d565b610433610b1c3660046155ca565b612ac7565b60195461067790600160601b900463ffffffff1681565b610433610b4636600461506d565b60126020525f908152604090205481565b6104de612af1565b610433600a5481565b610429610b763660046152c9565b612b00565b610429610b893660046151a7565b612ba2565b610429610b9c3660046155f6565b612c08565b6104de7f000000000000000000000000000000000000000000000000000000000000000081565b610433610bd6366004615322565b612cd9565b610be3612d27565b610beb612d86565b50506019805463ffffffff60401b1916600160401b63ffffffff8416021790556040517f43c05d541e7400b8570cf6d3a9daa912d6fc6ff8ec51aa377477c3b8882738ba90610c3b908390615225565b60405180910390a150565b6040516370a0823160e01b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610c949030906004016150e2565b602060405180830381865afa158015610caf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd39190615638565b905090565b606060038054610ce79061564f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d139061564f565b8015610d5e5780601f10610d3557610100808354040283529160200191610d5e565b820191905f5260205f20905b815481529060010190602001808311610d4157829003601f168201915b5050505050905090565b5f80610d72612e06565b915050610d8083825f612f98565b9392505050565b5f33610d94818585612fa9565b60019150505b92915050565b5f80610daa612e06565b915050610d80838260016130cc565b5f8215801590610dca575082601654145b8015610de45750335f9081526017602052604090205460ff165b5f848152601560205260409020549091506001600160a01b031681158015610e1557506001600160a01b0381163314155b15610e32576040516282b42960e81b815260040160405180910390fd5b5f80610e3c612d86565b91509150610e4a815f6130dd565b5f86815260126020526040812090610e64878560016130cc565b90505f81835f0154610e769190615695565b808455600854909150610e8a908390615695565b600855600b54610e9b90865f6130cc565b6008541115610ebd576040516378799b5160e01b815260040160405180910390fd5b601154881115610ee05760405163de6724b560e01b815260040160405180910390fd5b87601154610eee91906156a8565b601155610f07898686610f0186866156a8565b8561318c565b5f610f1482876001612f98565b9050600d54811015610f3957604051630313af9b60e01b815260040160405180910390fd5b87610f4a57610f4a8a826001613523565b610f757f0000000000000000000000000000000000000000000000000000000000000000338b613558565b604080516001600160a01b0389168152602081018b90529081018490528a907fbf608caf5cc20aaeea74ecfce286b511362b0ecbaa0e56ded00f76f7e2e39c449060600160405180910390a250505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614158061100e57506001600160a01b03851630145b1561102c57604051630d348b9b60e41b815260040160405180910390fd5b5f80611036612d86565b60165491935091505f8190036110b25787851561105c57611059868801886151a7565b90505b60408051602080820183525f8083528b81526012909152919091209051905561108581896135ae565b875f80516020615e4c833981519152825f6040516110a49291906156bb565b60405180910390a250611149565b808714611149575f8181526015602090815260408083205460168b9055601280845282852054835180860185528181528d87529190945291909320905190556001600160a01b0390911690611107828a6135ae565b885f80516020615e4c83398151915283856040516111269291906156bb565b60405180910390a2611139838686613606565b6111468986865f8561318c565b50505b50630a85bd0160e11b98975050505050505050565b5f3361116b858285613636565b6111768585856136a8565b506001949350505050565b611189612d27565b601a80546001600160a01b0319166001600160a01b0383161790556040517fb72d36542c9b761c0d9b215bddd7b59c055dd4fb2f6c5da22e964720458ddff190610c3b9083906150e2565b5f806016545f146111f85760405163d17f4bd360e01b815260040160405180910390fd5b82355f908152601560205260409020546001600160a01b0316338114611230576040516282b42960e81b815260040160405180910390fd5b5f611239612d86565b50905061124c60408601602087016156e8565b6001600160801b03161561133b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c49ccbe6040518060a00160405280885f013581526020018860200160208101906112b091906156e8565b6001600160801b0316815260200188604001358152602001886060013581526020018860c001358152506040518263ffffffff1660e01b81526004016112f69190615703565b60408051808303815f875af1158015611311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113359190615741565b90945092505b6040805160808101909152853581525f9060208101611361610100890160e08a016151a7565b6001600160a01b031681526020016001600160801b0361138760a08a0160808b016156e8565b6001600160801b0316146113c5576113c06113a860a08a0160808b016156e8565b6113bb906001600160801b031689615695565b613837565b6113ce565b6001600160801b035b6001600160801b0390811682526020909101906113f160c08a0160a08b016156e8565b6001600160801b03161461142a5761142561141260c08a0160a08b016156e8565b6113bb906001600160801b031688615695565b611433565b6001600160801b035b6001600160801b0316905260405163fc6f786560e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659061148d908490600401615763565b60408051808303815f875af11580156114a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114cc9190615741565b87355f90815260126020526040812054929750909550906114ef90846001612f98565b90506114fe8735826001613523565b86357fd26a2a5f7b40ef9667719719e2ef95bf8efa17c5bb9e145975ab198f55ca06f4856115336101008b0160e08c016151a7565b61154360408c0160208d016156e8565b604080516001600160a01b0394851681529390921660208401526001600160801b031690820152606081018990526080810188905260a00160405180910390a250505050915091565b5f33610d9481858561159e8383612ac7565b6115a89190615695565b612fa9565b6115b5612d27565b6115c46064600160201b6157ba565b63ffffffff168163ffffffff1610156115f0576040516306b7c75960e31b815260040160405180910390fd5b6019805463ffffffff60601b1916600160601b63ffffffff8416021790556040517f40b8b8da066122f1e5b938f166c21076e763950b2b489a4205edfd641a9c112490610c3b908390615225565b5f80611648612e06565b9150505f61166061165860025490565b836001612f98565b9050600c54811061167457505f9392505050565b5f81600c5461168391906156a8565b9050600f5481111561169b575050600f549392505050565b949350505050565b6116b26064600160201b6157ba565b81565b5f805f805f806116c3612e06565b90925090506116d28282613890565b60085491955093506116e690836001612f98565b95506116fb6116f460025490565b825f612f98565b9450909192939495565b6064611716600160201b605a6157d9565b6116b291906157ba565b5f8061176387878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506138fa92505050565b909890975095505050505050565b5f8061178d83855f60405180602001604052805f815250613bb6565b95945050505050565b5f806117b285858560405180602001604052805f8152506138fa565b90969095509350505050565b6001600160a01b03165f9081526020819052604090205490565b6117e0612d27565b6117e95f613e09565b565b5f8061182f8587600187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613bb692505050565b509695505050505050565b5f84158061186057506001600160a01b0384165f9081526017602052604090205460ff16155b1561187e5760405163d17f4bd360e01b815260040160405180910390fd5b6016541561189f5760405163558a1e0360e11b815260040160405180910390fd5b60168590555f6118ad612d86565b505f878152601560205260409020549091506001600160a01b031633811480159061190357506001600160a01b0381165f9081526018602090815260408083208a8452825280832033845290915290205460ff16155b15611920576040516282b42960e81b815260040160405180910390fd5b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b39061196e9089908b906004016156bb565b5f604051808303815f87803b158015611985575f80fd5b505af1158015611997573d5f803e3d5ffd5b505050505f866001600160a01b031686866040516119b69291906157f0565b5f604051808303815f865af19150503d805f81146119ef576040519150601f19603f3d011682016040523d82523d5f602084013e6119f4565b606091505b5050905080611a16576040516352e5bd8f60e01b815260040160405180910390fd5b6016549350838814158015611a5557506001600160a01b0382165f9081526018602090815260408083208b8452825280832033845290915290205460ff165b15611a90576001600160a01b0382165f90815260186020908152604080832087845282528083203384529091529020805460ff191660011790555b6040516331a9108f60e11b8152600481018590525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015611af5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b19919061580a565b90506001600160a01b0381163014611b43576040516282b42960e81b815260040160405180910390fd5b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390611b91905f9089906004016156bb565b5f604051808303815f87803b158015611ba8575f80fd5b505af1158015611bba573d5f803e3d5ffd5b5050505f86815260126020526040812054909150611bda90866001612f98565b9050611be786825f613523565b50505f60165550919695505050505050565b3380611c03612af1565b6001600160a01b031614611c705760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b611c7981613e09565b50565b6064611716600160201b60026157d9565b5f805f805f80611c9b612e06565b505f88815260126020526040902054909150611cb990826001612f98565b95505f611cc788885f613e22565b509097509550905080611ce557611cdf878787613f58565b50945092505b505091939590929450565b6064611716600160201b600a6157d9565b6064611d12600160201b605f6157d9565b611d1c91906157ba565b63ffffffff1681565b6005546001600160a01b031690565b5f838152601560205260409020546001600160a01b03163314611d69576040516282b42960e81b815260040160405180910390fd5b335f81815260186020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff19168615159081179091558151948552918401929092529082015283907f44013414411d9b618e7674007dae03364d11d6be08d121c1aef8aed60dce7c519060600160405180910390a2505050565b5f80611e068385600160405180602001604052805f815250613bb6565b50949350505050565b606060048054610ce79061564f565b5f806016545f14611e425760405163d17f4bd360e01b815260040160405180910390fd5b611e966040518061016001604052805f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b611e9e612d86565b60208301819052908252611eb2905f6130dd565b83355f908152601260205260409020548151611ed19082906001612f98565b60408301819052611ee5908635905f613e22565b6101408601526101208501526101008401521580156060840152611f1c57604051636ef5bcdd60e11b815260040160405180910390fd5b611f358260400151836101000151846101200151613f58565b60c0850181905260a0850191909152608084019190915215611f6d57611f678260c00151835f01518460200151614139565b60e08301525b60a0820151156120cc57611f846080860186615825565b15905061209c575f80611f9a6080880188615825565b810190611fa7919061591b565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316825f01515f01516001600160a01b0316146120035760405163c1ab6dc160e01b815260040160405180910390fd5b60408051808201825230815260a08601516020820152905163187945bd60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916330f28b7a9161206891869133908790600401615a13565b5f604051808303815f87803b15801561207f575f80fd5b505af1158015612091573d5f803e3d5ffd5b5050505050506120cc565b6120cc7f000000000000000000000000000000000000000000000000000000000000000033308560a001516141c4565b806008546120da91906156a8565b60085560408201516011546120ef9190615695565b6011556080808301516101008401516101408501516121279389359392919061211d908b0160608c016151a7565b8a60a001356141fc565b909450925060208501358410806121415750846040013583105b1561215f57604051630d4205a160e11b815260040160405180910390fd5b8151602083015161217291873591613606565b84355f81815260156020908152604091829020546101008681015160a08089015160c0808b015160e0808d01518a513381526001600160a01b0390991699890199909952988701949094526060860191909152608085018c90529084018a9052830152928101919091527fed06e9846d4eeeab7ba0ef79c085287948a840eb50234fd66642450a000447ca910160405180910390a25050915091565b612216612d27565b6001600160a01b038216158061223457506001600160a01b03821630145b8061227057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b806122ac57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b156122ca576040516306b7c75960e31b815260040160405180910390fd5b6001600160a01b0382165f81815260176020908152604091829020805460ff19168515159081179091558251938452908301527f5f19fbf9b5e6a563049dbbb977cfe0883c49796e984917f433e1d6464fca1d4c910160405180910390a15050565b6001600160a01b0382165f90815260136020526040812080548390811061235557612355615a65565b905f5260205f200154905092915050565b601a546001600160a01b0316331480159061239a5750612384611d25565b6001600160a01b0316336001600160a01b031614155b156123b7576040516282b42960e81b815260040160405180910390fd5b600d859055600c849055600b839055600e82905560108190555f6123d9612d86565b9150506123e7816001614555565b6123f28160016130dd565b7f185526bcdccdbc9ed8384466622ff4e774b1d20f636ff608d4a7b53c1407193d8686868686604051612429959493929190615379565b60405180910390a1505050505050565b5f33816124468286612ac7565b9050838110156124a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611c67565b6111768286868403612fa9565b6116b2600a600160201b6157ba565b5f33610d948185856136a8565b6124d7612d27565b5f806124e1612d86565b60195491935091505f90600160201b9063ffffffff600160601b9091041661251361250b60025490565b856001612f98565b61251d91906157d9565b61252791906157ba565b90505f806125358585613890565b915091505f838211612547575f612551565b61255184836156a8565b90505f8184116125615783612563565b815b9050808911156125865760405163bb55fd2760e01b815260040160405180910390fd5b88156125b7576125b77f0000000000000000000000000000000000000000000000000000000000000000898b613558565b7f368f2fabdfe1d69c0eec91d6a2b8b387d2d8fb1ce8fd40159dd4608451a608f189896040516125e8929190615a79565b60405180910390a1505050505050505050565b604080515f815260208101909152606090826001600160401b0381111561262457612624615867565b60405190808252806020026020018201604052801561265757816020015b60608152602001906001900390816126425790505b5091505f5b838110156126d8576126b33086868481811061267a5761267a615a65565b905060200281019061268c9190615825565b8560405160200161269f93929190615a90565b6040516020818303038152906040526145fd565b8382815181106126c5576126c5615a65565b602090810291909101015260010161265c565b505092915050565b5f806126ea612e06565b915050610d8083826001612f98565b5f806127078484875f614622565b9695505050505050565b5f806127208484876001614622565b5095945050505050565b5f848152601560205260409020546001600160a01b0316338114612760576040516282b42960e81b815260040160405180910390fd5b5f858152601260205260409020541561278c576040516328922c1360e11b815260040160405180910390fd5b6127968186614785565b604051635c46a7ef60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b88d4fde906127ea90309088908a9089908990600401615ab5565b5f604051808303815f87803b158015612801575f80fd5b505af1158015612813573d5f803e3d5ffd5b5050604080516001600160a01b038086168252881660208201528893507faa54a5e34aaca4384ef48e383f5fee5641ccb3ecd513304ec69e7bd4dd5dbe9c92500160405180910390a25050505050565b5f8061286d612e06565b9150505f61287d61165860025490565b9050600c54811061289157505f9392505050565b5f81600c546128a091906156a8565b9050600f548111156128b95761178d600f54845f6130cc565b61178d81845f6130cc565b5f806128ce612e06565b915050610d8083825f6130cc565b604051637ac2ff7b60e01b8152306004820152602481018790526044810185905260ff841660648201526084810183905260a481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637ac2ff7b9060c4015f604051808303815f87803b15801561295f575f80fd5b505af1158015612971573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b88d4fde333089896040516020016129b891906150e2565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016129e69493929190615b07565b5f604051808303815f87803b1580156129fd575f80fd5b505af1158015612a0f573d5f803e3d5ffd5b50505050505050505050565b5f805f612a26612e06565b915091505f612a34856117be565b90505f612a4282845f612f98565b90505f612a4f8585613890565b50905081811115612707575095945050505050565b5f80612a6e612e06565b915050610d806116f4846117be565b5f805f612a88612e06565b915091505f612a96856117be565b90505f612aa38484613890565b5090505f612ab282855f6130cc565b90508281111561270757509095945050505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6006546001600160a01b031690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b88d4fde33308585604051602001612b4391906150e2565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401612b719493929190615b07565b5f604051808303815f87803b158015612b88575f80fd5b505af1158015612b9a573d5f803e3d5ffd5b505050505050565b612baa612d27565b600680546001600160a01b0319166001600160a01b038316908117909155612bd0611d25565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612c10612d27565b6064612c21600160201b605a6157d9565b612c2b91906157ba565b63ffffffff168263ffffffff161115612c5757604051631489e7d760e21b815260040160405180910390fd5b6001600160a01b0383165f81815260076020908152604091829020805463ffffffff8781166001600160401b03199092168217600160201b91881691820217835584519586529285015291830152907fb771fa4750768d51684d94f7efedc2c018719964a64d88b60bd69971fff0346f9060600160405180910390a150505050565b5f80612d1c85875f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613bb692505050565b979650505050505050565b33612d30611d25565b6001600160a01b0316146117e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611c67565b6019545f9081906001600160401b0316421115612dfa57612da5612e06565b6009829055600a819055601980546001600160401b031916426001600160401b031617905560405191935091505f80516020615eb383398151915290612dee9084908490615217565b60405180910390a19091565b5050600954600a549091565b600954600a546019545f92839290916001600160401b031683612e2982426156a8565b90508015801590612e3957508115155b15612f89575f612e498585613890565b5090505f612e5b600854876001612f98565b90505f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633af106e585856040518363ffffffff1660e01b8152600401612ead929190615217565b6040805180830381865afa158015612ec7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615741565b6019549193509150612f1e90612f1290600160401b900463ffffffff16600160201b6156a8565b8290600160201b6148a7565b9050600160401b82612f30878b6157d9565b612f3a91906157d9565b612f4491906157ba565b612f4e9089615695565b9950600160401b81612f60878a6157d9565b612f6a91906157d9565b612f7491906157ba565b612f7e9088615695565b985050505050612f90565b8395508294505b505050509091565b5f61169b8484600160601b8561498c565b6001600160a01b03831661300b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611c67565b6001600160a01b03821661306c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611c67565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61169b84600160601b858561498c565b5f6130eb62015180426157ba565b9050818061310b575060195463ffffffff600160a01b9091048116908216115b15613187575f600160201b613121600a826157ba565b63ffffffff1661313b61313360025490565b876001612f98565b61314591906157d9565b61314f91906157ba565b905080601054116131605780613164565b6010545b601155506019805463ffffffff60a01b1916600160a01b63ffffffff8416021790555b505050565b80821461351c5760405163133f757160e31b8152600481018690525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906399fbab889060240161018060405180830381865afa1580156131fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061321f9190615b67565b505050505050505093509350505082841115613302575f61324861324385876156a8565b6149db565b6001600160a01b0384165f90815260076020526040902080549192508291600890613284908490600160401b90046001600160c01b0316615c3b565b82546101009290920a6001600160c01b038181021990931691831602179091556001600160a01b0384165f908152600760205260409020805484935090916008916132d8918591600160401b900416615c3b565b92506101000a8154816001600160c01b0302191690836001600160c01b0316021790555050613519565b5f61331061324386866156a8565b6001600160a01b0384165f9081526007602052604090208054919250829160089061334c908490600160401b90046001600160c01b0316615c62565b82546101009290920a6001600160c01b038181021990931691831602179091556001600160a01b0384165f908152600760205260409020805484935090916008916133a0918591600160401b900416615c62565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055505f6133d96133d160025490565b886001612f98565b6001600160a01b0385165f9081526007602052604090205490915063ffffffff600160201b9091048116908110801561345c5750600160201b61341c82846157d9565b61342691906157ba565b6001600160a01b0386165f9081526007602052604090205461345a90600160401b90046001600160c01b03168b6001612f98565b115b1561347a57604051630f4c526560e01b815260040160405180910390fd5b506001600160a01b0383165f9081526007602052604090205463ffffffff600160201b909104811690811080156134fb5750600160201b6134bb82846157d9565b6134c591906157ba565b6001600160a01b0385165f908152600760205260409020546134f990600160401b90046001600160c01b03168b6001612f98565b115b15612a0f57604051630f4c526560e01b815260040160405180910390fd5b50505b5050505050565b5f61352f848484613e22565b5050509050806135525760405163e7da55cd60e01b815260040160405180910390fd5b50505050565b6131878363a9059cbb60e01b84846040516024016135779291906156bb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614a30565b6001600160a01b039091165f81815260136020908152604080832080548685526014845282852081905560018101825590845282842001859055938252601590529190912080546001600160a01b0319169091179055565b5f83815260126020526040812054613624918591859185919061318c565b50505f90815260126020526040812055565b5f6136418484612ac7565b90505f198114613552578181101561369b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611c67565b6135528484848403612fa9565b6001600160a01b03831661370c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611c67565b6001600160a01b03821661376e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611c67565b6001600160a01b0383165f90815260208190526040902054818110156137e55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611c67565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290925f80516020615ed3833981519152910160405180910390a3613552565b5f6001600160801b0382111561388c5760405162461bcd60e51b815260206004820152602760248201525f80516020615e6c8339815191526044820152663238206269747360c81b6064820152608401611c67565b5090565b5f8061389a610c46565b91505f6138ab600854866001612f98565b90505f6138c26138ba60025490565b866001612f98565b9050806138cf8386615695565b116138da575f6138ef565b806138e58386615695565b6138ef91906156a8565b925050509250929050565b5f805f80613906612d86565b91509150613914815f6130dd565b5f8881526012602052604090208054871561393f5788945061393889856001612f98565b9550613950565b88955061394d89855f6130cc565b94505b845f03613970576040516312278dfb60e01b815260040160405180910390fd5b8085111561398a5780945061398785856001612f98565b95505b8515613acb57865115613a9f575f80888060200190518101906139ad9190615c82565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316825f01515f01516001600160a01b031614613a095760405163c1ab6dc160e01b815260040160405180910390fd5b604080518082018252308152602081018a9052905163187945bd60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916330f28b7a91613a6b91869133908790600401615a13565b5f604051808303815f87803b158015613a82575f80fd5b505af1158015613a94573d5f803e3d5ffd5b505050505050613acb565b613acb7f00000000000000000000000000000000000000000000000000000000000000003330896141c4565b5f613ad686836156a8565b808455600854909150613aea9087906156a8565b600855601154613afb908890615695565b601155613b0e8b8686610f018a86615695565b858214613b4357600d54613b2482876001612f98565b1015613b4357604051630313af9b60e01b815260040160405180910390fd5b5f8b8152601560209081526040918290205482513381526001600160a01b0390911691810191909152908101889052606081018790528b907f9181b2981704b7cf4448130f29cb5da1f41e0418d000e7f8880000b09bcbea459060800160405180910390a2505050505094509492505050565b5f805f613bc1612d86565b915050613bce815f614555565b8415613bea57859150613be382826001612f98565b9250613bfb565b859250613bf883825f6130cc565b91505b5f613c1383613c0960025490565b6116589190615695565b9050600c54811115613c38576040516304d0d85960e51b815260040160405180910390fd5b600f54841115613c5b5760405163bc54a78760e01b815260040160405180910390fd5b83600f54613c6991906156a8565b600f55845115613d7b575f8086806020019051810190613c899190615c82565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316825f01515f01516001600160a01b031614613ce55760405163c1ab6dc160e01b815260040160405180910390fd5b60408051808201825230815260208101889052905163187945bd60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916330f28b7a91613d4791869133908790600401615a13565b5f604051808303815f87803b158015613d5e575f80fd5b505af1158015613d70573d5f803e3d5ffd5b505050505050613da7565b613da77f00000000000000000000000000000000000000000000000000000000000000003330876141c4565b613db18884614b03565b876001600160a01b0316336001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78686604051613df6929190615217565b60405180910390a3505094509492505050565b600680546001600160a01b0319169055611c7981614bad565b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630e611d38887f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401613e94929190615a79565b608060405180830381865afa158015613eaf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ed39190615d5e565b5091945091505f9050613ee588614bfe565b63ffffffff169050613f0681600160201b866148a79092919063ffffffff16565b92508686613f145783613f4a565b600160201b6064613f2682605f6157d9565b613f3091906157ba565b613f409063ffffffff16866157d9565b613f4a91906157ba565b101594505093509350935093565b5f838180600160201b6064613f6e82600a6157d9565b613f7891906157ba565b613f8c9063ffffffff16600160201b615695565b613f9690896157d9565b613fa091906157ba565b90508086106140c85784156140c0575f85613fbb888a6157d9565b613fc591906157ba565b90505f613fd283836156a8565b600160601b613fe1858b6156a8565b613feb91906157d9565b613ff591906157ba565b61400390600160601b6156a8565b90505f600160601b82606461401d600160201b60026157d9565b61402791906157ba565b6064614038600160201b600a6157d9565b61404291906157ba565b61404c9190615d91565b63ffffffff1661405c91906157d9565b61406691906157ba565b6064614077600160201b60026157d9565b61408191906157ba565b63ffffffff166140919190615695565b9050600160201b6140a28282615695565b6140ac908c6157d9565b6140b691906157ba565b965050505061412f565b80935061412f565b5f600160201b60646140db82600a6157d9565b6140e591906157ba565b6140f59063ffffffff168a6157d9565b6140ff91906157ba565b90508087111561411a5761411381886156a8565b935061411e565b5f93505b86945061412b84896156a8565b9250505b5093509350939050565b5f806141458484613890565b915050808511156141bc5761415a81866156a8565b91505f61416961250b60025490565b9050808461417785836156a8565b61418191906157d9565b61418b91906157ba565b935083600a819055505f80516020615eb383398151915285856040516141b2929190615217565b60405180910390a1505b509392505050565b6040516001600160a01b03808516602483015283166044820152606481018290526135529085906323b872dd60e01b90608401613577565b5f805f805f888a036142b15760405163133f757160e31b8152600481018c90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa15801561426c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142909190615b67565b50929c506001600160801b039b508b9a506143c49950505050505050505050565b604051636f2ed3e360e11b8152600481018c90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063de5da7c690602401606060405180830381865afa158015614314573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143389190615dae565b91945092509050878a1161438a575f925061436a886143606001600160801b0385168d6157d9565b6113bb91906157ba565b9150614383886143606001600160801b0384168d6157d9565b90506143c4565b506001600160801b039050806143c16143a3898b6156a8565b6001600160801b0385166143b78b8e6156a8565b61436091906157d9565b92505b6001600160801b0383161561448e576040805160a0810182528c81526001600160801b03851660208201525f8183018190526060820152608081018890529051630624e65f60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691630c49ccbe9161444c9190600401615703565b60408051808303815f875af1158015614467573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061448b9190615741565b50505b604080516080810182528c81526001600160a01b0389811660208301526001600160801b038581168385015284166060830152915163fc6f786560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163fc6f78659161450491600401615763565b60408051808303815f875af115801561451f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145439190615741565b909c909b509950505050505050505050565b5f61456362015180426157ba565b90508180614583575060195463ffffffff600160801b9091048116908216115b15613187575f600160201b614599600a826157ba565b63ffffffff166145ab61313360025490565b6145b591906157d9565b6145bf91906157ba565b905080600e54116145d057806145d4565b600e545b600f55506019805463ffffffff8316600160801b0263ffffffff60801b19909116179055505050565b6060610d808383604051806060016040528060278152602001615e8c60279139614cda565b5f805f8061462e612d86565b9150915061463c815f614555565b84156146575785925061465086825f612f98565b9350614669565b859350614666868260016130cc565b92505b5f614673886117be565b90508084111561468e5780935061468b84835f612f98565b94505b336001600160a01b038916146146a9576146a9883386613636565b5f6146b48484613890565b509050858110156146d85760405163bb55fd2760e01b815260040160405180910390fd5b6146e28986614d44565b61470d7f00000000000000000000000000000000000000000000000000000000000000008b88613558565b85600f5461471b9190615695565b600f81905550886001600160a01b03168a6001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8989604051614770929190615217565b60405180910390a45050505094509492505050565b6001600160a01b0382165f908152601360205260408120546147a9906001906156a8565b5f83815260146020526040902054909150808214614849576001600160a01b0384165f9081526013602052604081208054849081106147ea576147ea615a65565b905f5260205f20015490508060135f876001600160a01b03166001600160a01b031681526020019081526020015f20838154811061482a5761482a615a65565b5f91825260208083209091019290925591825260149052604090208190555b6001600160a01b0384165f90815260136020526040902080548061486f5761486f615ded565b5f828152602080822083015f19908101839055909201909255938152601590935250506040902080546001600160a01b031916905550565b5f80805f19858709858702925082811083820303915050805f036148de578382816148d4576148d46157a6565b0492505050610d80565b8084116149255760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401611c67565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f806149998686866148a7565b905060018360028111156149af576149af615e01565b1480156149cb57505f84806149c6576149c66157a6565b868809115b1561178d57612707600182615695565b5f6001600160c01b0382111561388c5760405162461bcd60e51b815260206004820152602760248201525f80516020615e6c8339815191526044820152663932206269747360c81b6064820152608401611c67565b5f614a84826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614e619092919063ffffffff16565b905080515f1480614aa4575080806020019051810190614aa49190615e15565b6131875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611c67565b6001600160a01b038216614b595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611c67565b8060025f828254614b6a9190615695565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481525f80516020615ed3833981519152910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88856040518263ffffffff1660e01b8152600401614c4f91815260200190565b61018060405180830381865afa158015614c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c8f9190615b67565b505050506001600160a01b038681165f90815260076020526040808220549288168252902054969a509498505063ffffffff93841696505050911691505080821161178d5781612707565b60605f80856001600160a01b031685604051614cf69190615e30565b5f60405180830381855af49150503d805f8114614d2e576040519150601f19603f3d011682016040523d82523d5f602084013e614d33565b606091505b509150915061270786838387614e6f565b6001600160a01b038216614da45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611c67565b6001600160a01b0382165f9081526020819052604090205481811015614e175760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611c67565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192915f80516020615ed3833981519152910160405180910390a3505050565b606061169b84845f85614ee7565b60608315614edd5782515f03614ed6576001600160a01b0385163b614ed65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611c67565b508161169b565b61169b8383614fb3565b606082471015614f485760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611c67565b5f80866001600160a01b03168587604051614f639190615e30565b5f6040518083038185875af1925050503d805f8114614f9d576040519150601f19603f3d011682016040523d82523d5f602084013e614fa2565b606091505b5091509150612d1c87838387614e6f565b815115614fc35781518083602001fd5b8060405162461bcd60e51b8152600401611c67919061505b565b803563ffffffff81168114614ff0575f80fd5b919050565b5f60208284031215615005575f80fd5b610d8082614fdd565b5f5b83811015615028578181015183820152602001615010565b50505f910152565b5f815180845261504781602086016020860161500e565b601f01601f19169290920160200192915050565b602081525f610d806020830184615030565b5f6020828403121561507d575f80fd5b5035919050565b6001600160a01b0381168114611c79575f80fd5b5f80604083850312156150a9575f80fd5b82356150b481615084565b946020939093013593505050565b5f80604083850312156150d3575f80fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f8083601f840112615106575f80fd5b5081356001600160401b0381111561511c575f80fd5b602083019150836020828501011115615133575f80fd5b9250929050565b5f805f805f6080868803121561514e575f80fd5b853561515981615084565b9450602086013561516981615084565b93506040860135925060608601356001600160401b0381111561518a575f80fd5b615196888289016150f6565b969995985093965092949392505050565b5f602082840312156151b7575f80fd5b8135610d8081615084565b5f805f606084860312156151d4575f80fd5b83356151df81615084565b925060208401356151ef81615084565b929592945050506040919091013590565b5f6101008284031215615211575f80fd5b50919050565b918252602082015260400190565b63ffffffff91909116815260200190565b8015158114611c79575f80fd5b5f805f805f60808688031215615257575f80fd5b8535945060208601359350604086013561527081615236565b925060608601356001600160401b0381111561518a575f80fd5b5f805f6060848603121561529c575f80fd5b83356152a781615084565b92506020840135915060408401356152be81615084565b809150509250925092565b5f80604083850312156152da575f80fd5b8235915060208301356152ec81615084565b809150509250929050565b5f805f60608486031215615309575f80fd5b833592506020840135915060408401356152be81615236565b5f805f8060608587031215615335575f80fd5b84359350602085013561534781615084565b925060408501356001600160401b03811115615361575f80fd5b61536d878288016150f6565b95989497509550505050565b948552602085019390935260408401919091526060830152608082015260a00190565b5f805f606084860312156153ae575f80fd5b8335925060208401356153c081615084565b915060408401356152be81615236565b5f602082840312156153e0575f80fd5b81356001600160401b038111156153f5575f80fd5b820160c08185031215610d80575f80fd5b5f8060408385031215615417575f80fd5b823561542281615084565b915060208301356152ec81615236565b5f805f805f60a08688031215615446575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f806020838503121561547a575f80fd5b82356001600160401b0380821115615490575f80fd5b818501915085601f8301126154a3575f80fd5b8135818111156154b1575f80fd5b8660208260051b85010111156154c5575f80fd5b60209290920196919550909350505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561552c57603f1988860301845261551a858351615030565b945092850192908501906001016154fe565b5092979650505050505050565b5f805f6060848603121561554b575f80fd5b83359250602084013561555d81615084565b915060408401356152be81615084565b5f805f805f8060c08789031215615582575f80fd5b86359550602087013561559481615084565b945060408701359350606087013560ff811681146155b0575f80fd5b9598949750929560808101359460a0909101359350915050565b5f80604083850312156155db575f80fd5b82356155e681615084565b915060208301356152ec81615084565b5f805f60608486031215615608575f80fd5b833561561381615084565b925061562160208501614fdd565b915061562f60408501614fdd565b90509250925092565b5f60208284031215615648575f80fd5b5051919050565b600181811c9082168061566357607f821691505b60208210810361521157634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610d9a57610d9a615681565b81810381811115610d9a57610d9a615681565b6001600160a01b03929092168252602082015260400190565b6001600160801b0381168114611c79575f80fd5b5f602082840312156156f8575f80fd5b8135610d80816156d4565b815181526020808301516001600160801b03169082015260408083015190820152606080830151908201526080918201519181019190915260a00190565b5f8060408385031215615752575f80fd5b505080516020909101519092909150565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b634e487b7160e01b5f52601260045260245ffd5b5f826157d457634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610d9a57610d9a615681565b818382375f9101908152919050565b8051614ff081615084565b5f6020828403121561581a575f80fd5b8151610d8081615084565b5f808335601e1984360301811261583a575f80fd5b8301803591506001600160401b03821115615853575f80fd5b602001915036819003821315615133575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561589d5761589d615867565b60405290565b604080519081016001600160401b038111828210171561589d5761589d615867565b604051601f8201601f191681016001600160401b03811182821017156158ed576158ed615867565b604052919050565b5f6001600160401b0382111561590d5761590d615867565b50601f01601f191660200190565b5f8082840360a081121561592d575f80fd5b608081121561593a575f80fd5b61594261587b565b604082121561594f575f80fd5b6159576158a3565b9150843561596481615084565b82526020858101358184015291815260408086013582840152606086013590820152925060808401359083906001600160401b038311156159a3575f80fd5b828601925086601f8401126159b6575f80fd5b823591506159cb6159c6836158f5565b6158c5565b82815287828486010111156159de575f80fd5b82828501838301375f828483010152809450505050509250929050565b80516001600160a01b03168252602090810151910152565b5f610100615a228388516159fb565b6020870151604084015260408701516060840152615a4360808401876159fb565b6001600160a01b03851660c084015260e08301819052612d1c81840185615030565b634e487b7160e01b5f52603260045260245ffd5b9182526001600160a01b0316602082015260400190565b828482375f8382015f81528351615aab81836020880161500e565b0195945050505050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061270790830184615030565b805162ffffff81168114614ff0575f80fd5b8051600281900b8114614ff0575f80fd5b8051614ff0816156d4565b5f805f805f805f805f805f806101808d8f031215615b83575f80fd5b8c516001600160601b0381168114615b99575f80fd5b9b50615ba760208e016157ff565b9a50615bb560408e016157ff565b9950615bc360608e016157ff565b9850615bd160808e01615b39565b9750615bdf60a08e01615b4b565b9650615bed60c08e01615b4b565b9550615bfb60e08e01615b5c565b94506101008d015193506101208d01519250615c1a6101408e01615b5c565b9150615c296101608e01615b5c565b90509295989b509295989b509295989b565b6001600160c01b03828116828216039080821115615c5b57615c5b615681565b5092915050565b6001600160c01b03818116838216019080821115615c5b57615c5b615681565b5f8082840360a0811215615c94575f80fd5b6080811215615ca1575f80fd5b615ca961587b565b6040821215615cb6575f80fd5b615cbe6158a3565b91508451615ccb81615084565b8252602085810151818401529181526040808601518284015260608601519082015260808501519093509083906001600160401b03831115615d0b575f80fd5b828601925086601f840112615d1e575f80fd5b82519150615d2e6159c6836158f5565b8281528782848601011115615d41575f80fd5b615d508383830184870161500e565b809450505050509250929050565b5f805f8060808587031215615d71575f80fd5b505082516020840151604085015160609095015191969095509092509050565b63ffffffff828116828216039080821115615c5b57615c5b615681565b5f805f60608486031215615dc0575f80fd5b8351615dcb816156d4565b6020850151909350615ddc816156d4565b60408501519092506152be816156d4565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215615e25575f80fd5b8151610d8081615236565b5f8251615e4181846020870161500e565b919091019291505056fee5b6779c4a18cbf7e4bce3a6c308b215c678f316648b832318a03841664fc2e953616665436173743a2076616c756520646f65736e27742066697420696e2031416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65648e5703c89ed60e6afe48f00620414eda0a63ffb827cd6b0aee65b4cab51c6efcddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220eae9c87d2cf579ced34b48f8c33b99d6c80c95a062876616609f26368f803ee964736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000b50dafe03fee68595ab2baad3c16f899421f063b000000000000000000000000e0151d335a6c4ab0600ae4000a9caaf7b236072f000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000000000000000000000000000000000000000000010526576657274204c656e642055534443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006726c555344430000000000000000000000000000000000000000000000000000