0 txs
2 calls
constructor
constructor(address feeRecipient, uint256 flashLoanFee)
functions
getAllBinSteps
viewfunction getAllBinSteps() view returns (uint256[] binStepWithPreset)
getAllLBPairs
viewfunction getAllLBPairs(address tokenX, address tokenY) view returns (tuple[] lbPairsAvailable)
getFeeRecipient
viewfunction getFeeRecipient() view returns (address feeRecipient)
getFlashLoanFee
viewfunction getFlashLoanFee() view returns (uint256 flashLoanFee)
getLBPairAtIndex
viewfunction getLBPairAtIndex(uint256 index) view returns (address lbPair)
getLBPairImplementation
viewfunction getLBPairImplementation() view returns (address lbPairImplementation)
getLBPairInformation
viewfunction getLBPairInformation(address tokenA, address tokenB, uint256 binStep) view returns (tuple lbPairInformation)
getMaxFlashLoanFee
purefunction getMaxFlashLoanFee() pure returns (uint256 maxFee)
getMinBinStep
purefunction getMinBinStep() pure returns (uint256 minBinStep)
getNumberOfLBPairs
viewfunction getNumberOfLBPairs() view returns (uint256 lbPairNumber)
getNumberOfQuoteAssets
viewfunction getNumberOfQuoteAssets() view returns (uint256 numberOfQuoteAssets)
getOpenBinSteps
viewfunction getOpenBinSteps() view returns (uint256[] openBinStep)
getPreset
viewfunction getPreset(uint256 binStep) view returns (uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulator, bool isOpen)
getQuoteAssetAtIndex
viewfunction getQuoteAssetAtIndex(uint256 index) view returns (address asset)
isQuoteAsset
viewfunction isQuoteAsset(address token) view returns (bool isQuote)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
addQuoteAsset
nonpayablefunction addQuoteAsset(address quoteAsset)
becomeOwner
nonpayablefunction becomeOwner()
createLBPair
nonpayablefunction createLBPair(address tokenX, address tokenY, uint24 activeId, uint16 binStep) returns (address pair)
forceDecay
nonpayablefunction forceDecay(address pair)
removePreset
nonpayablefunction removePreset(uint16 binStep)
removeQuoteAsset
nonpayablefunction removeQuoteAsset(address quoteAsset)
renounceOwnership
nonpayablefunction renounceOwnership()
revokePendingOwner
nonpayablefunction revokePendingOwner()
setFeeRecipient
nonpayablefunction setFeeRecipient(address feeRecipient)
setFeesParametersOnPair
nonpayablefunction setFeesParametersOnPair(address tokenX, address tokenY, uint16 binStep, uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator)
setFlashLoanFee
nonpayablefunction setFlashLoanFee(uint256 flashLoanFee)
setLBPairIgnored
nonpayablefunction setLBPairIgnored(address tokenX, address tokenY, uint16 binStep, bool ignored)
setLBPairImplementation
nonpayablefunction setLBPairImplementation(address newLBPairImplementation)
setPendingOwner
nonpayablefunction setPendingOwner(address pendingOwner_)
setPreset
nonpayablefunction setPreset(uint16 binStep, uint16 baseFactor, uint16 filterPeriod, uint16 decayPeriod, uint16 reductionFactor, uint24 variableFeeControl, uint16 protocolShare, uint24 maxVolatilityAccumulator, bool isOpen)
setPresetOpenState
nonpayablefunction setPresetOpenState(uint16 binStep, bool isOpen)
events
FeeRecipientSet
event FeeRecipientSet(address oldRecipient, address newRecipient)
FlashLoanFeeSet
event FlashLoanFeeSet(uint256 oldFlashLoanFee, uint256 newFlashLoanFee)
LBPairCreated
event LBPairCreated(address indexed tokenX, address indexed tokenY, uint256 indexed binStep, address LBPair, uint256 pid)
LBPairIgnoredStateChanged
event LBPairIgnoredStateChanged(address indexed LBPair, bool ignored)
LBPairImplementationSet
event LBPairImplementationSet(address oldLBPairImplementation, address LBPairImplementation)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PendingOwnerSet
event PendingOwnerSet(address indexed pendingOwner)
PresetOpenStateChanged
event PresetOpenStateChanged(uint256 indexed binStep, bool indexed isOpen)
PresetRemoved
event PresetRemoved(uint256 indexed binStep)
PresetSet
event PresetSet(uint256 indexed binStep, uint256 baseFactor, uint256 filterPeriod, uint256 decayPeriod, uint256 reductionFactor, uint256 variableFeeControl, uint256 protocolShare, uint256 maxVolatilityAccumulator)
QuoteAssetAdded
event QuoteAssetAdded(address indexed quoteAsset)
QuoteAssetRemoved
event QuoteAssetRemoved(address indexed quoteAsset)
errors
LBFactory__AddressZero
error LBFactory__AddressZero()
LBFactory__BinStepHasNoPreset
error LBFactory__BinStepHasNoPreset(uint256 binStep)
LBFactory__BinStepTooLow
error LBFactory__BinStepTooLow(uint256 binStep)
LBFactory__FlashLoanFeeAboveMax
error LBFactory__FlashLoanFeeAboveMax(uint256 fees, uint256 maxFees)
LBFactory__IdenticalAddresses
error LBFactory__IdenticalAddresses(address token)
LBFactory__ImplementationNotSet
error LBFactory__ImplementationNotSet()
LBFactory__LBPairAlreadyExists
error LBFactory__LBPairAlreadyExists(address tokenX, address tokenY, uint256 _binStep)
LBFactory__LBPairDoesNotExist
error LBFactory__LBPairDoesNotExist(address tokenX, address tokenY, uint256 binStep)
LBFactory__LBPairIgnoredIsAlreadyInTheSameState
error LBFactory__LBPairIgnoredIsAlreadyInTheSameState()
LBFactory__LBPairNotCreated
error LBFactory__LBPairNotCreated(address tokenX, address tokenY, uint256 binStep)
LBFactory__LBPairSafetyCheckFailed
error LBFactory__LBPairSafetyCheckFailed(address LBPairImplementation)
LBFactory__PresetIsLockedForUsers
error LBFactory__PresetIsLockedForUsers(address user, uint256 binStep)
LBFactory__PresetOpenStateIsAlreadyInTheSameState
error LBFactory__PresetOpenStateIsAlreadyInTheSameState()
LBFactory__QuoteAssetAlreadyWhitelisted
error LBFactory__QuoteAssetAlreadyWhitelisted(address quoteAsset)
LBFactory__QuoteAssetNotWhitelisted
error LBFactory__QuoteAssetNotWhitelisted(address quoteAsset)
LBFactory__SameFeeRecipient
error LBFactory__SameFeeRecipient(address feeRecipient)
LBFactory__SameFlashLoanFee
error LBFactory__SameFlashLoanFee(uint256 flashLoanFee)
LBFactory__SameImplementation
error LBFactory__SameImplementation(address LBPairImplementation)
PairParametersHelper__InvalidParameter
error PairParametersHelper__InvalidParameter()
PendingOwnable__AddressZero
error PendingOwnable__AddressZero()
PendingOwnable__NoPendingOwner
error PendingOwnable__NoPendingOwner()
PendingOwnable__NotOwner
error PendingOwnable__NotOwner()
PendingOwnable__NotPendingOwner
error PendingOwnable__NotPendingOwner()
PendingOwnable__PendingOwnerAlreadySet
error PendingOwnable__PendingOwnerAlreadySet()
SafeCast__Exceeds16Bits
error SafeCast__Exceeds16Bits()
Uint128x128Math__PowUnderflow
error Uint128x128Math__PowUnderflow(uint256 x, int256 y)
creation bytecode
0x60806040523480156200001157600080fd5b5060405162002b9b38038062002b9b8339810160408190526200003491620001f4565b6200003f33620000d1565b67016345785d8a00008111156200007f57604051635e8988c160e01b81526004810182905267016345785d8a000060248201526044015b60405180910390fd5b6200008a826200012b565b60038190556040805160008152602081018390527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e50910160405180910390a1505062000230565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166200015357604051632573cfb960e21b815260040160405180910390fd5b6002546001600160a01b039081169082168114156200019557600254604051634fcea97160e01b81526001600160a01b03909116600482015260240162000076565b600280546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa70840152721910160405180910390a15050565b600080604083850312156200020857600080fd5b82516001600160a01b03811681146200022057600080fd5b6020939093015192949293505050565b61295b80620002406000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063704037bd1161012a578063b0384781116100bd578063e30c39781161008c578063e92d0d5d11610071578063e92d0d5d14610490578063f9dca989146104a3578063fd90c2be146104ab57600080fd5b8063e30c39781461046c578063e74b981b1461047d57600080fd5b8063b038478114610420578063c42069ec14610433578063ddbfd94114610446578063e203a31f1461045957600080fd5b80638ce9aa1c116100f95780638ce9aa1c146103a05780638da5cb5b146103ae578063aabc4b3c146103bf578063af3710651461040f57600080fd5b8063704037bd1461035d578063715018a61461037d5780637daf5d661461038557806380c5061e1461039857600080fd5b80634e937c3a116101a25780636622e0d7116101715780636622e0d71461031b57806367ab8a4e1461033b57806369d56ea314610343578063701ab8c11461035657600080fd5b80634e937c3a146102db5780635a440923146102ed5780635b35875c14610300578063659ac74b1461030857600080fd5b8063379ee803116101de578063379ee803146102915780633c78a941146102a45780634ccb20c0146102b75780634cd161d3146102c857600080fd5b80630282c9c1146102105780630752092b1461022e578063093ff76914610259578063277218421461026e575b600080fd5b6102186104b3565b6040516102259190612415565b60405180910390f35b61024161023c366004612459565b61058d565b6040516001600160a01b039091168152602001610225565b61026c6102673660046124ac565b6105a0565b005b61028161027c36600461256a565b6106c9565b6040519015158152602001610225565b61026c61029f366004612597565b6106d6565b61026c6102b236600461256a565b610815565b6002546001600160a01b0316610241565b61026c6102d636600461263f565b610896565b6005545b604051908152602001610225565b61026c6102fb36600461256a565b610985565b610218610a1a565b610241610316366004612672565b610a2b565b61032e6103293660046126ca565b610f8f565b6040516102259190612703565b61026c611127565b61026c610351366004612777565b611187565b60016102df565b61037061036b3660046127c4565b611335565b6040516102259190612805565b61026c61136c565b610241610393366004612459565b6113a1565b6102df6113d1565b67016345785d8a00006102df565b6000546001600160a01b0316610241565b6103d26103cd366004612459565b6113dd565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e082015261010001610225565b6004546001600160a01b0316610241565b61026c61042e36600461256a565b61149e565b61026c61044136600461256a565b611603565b61026c61045436600461256a565b61168b565b61026c610467366004612841565b611720565b6001546001600160a01b0316610241565b61026c61048b36600461256a565b6117af565b61026c61049e366004612459565b6117e3565b61026c6118aa565b6003546102df565b606060006104c160076118e9565b90508015610589578067ffffffffffffffff8111156104e2576104e261285c565b60405190808252806020026020018201604052801561050b578160200160208202803683370190505b5091506000805b8281101561057a576000806105286007846118f4565b909250905061053681611910565b15610567578186858151811061054e5761054e612872565b6020908102919091010152836105638161289e565b9450505b5050806105739061289e565b9050610512565b5081811015610587578083525b505b5090565b600061059a600a8361191c565b92915050565b6000546001600160a01b031633146105cb57604051639f216c1360e01b815260040160405180910390fd5b60006105dc8b8b8b61ffff1661192f565b6020015190506001600160a01b03811661062b5760405163b65ee95360e01b81526001600160a01b03808d1660048301528b16602482015261ffff8a1660448201526064015b60405180910390fd5b604051633329c28d60e11b815261ffff808a16600483015280891660248301528088166044830152808716606483015262ffffff808716608484015290851660a4830152831660c48201526001600160a01b03821690636653851a9060e401600060405180830381600087803b1580156106a457600080fd5b505af11580156106b8573d6000803e3d6000fd5b505050505050505050505050505050565b600061059a600a836119d9565b6000546001600160a01b0316331461070157604051639f216c1360e01b815260040160405180910390fd5b60018961ffff16101561072d57604051634f958e7160e01b815261ffff8a166004820152602401610622565b600061073f818a8a8a8a8a8a8a6119fb565b905081156107575761075481600160ff611afb565b90505b610767600761ffff8c1683611b22565b506040805161ffff8b811682528a8116602083015289811682840152888116606083015262ffffff888116608084015287821660a0840152861660c08301529151918c16917f839844a256a87f87c9c835117d9a1c40be013954064c937072acb32d36db6a289181900360e00190a26040518215159061ffff8c16907f58a8b6a02b964cca2712e5a71d7b0d564a56b4a0f573b4c47f389341ade14cfd90600090a350505050505050505050565b6000546001600160a01b0316331461084057604051639f216c1360e01b815260040160405180910390fd5b806001600160a01b031663d3b9fbe46040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146108c157604051639f216c1360e01b815260040160405180910390fd5b6108d0600761ffff8416611b2f565b6108f357604051637d9160bf60e11b815261ffff83166004820152602401610622565b6000610904600761ffff8516611b3b565b905081151560ff82901c1515141561092f576040516311be38db60e11b815260040160405180910390fd5b61094c61ffff8416610943838560ff611afb565b60079190611b22565b506040518215159061ffff8516907f58a8b6a02b964cca2712e5a71d7b0d564a56b4a0f573b4c47f389341ade14cfd90600090a3505050565b6000546001600160a01b031633146109b057604051639f216c1360e01b815260040160405180910390fd5b6109bb600a82611b47565b6109e3576040516303ce0ad960e01b81526001600160a01b0382166004820152602401610622565b6040516001600160a01b038216907f84cc2115995684dcb0cd3d3a9565e3d32f075de81db70c8dc3a719b2a47af67e90600090a250565b6060610a266007611b5c565b905090565b6000610a3c600761ffff8416611b2f565b610a5f57604051637d9160bf60e11b815261ffff83166004820152602401610622565b6000610a70600761ffff8516611b3b565b90506000610a866000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316149050610aa582611910565b158015610ab0575080155b15610ada576040516304fc2fe760e11b815233600482015261ffff85166024820152604401610622565b610ae5600a876119d9565b610b0d57604051638e888ef360e01b81526001600160a01b0387166004820152602401610622565b856001600160a01b0316876001600160a01b03161415610b4b57604051632f9b185360e01b81526001600160a01b0388166004820152602401610622565b610b558585611b69565b50600080610b638989611bad565b90925090506001600160a01b038216610b8f57604051632573cfb960e21b815260040160405180910390fd5b6001600160a01b0382811660009081526006602090815260408083208585168452825280832061ffff8b1684529091529020546201000090041615610c045760405163cb27a43560e01b81526001600160a01b03808b1660048301528916602482015261ffff87166044820152606401610622565b6004546001600160a01b031680610c2e576040516328b4fcf960e21b815260040160405180910390fd5b6040516bffffffffffffffffffffffff1960608c811b821660208401528b901b1660348201527fffff00000000000000000000000000000000000000000000000000000000000060f089901b166048820152610cdb908290604a0160408051601f198184030181528282526001600160a01b03808916602085015287169183019190915261ffff8b1660608301529060800160405160208183030381529060405280519060200120611bd6565b955050846001600160a01b03166347973bff610cf686611c91565b610cff87611c9d565b610d0888611cad565b610d1189611cbd565b610d1a8a611ccd565b610d238b611cde565b610d2c8c611cee565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e08a901b16815261ffff978816600482015295871660248701529386166044860152918516606485015262ffffff9081166084850152931660a4830152821660c4820152908a1660e482015261010401600060405180830381600087803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b50506040805160808101825261ffff808b168083526001600160a01b03808c1660208086018281528c15158789019081526000606089018181528e8716808352600686528b83208f89168085529087528c84208a855287528c84209b518c549651955193511515600160b81b0260ff60b81b19941515600160b01b02949094167fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff96909a1662010000027fffffffffffffffffffff000000000000000000000000000000000000000000009097169b169a909a179490941792909216959095171790965560058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b031916909217909155938152600c84528481209281529190925291909120610f1393509150611cff565b508561ffff16886001600160a01b03168a6001600160a01b03167f2c8d104b27c6b7f4492017a6f5cf3803043688934ebcaa6a03540beeaf976aff886001600580549050610f6191906128b9565b604080516001600160a01b03909316835260208301919091520160405180910390a450505050949350505050565b6060600080610f9e8585611bad565b6001600160a01b038083166000908152600c602090815260408083209385168352929052908120929450909250610fd482611d0b565b9050801561111d578067ffffffffffffffff811115610ff557610ff561285c565b60405190808252806020026020018201604052801561104757816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816110135790505b506001600160a01b03808616600090815260066020908152604080832093881683529290529081209196505b8281101561111a57600061108f61108a868461191c565b611d15565b6040805160808101825261ffff831680825260008181526020888152848220546001600160a01b03620100008204168286015260ff600160b01b8204811615159686019690965292909152879052600160b81b90049091161515606082015289519192509089908490811061110657611106612872565b602090810291909101015250600101611073565b50505b5050505092915050565b6000546001600160a01b0316331461115257604051639f216c1360e01b815260040160405180910390fd5b6001546001600160a01b031661117b5760405163ecfad6bf60e01b815260040160405180910390fd5b6111856000611d3f565b565b6000546001600160a01b031633146111b257604051639f216c1360e01b815260040160405180910390fd5b6000806111bf8686611bad565b6001600160a01b0380831660009081526006602090815260408083208486168452825280832061ffff808c1685529083529281902081516080810183529054938416815262010000840490941691840182905260ff600160b01b84048116151591850191909152600160b81b90920490911615156060830152929450909250906112795760405163102a919160e21b81526001600160a01b0380891660048301528716602482015261ffff86166044820152606401610622565b8315158160600151151514156112a157604051626ee66560e11b815260040160405180910390fd5b6001600160a01b0380841660009081526006602090815260408083208685168452825280832061ffff8a1684528252918290208054881515600160b81b0260ff60b81b1990911617905583015190519116907f44cf35361c9ff3c8c1397ec6410d5495cc481feaef35c9af11da1a637107de4f9061132490871515815260200190565b60405180910390a250505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915261136484848461192f565b949350505050565b6000546001600160a01b0316331461139757604051639f216c1360e01b815260040160405180910390fd5b6111856000611d89565b6000600582815481106113b6576113b6612872565b6000918252602090912001546001600160a01b031692915050565b6000610a26600a611d0b565b6000808080808080806113f160078a611b2f565b61141157604051637d9160bf60e11b8152600481018a9052602401610622565b600061141e60078b611b3b565b905061142981611c91565b61ffff16985061143881611c9d565b61ffff16975061144781611cad565b61ffff16965061145681611cbd565b61ffff16955061146581611ccd565b62ffffff16945061147581611cde565b61ffff16935061148481611cee565b62ffffff16925060ff81901c915050919395975091939597565b6000546001600160a01b031633146114c957604051639f216c1360e01b815260040160405180910390fd5b306001600160a01b0316816001600160a01b03166388cc58e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153591906128d0565b6001600160a01b03161461156757604051630a3e70af60e11b81526001600160a01b0382166004820152602401610622565b6004546001600160a01b039081169082168114156115a357604051630ded3b9560e31b81526001600160a01b0383166004820152602401610622565b600480546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f900d0e3d359f50e4f923ecdc06b401e07dbb9f485e17b07bcfc91a13000b277e91015b60405180910390a15050565b6000546001600160a01b0316331461162e57604051639f216c1360e01b815260040160405180910390fd5b6001600160a01b038116611655576040516391f3851560e01b815260040160405180910390fd5b6001546001600160a01b03161561167f5760405163716b1fbf60e01b815260040160405180910390fd5b61168881611d3f565b50565b6000546001600160a01b031633146116b657604051639f216c1360e01b815260040160405180910390fd5b6116c1600a82611de3565b6116e957604051638e888ef360e01b81526001600160a01b0382166004820152602401610622565b6040516001600160a01b038216907f0b767739217755d8af5a2ba75b181a19fa1750f8bb701f09311cb19a90140cb390600090a250565b6000546001600160a01b0316331461174b57604051639f216c1360e01b815260040160405180910390fd5b61175a600761ffff8316611df8565b61177d57604051637d9160bf60e11b815261ffff82166004820152602401610622565b60405161ffff8216907fdd86b848bb56ff540caa68683fa467d0e7eb5f8b2d44e4ee435742eeeae9be1390600090a250565b6000546001600160a01b031633146117da57604051639f216c1360e01b815260040160405180910390fd5b61168881611e04565b6000546001600160a01b0316331461180e57604051639f216c1360e01b815260040160405180910390fd5b6003548181141561183557604051631baa31e960e21b815260048101839052602401610622565b67016345785d8a000082111561186f57604051635e8988c160e01b81526004810183905267016345785d8a00006024820152604401610622565b600382905560408051828152602081018490527f5c34e91c94c78b662a45d0bd4a25a4e32c584c54a45a76e4a4d43be27ba40e5091016115f7565b6001546001600160a01b0316331415806118c2575033155b156118e057604051633982680960e11b815260040160405180910390fd5b61118533611d89565b600061059a82611ec3565b60008080806119038686611ece565b9097909650945050505050565b600060ff82901c61059a565b60006119288383611ef9565b9392505050565b60408051608081018252600080825260208201819052918101829052606081019190915261195d8484611bad565b6001600160a01b03918216600090815260066020908152604080832093851683529281528282209582529485528190208151608081018352905461ffff811682526201000081049093169481019490945260ff600160b01b83048116151591850191909152600160b81b90910416151560608301525092915050565b6001600160a01b03811660009081526001830160205260408120541515611928565b60008561ffff168761ffff161180611a185750610fff8661ffff16115b80611a2857506127108561ffff16115b80611a3857506109c48361ffff16115b80611a4a5750620fffff8262ffffff16115b15611a6857604051631c07203f60e01b815260040160405180910390fd5b5060109590951b630fff00001661ffff9690961695909517601c9390931b64fff0000000169290921760289190911b663fff0000000000161760369190911b693fffffc00000000000001617604e9290921b6b0fffc00000000000000000001691909117605c9190911b6dfffff0000000000000000000000016176dffffffffffffffffffffffffffff19919091161790565b60006113648484611b0d576000611b10565b60015b600180861b19929092169116841b1790565b6000611364848484611f23565b60006119288383611f40565b60006119288383611f4c565b6000611928836001600160a01b038416611fbc565b606060006119288361200b565b600061271071ffff00000000000000000000000000000000608084901b1604600160801b0162ffffff8416627fffff1901611ba48282612016565b95945050505050565b600080826001600160a01b0316846001600160a01b03161115611bce579192915b509192909150565b600060408303516020840351845180602087010180516002830161ffca811115611c085763c8c781396000526004601cfd5b6c5af43d3d93803e603357fd5bf3895289600d8a03527d6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d738160481b176035820160d81b1760218a03528060f01b835287603f8201601f8b036000f596505085611c775763301164256000526004601cfd5b90528552601f19850152603f199093019290925250919050565b600061ffff821661059a565b600061059a8260101c610fff1690565b600061059a82601c1c610fff1690565b600061059a8260281c613fff1690565b600061059a8260361c62ffffff1690565b600061059a82604e1c613fff1690565b600061059a82605c1c620fffff1690565b60006119288383611fbc565b600061059a825490565b8061ffff81168114611d3a576040516364ae406d60e01b815260040160405180910390fd5b919050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f68f49b346b94582a8b5f9d10e3fe3365318fe8f191ff8dce7c59c6cad06b02f590600090a250565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611928836001600160a01b038416612278565b6000611928838361236b565b6001600160a01b038116611e2b57604051632573cfb960e21b815260040160405180910390fd5b6002546001600160a01b03908116908216811415611e6b57600254604051634fcea97160e01b81526001600160a01b039091166004820152602401610622565b600280546001600160a01b0319166001600160a01b0384811691821790925560408051928416835260208301919091527f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa7084015272191016115f7565b600061059a82611d0b565b60008080611edc858561191c565b600081815260029690960160205260409095205494959350505050565b6000826000018281548110611f1057611f10612872565b9060005260206000200154905092915050565b600082815260028401602052604081208290556113648484611cff565b60006119288383612388565b600081815260028301602052604081205480151580611f705750611f708484611f40565b6119285760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610622565b60008181526001830160205260408120546120035750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561059a565b50600061059a565b606061059a826123a0565b600080808361202e5750600160801b915061059a9050565b50826000811215612040579015906000035b6210000081101561223957600160801b9250846fffffffffffffffffffffffffffffffff81111561207357911591600019045b60018216156120845792830260801c925b800260801c600282161561209a5792830260801c925b800260801c60048216156120b05792830260801c925b800260801c60088216156120c65792830260801c925b800260801c60108216156120dc5792830260801c925b800260801c60208216156120f25792830260801c925b800260801c60408216156121085792830260801c925b8002608090811c9082161561211f5792830260801c925b800260801c6101008216156121365792830260801c925b800260801c61020082161561214d5792830260801c925b800260801c6104008216156121645792830260801c925b800260801c61080082161561217b5792830260801c925b800260801c6110008216156121925792830260801c925b800260801c6120008216156121a95792830260801c925b800260801c6140008216156121c05792830260801c925b800260801c6180008216156121d75792830260801c925b800260801c620100008216156121ef5792830260801c925b800260801c620200008216156122075792830260801c925b800260801c6204000082161561221f5792830260801c925b800260801c620800008216156122375792830260801c925b505b8261226157604051631dba598d60e11b81526004810186905260248101859052604401610622565b8161226c5782611ba4565b611ba4836000196128ed565b6000818152600183016020526040812054801561236157600061229c6001836128b9565b85549091506000906122b0906001906128b9565b90508181146123155760008660000182815481106122d0576122d0612872565b90600052602060002001549050808760000184815481106122f3576122f3612872565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123265761232661290f565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061059a565b600091505061059a565b6000818152600283016020526040812081905561192883836123ad565b60008181526001830160205260408120541515611928565b60606000611928836123b9565b60006119288383612278565b60608160000180548060200260200160405190810160405280929190818152602001828054801561240957602002820191906000526020600020905b8154815260200190600101908083116123f5575b50505050509050919050565b6020808252825182820181905260009190848201906040850190845b8181101561244d57835183529284019291840191600101612431565b50909695505050505050565b60006020828403121561246b57600080fd5b5035919050565b6001600160a01b038116811461168857600080fd5b803561ffff81168114611d3a57600080fd5b803562ffffff81168114611d3a57600080fd5b6000806000806000806000806000806101408b8d0312156124cc57600080fd5b8a356124d781612472565b995060208b01356124e781612472565b98506124f560408c01612487565b975061250360608c01612487565b965061251160808c01612487565b955061251f60a08c01612487565b945061252d60c08c01612487565b935061253b60e08c01612499565b925061254a6101008c01612487565b91506125596101208c01612499565b90509295989b9194979a5092959850565b60006020828403121561257c57600080fd5b813561192881612472565b80358015158114611d3a57600080fd5b60008060008060008060008060006101208a8c0312156125b657600080fd5b6125bf8a612487565b98506125cd60208b01612487565b97506125db60408b01612487565b96506125e960608b01612487565b95506125f760808b01612487565b945061260560a08b01612499565b935061261360c08b01612487565b925061262160e08b01612499565b91506126306101008b01612587565b90509295985092959850929598565b6000806040838503121561265257600080fd5b61265b83612487565b915061266960208401612587565b90509250929050565b6000806000806080858703121561268857600080fd5b843561269381612472565b935060208501356126a381612472565b92506126b160408601612499565b91506126bf60608601612487565b905092959194509250565b600080604083850312156126dd57600080fd5b82356126e881612472565b915060208301356126f881612472565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561244d5761276483855161ffff81511682526001600160a01b0360208201511660208301526040810151151560408301526060810151151560608301525050565b928401926080929092019160010161271f565b6000806000806080858703121561278d57600080fd5b843561279881612472565b935060208501356127a881612472565b92506127b660408601612487565b91506126bf60608601612587565b6000806000606084860312156127d957600080fd5b83356127e481612472565b925060208401356127f481612472565b929592945050506040919091013590565b815161ffff1681526020808301516001600160a01b0316908201526040808301511515908201526060808301511515908201526080810161059a565b60006020828403121561285357600080fd5b61192882612487565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156128b2576128b2612888565b5060010190565b6000828210156128cb576128cb612888565b500390565b6000602082840312156128e257600080fd5b815161192881612472565b60008261290a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203fc0a59f11c0729c34b5cda1e483dd3d1e979bc118a6ef6869e9e89ae38fd9ff64736f6c634300080a0033000000000000000000000000b4ffc606e5771b9d41ace83211320bc42f8b9e5d0000000000000000000000000000000000000000000000000000048c27395000