28 txs
25.2k calls
constructor
constructor(address initialOwner_, address vault_, address cooler_, address debtTokenSavingsVault_, uint16 performanceFeeBps_, address feeCollector_)
functions
accountDelegationBalances
viewfunction accountDelegationBalances(address account, uint256 shares, uint256 totalSupply) view returns (uint256 totalCollateral, address delegateAddress, uint256 delegatedCollateral)
areExitsPaused
viewfunction areExitsPaused() view returns (bool)
areJoinsPaused
viewfunction areJoinsPaused() view returns (bool)
collateralToken
viewfunction collateralToken() view returns (address)
collateralTokenBalance
viewfunction collateralTokenBalance() view returns (uint256)
convertSharesToCollateral
viewfunction convertSharesToCollateral(uint256 shares, uint256 totalSupply) view returns (uint256)
cooler
viewfunction cooler() view returns (address)
coolerBorrowsDisabled
viewfunction coolerBorrowsDisabled() view returns (bool)
coolerDebtInWad
viewfunction coolerDebtInWad() view returns (uint128)
debtToken
viewfunction debtToken() view returns (address)
debtTokenBalance
viewfunction debtTokenBalance() view returns (uint256)
debtTokenDecimalsToWadScalar
viewfunction debtTokenDecimalsToWadScalar() view returns (uint96)
debtTokenSavingsVault
viewfunction debtTokenSavingsVault() view returns (address)
delegations
viewfunction delegations(address account) view returns (address delegateAddress, uint256 amount)
exitFeeBps
viewfunction exitFeeBps() view returns (uint16)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
feeCollector
viewfunction feeCollector() view returns (address)
isPauser
viewfunction isPauser(address account) view returns (bool canPause)
lastSweepTime
viewfunction lastSweepTime() view returns (uint40)
MAX_EXIT_FEE_BPS
viewfunction MAX_EXIT_FEE_BPS() view returns (uint16)
MAX_PERFORMANCE_FEE_BPS
viewfunction MAX_PERFORMANCE_FEE_BPS() view returns (uint16)
maxSweepSellAmount
viewfunction maxSweepSellAmount() view returns (uint96)
MIN_DELEGATION_AMOUNT
viewfunction MIN_DELEGATION_AMOUNT() view returns (uint256)
owner
viewfunction owner() view returns (address)
pausers
viewfunction pausers(address account) view returns (bool canPause)
performanceFeeBps
viewfunction performanceFeeBps() view returns (uint16)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
surplusDebtTokenAmount
viewfunction surplusDebtTokenAmount() view returns (uint256 surplus)
sweepCooldownSecs
viewfunction sweepCooldownSecs() view returns (uint40)
sweepSwapper
viewfunction sweepSwapper() view returns (address)
vault
viewfunction vault() view returns (address)
acceptOwner
nonpayablefunction acceptOwner()
exit
nonpayablefunction exit(uint256 collateralAmount, uint256 debtAmount, address sharesOwner, address receiver, uint256 ownerSharesPostBurn, uint256 totalSupplyPostBurn)
join
nonpayablefunction join(uint256 collateralAmount, uint256 debtAmount, address receiver, uint256 receiverSharesPostMint, uint256 totalSupplyPostMint)
maxBorrowFromCooler
nonpayablefunction maxBorrowFromCooler() returns (int128 coolerDebtDeltaInWad)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
revokeOwnership
nonpayablefunction revokeOwnership()
setCoolerBorrowsDisabled
nonpayablefunction setCoolerBorrowsDisabled(bool value)
setDebtTokenFromCooler
nonpayablefunction setDebtTokenFromCooler(address newDebtTokenSavingsVault)
setDelegationAmount1
nonpayablefunction setDelegationAmount1(address account, uint256 accountShares, uint256 totalSupply)
setDelegationAmount2
nonpayablefunction setDelegationAmount2(address account1, uint256 account1Shares, address account2, uint256 account2Shares, uint256 totalSupply)
setExitFees
nonpayablefunction setExitFees(uint16 newFeeBps)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setFeeCollector
nonpayablefunction setFeeCollector(address newFeeCollector)
setPaused
nonpayablefunction setPaused(tuple updatedPaused)
setPauser
nonpayablefunction setPauser(address account, bool canPause)
setPerformanceFeesBps
nonpayablefunction setPerformanceFeesBps(uint16 newFeeBps)
setSweepParams
nonpayablefunction setSweepParams(uint40 newSweepCooldownSecs, uint96 newMaxSweepSellAmount)
setSweepSwapper
nonpayablefunction setSweepSwapper(address newSwapper)
swapCallback
nonpayablefunction swapCallback()
sweep
nonpayablefunction sweep(uint256 amount, bytes swapData)
syncDebtTokenSavings
nonpayablefunction syncDebtTokenSavings(uint256 requiredDebtTokenBalance)
updateDelegateAndAmount
nonpayablefunction updateDelegateAndAmount(address account, uint256 accountShares, uint256 totalSupply, address newDelegateAddress)
events
CoolerBorrowsDisabledSet
event CoolerBorrowsDisabledSet(bool value)
DebtTokenSet
event DebtTokenSet(address indexed debtToken, address indexed savingsVault)
DelegationApplied
event DelegationApplied(address indexed account, address indexed delegate, int256 amount)
Exit
event Exit(uint256 collateralAmount, uint256 debtAmount, address receiver, int256 coolerDebtDeltaInWad)
ExitFeeBpsSet
event ExitFeeBpsSet(uint256 feeBps)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FeeCollectorSet
event FeeCollectorSet(address indexed feeCollector)
Join
event Join(uint256 collateralAmount, uint256 debtAmount, address receiver, int256 coolerDebtDeltaInWad)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
PausedSet
event PausedSet((bool investmentsPaused, bool exitsPaused) paused)
PauserSet
event PauserSet(address indexed account, bool canPause)
PerformanceFeeSet
event PerformanceFeeSet(uint256 fee)
SwapperSet
event SwapperSet(address indexed newSwapper)
SweepFinished
event SweepFinished(uint256 hohmBurned, uint256 feeAmount)
SweepParamsSet
event SweepParamsSet(uint40 newSweepCooldownSecs, uint96 newMaxSweepSellAmount)
SweepStarted
event SweepStarted(address indexed debtToken, uint256 debtTokenAmount)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
BeforeCooldownEnd
error BeforeCooldownEnd()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam()
InvalidToken
error InvalidToken(address token)
IsNotPaused
error IsNotPaused()
Overflow
error Overflow(uint256 amount)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
SweepTooLarge
error SweepTooLarge()
creation bytecode
0x60e06040523480156200001157600080fd5b506040516200576a3803806200576a83398101604081905262000034916200081a565b856200004081620001d0565b506001600160a01b038516608081905260408051632c805af560e21b8152905163b2016bd4916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b29190620008b4565b6001600160a01b0390811660c081905290851660a0819052620000d991906000196200024d565b6200014b60a0516001600160a01b031663f8d898986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001449190620008b4565b846200039c565b61014a61ffff831611156200017357604051633494a40d60e21b815260040160405180910390fd5b600880546001600160a01b039092166c01000000000000000000000000026001600160601b0361ffff9094166a010000000000000000000002939093166001600160501b03909216919091179190911790555062000af492505050565b6000546001600160a01b031615620001fb57604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200022b57604051634726455360e11b8152600060048201526024015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b801580620002cb5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c99190620008db565b155b6200033f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000222565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003979185916200058916565b505050565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004039190620008f5565b905060128160ff161115620004375760405163961c9a4f60e01b81526001600160a01b038416600482015260240162000222565b600580546001600160a01b0319166001600160a01b0385161790556200046260ff8216601262000930565b6200046f90600a62000a49565b600580546001600160601b0392909216600160a01b026001600160a01b03928316179055600680548483166001600160a01b03199190911617905560a051620004be918516906000196200024d565b6001600160a01b038216156200039757826001600160a01b0316826001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000517573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053d9190620008b4565b6001600160a01b031614620005715760405163961c9a4f60e01b81526001600160a01b038316600482015260240162000222565b620003976001600160a01b038416836000196200024d565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620005d8906001600160a01b0385169084906200065d565b9050805160001480620005fc575080806020019051810190620005fc919062000a57565b620003975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000222565b60606200066e848460008562000676565b949350505050565b606082471015620006d95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000222565b600080866001600160a01b03168587604051620006f7919062000aa1565b60006040518083038185875af1925050503d806000811462000736576040519150601f19603f3d011682016040523d82523d6000602084013e6200073b565b606091505b5090925090506200074f878383876200075a565b979650505050505050565b60608315620007ce578251600003620007c6576001600160a01b0385163b620007c65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000222565b50816200066e565b6200066e8383815115620007e55781518083602001fd5b8060405162461bcd60e51b815260040162000222919062000abf565b6001600160a01b03811681146200081757600080fd5b50565b60008060008060008060c087890312156200083457600080fd5b8651620008418162000801565b6020880151909650620008548162000801565b6040880151909550620008678162000801565b60608801519094506200087a8162000801565b608088015190935061ffff811681146200089357600080fd5b60a0880151909250620008a68162000801565b809150509295509295509295565b600060208284031215620008c757600080fd5b8151620008d48162000801565b9392505050565b600060208284031215620008ee57600080fd5b5051919050565b6000602082840312156200090857600080fd5b815160ff81168114620008d457600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156200094657620009466200091a565b92915050565b600181815b808511156200098d5781600019048211156200097157620009716200091a565b808516156200097f57918102915b93841c939080029062000951565b509250929050565b600082620009a65750600162000946565b81620009b55750600062000946565b8160018114620009ce5760028114620009d957620009f9565b600191505062000946565b60ff841115620009ed57620009ed6200091a565b50506001821b62000946565b5060208310610133831016604e8410600b841016171562000a1e575081810a62000946565b62000a2a83836200094c565b806000190482111562000a415762000a416200091a565b029392505050565b6000620008d4838362000995565b60006020828403121562000a6a57600080fd5b81518015158114620008d457600080fd5b60005b8381101562000a9857818101518382015260200162000a7e565b50506000910152565b6000825162000ab581846020870162000a7b565b9190910192915050565b602081526000825180602084015262000ae081604085016020870162000a7b565b601f01601f19169190910160400192915050565b60805160a05160c051614bac62000bbe60003960006106ba0152600081816107d101528181610c5701528181610d0901528181611608015281816116c901528181611d3201528181611d80015281816123c6015281816124f5015281816127cd015281816129f101528181612aec01528181612c2f01526135970152600081816108d8015281816109a001528181610ba4015281816110fa015281816111ec0152818161125a015281816114ff015281816115b60152818161232801526124440152614bac6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639a6b27cf116101c8578063bffe348611610104578063d805b074116100a2578063ebbc49651161007c578063ebbc4965146108a8578063f1bffe27146108b0578063f8d89898146108c3578063fbfa77cf146108d657600080fd5b8063d805b0741461085f578063daeccc7914610872578063dd50e2d3146108a057600080fd5b8063cf6a9a94116100de578063cf6a9a94146107cc578063d015740b146107f3578063d2ae9a0d14610823578063d49dbdeb1461083657600080fd5b8063bffe348614610744578063c415b95c14610796578063cbc9af88146107b957600080fd5b8063b1f8100d11610171578063b9d4e8791161014b578063b9d4e879146106ef578063baaaa7b11461070b578063bfcc8c411461071e578063bfccf0ec1461073157600080fd5b8063b1f8100d146106a2578063b2016bd4146106b5578063b54e0e1f146106dc57600080fd5b8063a42dce80116101a2578063a42dce8014610671578063a7229fd914610684578063af1454d31461069757600080fd5b80639a6b27cf146106505780639e6289771461053a578063a08105701461066057600080fd5b806359b97ddb116102a2578063757bb8131161024057806386dd05181161021a57806386dd0518146105e85780638da5cb5b146105fb57806390421bf61461060e5780639672093e1461063557600080fd5b8063757bb8131461057c57806380f51c12146105b257806385a3a589146105d557600080fd5b8063708891651161027c578063708891651461053a5780637180c8ca14610543578063724593c01461055657806372637c181461056957600080fd5b806359b97ddb14610517578063633854ce1461051f5780636a68c7181461053257600080fd5b8063167860a71161030f5780632f6a2967116102e95780632f6a29671461045257806346fbf68e1461049f57806351e163c0146104cb57806357b17a52146104de57600080fd5b8063167860a7146104245780632b968958146104375780632d97c13d1461043f57600080fd5b80630a5517ca116103405780630a5517ca146103ba5780630ef616cf146103c957806312481ad6146103f457600080fd5b806301ffc9a71461036757806305a8b8301461038f57806306bb50bf146103a4575b600080fd5b61037a61037536600461401f565b6108fc565b60405190151581526020015b60405180910390f35b6103a261039d36600461404f565b610995565b005b6103ac610a22565b604051908152602001610386565b6103ac67016345785d8a000081565b6007546103dc906001600160a01b031681565b6040516001600160a01b039091168152602001610386565b60085461040e9065010000000000900464ffffffffff1681565b60405164ffffffffff9091168152602001610386565b6103a2610432366004614084565b610b99565b6103a2610de6565b6103a261044d3660046140e0565b610eed565b600754610482907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1681565b6040516bffffffffffffffffffffffff9091168152602001610386565b61037a6104ad3660046140e0565b6001600160a01b031660009081526003602052604090205460ff1690565b6006546103dc906001600160a01b031681565b6006546105049074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff9091168152602001610386565b6103ac610ff1565b6103a261052d3660046140fd565b611072565b6103a26110c9565b61050461014a81565b6103a2610551366004614124565b6112c3565b6103ac61056436600461415d565b61138b565b6103a261057736600461417f565b6113a8565b61058f61058a36600461404f565b6114a1565b604080519384526001600160a01b03909216602084015290820152606001610386565b61037a6105c03660046140e0565b60036020526000908152604090205460ff1681565b6103a26105e33660046141c8565b6114f4565b6103a26105f636600461421a565b6115ab565b6000546103dc906001600160a01b031681565b60065461037a90760100000000000000000000000000000000000000000000900460ff1681565b61063d6117ca565b604051600f9190910b8152602001610386565b600454610100900460ff1661037a565b60085461040e9064ffffffffff1681565b6103a261067f3660046140e0565b6117dc565b6103a261069236600461424b565b6118d4565b60045460ff1661037a565b6103a26106b03660046140e0565b6119eb565b6103dc7f000000000000000000000000000000000000000000000000000000000000000081565b6103a26106ea36600461428c565b611afa565b600854610504906a0100000000000000000000900461ffff1681565b6103a26107193660046142b0565b611c09565b6103a261072c3660046140e0565b611c7d565b6103a261073f3660046142c8565b611e54565b6107776107523660046140e0565b600960205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b039093168352602083019190915201610386565b6008546103dc906c0100000000000000000000000090046001600160a01b031681565b6103a26107c736600461428c565b612019565b6103dc7f000000000000000000000000000000000000000000000000000000000000000081565b600554610482907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1681565b6103a26108313660046143ce565b61211e565b61083e612395565b6040516fffffffffffffffffffffffffffffffff9091168152602001610386565b6103a261086d36600461448b565b612439565b61037a6108803660046144d5565b600160209081526000928352604080842090915290825290205460ff1681565b6103ac6124c4565b6103a261257f565b6103a26108be36600461450a565b61261a565b6005546103dc906001600160a01b031681565b7f00000000000000000000000000000000000000000000000000000000000000006103dc565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fcd77a74500000000000000000000000000000000000000000000000000000000148061098f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109de57604051633006171960e21b815260040160405180910390fd5b610a1d610a18846109f9856109f16124c4565b8660016126eb565b6001600160a01b0387166000908152600960205260409020919061276b565b612796565b505050565b6005546006546007546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000936001600160a01b0390811693811692831515929116908115159085906370a0823190602401602060405180830381865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac09190614527565b95508215610adf57610ad28430612847565b610adc908761456f565b95505b8015610b91576040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015610b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190614527565b610b72908761456f565b95508215610b9157610b848483612847565b610b8e908761456f565b95505b505050505090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610be257604051633006171960e21b815260040160405180910390fd5b6000610bed87612963565b90506000610bfa82614582565b90506000610c098260006129b6565b90506000610c1c8884600f0b8888612cad565b90508051600014610cd5576040517fb64c393a0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b64c393a90610c8e9084903090600401614610565b6060604051808303816000875af1158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061463b565b5050505b506040517f2cf05b400000000000000000000000000000000000000000000000000000000081526060906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cf05b4090610d4490879030908c908790600401614669565b6020604051808303816000875af1158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8791906146b7565b50604080518b8152602081018b90526001600160a01b03891681830152600f84900b606082015290517f7c1a089fe19cc45f63d2ae7ab5689183827e444bae9731f3e09b8709f7d82d239181900360800190a150505050505050505050565b610e14336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b610e3157604051633006171960e21b815260040160405180910390fd5b6002546001600160a01b031661dead14610e8b576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610f1b336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b610f3857604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116610f83576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610e82565b6040516001600160a01b038216907f673779832598d6a388768ee342f8de96fdd5c39a468a6955377cf1405b9652b990600090a2600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600080611045610fff612395565b6005546fffffffffffffffffffffffffffffffff91909116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166001612db0565b90506000611051610a22565b905080821161106157600061106b565b61106b81836146e9565b9250505090565b6110a0336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b6110bd57604051633006171960e21b815260040160405180910390fd5b6110c681612e1c565b50565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190614527565b60085490915060009081906111969084906a0100000000000000000000900461ffff1683613120565b60408051838152602081018390529294509092507f072b053b1a85b7b9a1d87d61c12e8e8f01a28b7b85ebc240d47662353b036609910160405180910390a1801561122557600854611225906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916c0100000000000000000000000090041683613150565b8115610a1d576040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505050565b6112f1336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61130e57604051633006171960e21b815260040160405180910390fd5b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fa11b5803b8a35081b8f993e0dee5bc30301a3d83f644e5ab2ff39f972f0a807f910160405180910390a25050565b60006113a1836113996124c4565b8460006126eb565b9392505050565b6113d6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b6113f357604051633006171960e21b815260040160405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000001664ffffffffff8416908117909155600780546001600160a01b0316740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516908102919091179091556040805192835260208301919091527f8a337a68484dadae2ebe98e2be78818c2acdf428e878ec55b3b6e0c0efdf77b3910160405180910390a15050565b60008060006114b0858561138b565b6001600160a01b0396871660009081526009602090815260409182902082518084019093528054909916808352600190990154910181905290979095509350505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461153d57604051633006171960e21b815260040160405180910390fd5b60006115476124c4565b6001600160a01b03871660009081526009602052604090209091506115a390610a18908861157889868860016126eb565b6001600160a01b03891660009081526009602052604090208961159e8a898b60016126eb565b613217565b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115f457604051633006171960e21b815260040160405180910390fd5b600061160284878585612cad565b905060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305d6f8ad61163e89612963565b30846040518463ffffffff1660e01b815260040161165e939291906146fc565b600060405180830381600087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050508151600014611747576040517fb64c393a0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b64c393a906117009085903090600401614610565b6060604051808303816000875af115801561171f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611743919061463b565b5050505b60006117546000886129b6565b60055490915061176e906001600160a01b03168789613150565b60408051898152602081018990526001600160a01b03881681830152600f83900b606082015290517fdd59a648fc60c2ec0babc22331309da32b7e70ee36ca53045ed97937e425483d9181900360800190a15050505050505050565b60006117d76000806129b6565b905090565b61180a336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61182757604051633006171960e21b815260040160405180910390fd5b6001600160a01b03811661186a576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610e82565b6040516001600160a01b038216907f12e1d17016b94668449f97876f4a8d5cc2c19f314db337418894734037cc19d490600090a2600880546001600160a01b039092166c01000000000000000000000000026bffffffffffffffffffffffff909216919091179055565b611902336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61191f57604051633006171960e21b815260040160405180910390fd5b6005546001600160a01b038481169116148061194857506006546001600160a01b038481169116145b1561198a576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e82565b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516119cf91815260200190565b60405180910390a3610a1d6001600160a01b0384168383613150565b611a19336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b611a3657604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611a81576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610e82565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611b28336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b611b4557604051633006171960e21b815260040160405180910390fd5b61014a61ffff82161115611b85576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405161ffff821681527f990129c5b5310a81f94ed9049364e93ff504a3dbd9ef24503b64537effd4e2129060200160405180910390a16006805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b3360009081526003602052604090205460ff16611c3957604051633006171960e21b815260040160405180910390fd5b7f803ee193075547dae36361498f3de5e399cdb29b7e0c7b680533f3da8b733a1781604051611c689190614736565b60405180910390a1806004610a1d8282614766565b611cab336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b611cc857604051633006171960e21b815260040160405180910390fd5b60045460ff161580611ce25750600454610100900460ff16155b15611d19576040517fbc871ce500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546006546001600160a01b039182169116611d58827f000000000000000000000000000000000000000000000000000000000000000060006132c3565b6001600160a01b03811615611d7c57611d7c6001600160a01b0383168260006132c3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8d898986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0091906147e7565b905083611e0d828261342b565b806001600160a01b0316826001600160a01b03167f66b1e3550aca8bbae3dd0fc223b9fe2675b387ebc059caef17a7400ecdc2e1d960405160405180910390a35050505050565b611e82336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b611e9f57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038316611eea576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e82565b604080518082019091526000808252602082015260005b8281101561201257838382818110611f1b57611f1b614804565b905060400201803603810190611f319190614833565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905501611f01565b5050505050565b612047336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61206457604051633006171960e21b815260040160405180910390fd5b61014a61ffff821611156120a4576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405161ffff821681527fceb20f7f0b19335681096ee1eaa9bb2a6ef5a9a69ba48b6b488e7b7eff2ef04d9060200160405180910390a16008805461ffff9092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055565b61214c336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61216957604051633006171960e21b815260040160405180910390fd5b6007547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168211156121cb576040517fbdff37b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008546121eb9064ffffffffff8082169165010000000000900416614890565b64ffffffffff1642101561222b576040517f0965fe8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff16650100000000004264ffffffffff16021790556007546006546005546001600160a01b039283169291821691166000821561228c578261228e565b815b90506122a46001600160a01b0382168588613150565b806001600160a01b03167f19c64d15f93886cd5726e45942ed1c77b389ba8bd5cb129c8f2e8a42404bc8fe876040516122df91815260200190565b60405180910390a26040517fee534a3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063ee534a3f906123529084908a907f0000000000000000000000000000000000000000000000000000000000000000908b9060040161491c565b6020604051808303816000875af1158015612371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190614527565b6040517f5472214b0000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635472214b90602401602060405180830381865afa158015612415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d791906146b7565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461248257604051633006171960e21b815260040160405180910390fd5b6124be610a18858361249e876124966124c4565b8860016126eb565b6001600160a01b038916600090815260096020526040902092919061369a565b50505050565b6040517f030c3c580000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063030c3c5890602401602060405180830381865afa158015612544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256891906146b7565b6fffffffffffffffffffffffffffffffff16905090565b6002546001600160a01b031633146125aa57604051633006171960e21b815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b612648336000357fffffffff0000000000000000000000000000000000000000000000000000000016612d49565b61266557604051633006171960e21b815260040160405180910390fd5b60068054821515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9091161790556040517f4b87e76680987bd1ad4e6874dfd845441cd40583a7ec9482105acf19e64c6bbd906126e090831515815260200190565b60405180910390a150565b6000826000036126fd57506000612763565b82851115612737576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127448486856000613779565b905081801561275a575067016345785d8a000081105b15612763575060005b949350505050565b825460018401546060916127639161279191879187916001600160a01b0316908761380c565b61384d565b8051156110c6576040517fb64c393a0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b64c393a906128049084903090600401614610565b6060604051808303816000875af1158015612823573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124be919061463b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa1580156128ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cf9190614527565b9050801561295c576040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b03851690634cdad50690602401602060405180830381865afa158015612935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129599190614527565b91505b5092915050565b60006fffffffffffffffffffffffffffffffff8211156129b2576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610e82565b5090565b6040517fb611328a000000000000000000000000000000000000000000000000000000008152306004820152600f83900b60248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b611328a90604401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a64919061494e565b9050600081600f0b1315612b7057600654760100000000000000000000000000000000000000000000900460ff1615612a9f5750600061098f565b6040517fa8f18f250000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff82166004820152306024820181905260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a8f18f25906064016020604051808303816000875af1158015612b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6191906146b7565b50612b6b82612e1c565b61098f565b600081600f0b121561098f576000612b8782614582565b600554909150600090612bd5906fffffffffffffffffffffffffffffffff8416907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166001612db0565b9050612be9612be4828661456f565b612e1c565b6040517f25e6b5e80000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff831660048201523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325e6b5e8906044016020604051808303816000875af1158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca491906146b7565b50505092915050565b6001600160a01b03808516600090815260096020526040902080546060921615612d4057600085612cdc6124c4565b612ce69190614971565b90506000811215612d23576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d3c87612d3487848860016126eb565b84919061276b565b9250505b50949350505050565b600080546001600160a01b03848116911614806113a15750506001600160a01b039190911660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000009094168352929052205460ff1690565b600082600103612dc15750826113a1565b6000826001811115612dd557612dd5614999565b03612df157828481612de957612de96149c8565b0490506113a1565b8315612e1257826001850381612e0957612e096149c8565b04600101612763565b5060009392505050565b6006546001600160a01b031680612e31575050565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb79190614527565b9050600083821115612ff257506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152838203906000906001600160a01b0385169063402d267d90602401602060405180830381865afa158015612f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4c9190614527565b905080821115612f5a578091505b8115612fec576040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018390523060248201526001600160a01b03851690636e553f65906044016020604051808303816000875af1158015612fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fea9190614527565b505b506124be565b506040517fce96cb77000000000000000000000000000000000000000000000000000000008152306004820152818403906000906001600160a01b0385169063ce96cb7790602401602060405180830381865afa158015613057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307b9190614527565b905080821115613089578091505b8115612012576040517fb460af9400000000000000000000000000000000000000000000000000000000815260048101839052306024820181905260448201526001600160a01b0385169063b460af94906064016020604051808303816000875af11580156130fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190614527565b6000808360000361313657508390506000613148565b613141858585613928565b9150508084035b935093915050565b6040516001600160a01b038316602482015260448101829052610a1d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261394c565b6060826001600160a01b0316866001600160a01b03160361326f576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e82565b865460018801546132b891613294918a918a916001600160a01b03909116908a61380c565b855460018701546132b391889188916001600160a01b0316908861380c565b613a4e565b979650505050505050565b80158061335657506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133549190614527565b155b6133e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610e82565b6040516001600160a01b038316602482015260448101829052610a1d9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401613195565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561346b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348f91906149f7565b905060128160ff1611156134da576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e82565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905561351b60ff821660126146e9565b61352690600a614afe565b600580546bffffffffffffffffffffffff9290921674010000000000000000000000000000000000000000026001600160a01b03928316179055600680548483167fffffffffffffffffffffffff0000000000000000000000000000000000000000919091161790556135be9084167f00000000000000000000000000000000000000000000000000000000000000006000196132c3565b6001600160a01b03821615610a1d57826001600160a01b0316826001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613615573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363991906147e7565b6001600160a01b031614613684576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610e82565b610a1d6001600160a01b038416836000196132c3565b60606136a4613fa9565b6136ac613fa9565b865460018801546001600160a01b039182169187168290036136dc576136d5898984848a61380c565b9350613762565b6001600160a01b038216156136fb576136f88883836000613bfd565b93505b6001600160a01b0387166137125760009550613722565b61371f8888600089613bfd565b92505b88547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03881617895585811461376257600189018690555b61376c8484613a4e565b9998505050505050505050565b6000613786858585613c80565b9050600182600181111561379c5761379c614999565b036127635782806137af576137af6149c8565b84860915612763576000198110156137c957600101612763565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610e82565b613814613fa9565b6001600160a01b03841661382757600091505b8183146138445761383a85858585613bfd565b6001870183905590505b95945050505050565b80516060906001600160a01b0316156139235760408051600180825281830190925290816020015b60408051808201909152600080825260208201528152602001906001900390816138755790505090508160200151816000815181106138b6576138b6614804565b60200260200101819052508160200151600001516001600160a01b031682600001516001600160a01b03167fab331859c86987039e21afcbe4329f38052610222bdc17b3990febf710fbb71484602001516020015160405161391a91815260200190565b60405180910390a35b919050565b600061271083810390841061393e576000613844565b613844858261271086613779565b60006139a1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d6d9092919063ffffffff16565b90508051600014806139c25750808060200190518101906139c29190614b0a565b610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e82565b81516060906001600160a01b031615801590613a73575081516001600160a01b031615155b15613bc4576040805160028082526060820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a8e5790505090508260200151826020015182600081518110613ad457613ad4614804565b6020026020010183600181518110613aee57613aee614804565b6020026020010182905282905250508260200151600001516001600160a01b031683600001516001600160a01b03167fab331859c86987039e21afcbe4329f38052610222bdc17b3990febf710fbb714856020015160200151604051613b5691815260200190565b60405180910390a38160200151600001516001600160a01b031682600001516001600160a01b03167fab331859c86987039e21afcbe4329f38052610222bdc17b3990febf710fbb714846020015160200151604051613bb791815260200190565b60405180910390a361098f565b82516001600160a01b031615613be457613bdd8361384d565b905061098f565b81516001600160a01b03161561098f57613bdd8261384d565b613c05613fa9565b6001600160a01b03841615612763576000613c1f84613d7c565b613c2884613d7c565b613c329190614b27565b90508015612d40576040518060400160405280876001600160a01b031681526020016040518060400160405280886001600160a01b0316815260200184815250815250915050949350505050565b6000808060001985870985870292508281108382030391505080600003613cba57838281613cb057613cb06149c8565b04925050506113a1565b838110613d04576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610e82565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606127638484600085613ddb565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156129b2576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610e82565b606082471015613e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610e82565b600080866001600160a01b03168587604051613e899190614b47565b60006040518083038185875af1925050503d8060008114613ec6576040519150601f19603f3d011682016040523d82523d6000602084013e613ecb565b606091505b5091509150612d3c8783838760608315613f60578251600003613f59576001600160a01b0385163b613f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e82565b5081612763565b6127638383815115613f755781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e829190614b63565b604051806040016040528060006001600160a01b03168152602001613fea604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461392357600080fd5b60006020828403121561403157600080fd5b6113a182613fef565b6001600160a01b03811681146110c657600080fd5b60008060006060848603121561406457600080fd5b833561406f8161403a565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561409d57600080fd5b863595506020870135945060408701356140b68161403a565b935060608701356140c68161403a565b9598949750929560808101359460a0909101359350915050565b6000602082840312156140f257600080fd5b81356113a18161403a565b60006020828403121561410f57600080fd5b5035919050565b80151581146110c657600080fd5b6000806040838503121561413757600080fd5b82356141428161403a565b9150602083013561415281614116565b809150509250929050565b6000806040838503121561417057600080fd5b50508035926020909101359150565b6000806040838503121561419257600080fd5b823564ffffffffff811681146141a757600080fd5b915060208301356bffffffffffffffffffffffff8116811461415257600080fd5b600080600080600060a086880312156141e057600080fd5b85356141eb8161403a565b94506020860135935060408601356142028161403a565b94979396509394606081013594506080013592915050565b600080600080600060a0868803121561423257600080fd5b853594506020860135935060408601356142028161403a565b60008060006060848603121561426057600080fd5b833561426b8161403a565b9250602084013561427b8161403a565b929592945050506040919091013590565b60006020828403121561429e57600080fd5b813561ffff811681146113a157600080fd5b6000604082840312156142c257600080fd5b50919050565b6000806000604084860312156142dd57600080fd5b83356142e88161403a565b9250602084013567ffffffffffffffff8082111561430557600080fd5b818601915086601f83011261431957600080fd5b81358181111561432857600080fd5b8760208260061b850101111561433d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143c6576143c6614350565b604052919050565b600080604083850312156143e157600080fd5b8235915060208084013567ffffffffffffffff8082111561440157600080fd5b818601915086601f83011261441557600080fd5b81358181111561442757614427614350565b614457847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161437f565b9150808252878482850101111561446d57600080fd5b80848401858401376000848284010152508093505050509250929050565b600080600080608085870312156144a157600080fd5b84356144ac8161403a565b9350602085013592506040850135915060608501356144ca8161403a565b939692955090935050565b600080604083850312156144e857600080fd5b82356144f38161403a565b915061450160208401613fef565b90509250929050565b60006020828403121561451c57600080fd5b81356113a181614116565b60006020828403121561453957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561098f5761098f614540565b600081600f0b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081036145b7576145b7614540565b60000392915050565b60008151808452602080850194506020840160005b8381101561460557815180516001600160a01b0316885283015183880152604090960195908201906001016145d5565b509495945050505050565b60408152600061462360408301856145c0565b90506001600160a01b03831660208301529392505050565b60008060006060848603121561465057600080fd5b8351925060208401519150604084015190509250925092565b6fffffffffffffffffffffffffffffffff8516815260006001600160a01b038086166020840152808516604084015250608060608301526146ad60808301846145c0565b9695505050505050565b6000602082840312156146c957600080fd5b81516fffffffffffffffffffffffffffffffff811681146113a157600080fd5b8181038181111561098f5761098f614540565b6fffffffffffffffffffffffffffffffff841681526001600160a01b038316602082015260606040820152600061384460608301846145c0565b60408101823561474581614116565b15158252602083013561475781614116565b80151560208401525092915050565b813561477181614116565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811691151560ff16918217835560208401356147af81614116565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009190911690911790151560081b61ff001617905550565b6000602082840312156147f957600080fd5b81516113a18161403a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040828403121561484557600080fd5b6040516040810181811067ffffffffffffffff8211171561486857614868614350565b60405261487483613fef565b8152602083013561488481614116565b60208201529392505050565b64ffffffffff81811683821601908082111561295c5761295c614540565b60005b838110156148c95781810151838201526020016148b1565b50506000910152565b600081518084526148ea8160208601602086016148ae565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006001600160a01b038087168352856020840152808516604084015250608060608301526146ad60808301846148d2565b60006020828403121561496057600080fd5b815180600f0b81146113a157600080fd5b808201828112600083128015821682158216171561499157614991614540565b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215614a0957600080fd5b815160ff811681146113a157600080fd5b600181815b80851115614a55578160001904821115614a3b57614a3b614540565b80851615614a4857918102915b93841c9390800290614a1f565b509250929050565b600082614a6c5750600161098f565b81614a795750600061098f565b8160018114614a8f5760028114614a9957614ab5565b600191505061098f565b60ff841115614aaa57614aaa614540565b50506001821b61098f565b5060208310610133831016604e8410600b8410161715614ad8575081810a61098f565b614ae28383614a1a565b8060001904821115614af657614af6614540565b029392505050565b60006113a18383614a5d565b600060208284031215614b1c57600080fd5b81516113a181614116565b818103600083128015838313168383128216171561295c5761295c614540565b60008251614b598184602087016148ae565b9190910192915050565b6020815260006113a160208301846148d256fea2646970667358221220abd956a0e78a597c05cd5cd231a38201dc8ac5dc0f04fcfbd9409316bbe55ee664736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d800000000000000000000000001db1591540d7a6062be0837ca3c808add28844f6000000000000000000000000db591ea2e5db886da872654d58f6cc584b68e7cc000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000781b4c57100738095222bd92d37b07ed034ab696