0 txs
1 call
constructor
constructor(uint256 dexId_, address liquidity_, address dexFactory_, address smartLendingFactory_)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEX_FACTORY
viewfunction DEX_FACTORY() view returns (address)
DEX
viewfunction DEX() view returns (address)
dexFromAddress
viewfunction dexFromAddress() view returns (address)
exchangePrice
viewfunction exchangePrice() view returns (uint184)
feeOrReward
viewfunction feeOrReward() view returns (int32)
getUpdateExchangePrice
viewfunction getUpdateExchangePrice() view returns (uint184 exchangePrice_, bool rewardsOrFeeActive_)
IS_NATIVE_PAIR
viewfunction IS_NATIVE_PAIR() view returns (bool)
lastTimestamp
viewfunction lastTimestamp() view returns (uint40)
LIQUIDITY
viewfunction LIQUIDITY() view returns (address)
name
viewfunction name() view returns (string)
rebalanceDiff
viewfunction rebalanceDiff() view returns (int256)
rebalancer
viewfunction rebalancer() view returns (address)
SMART_LENDING_FACTORY
viewfunction SMART_LENDING_FACTORY() view returns (address)
symbol
viewfunction symbol() view returns (string)
TOKEN0
viewfunction TOKEN0() view returns (address)
TOKEN1
viewfunction TOKEN1() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
payablefunction deposit(uint256 token0Amt_, uint256 token1Amt_, uint256 minSharesAmt_, address to_) payable returns (uint256 amount_, uint256 shares_)
depositPerfect
payablefunction depositPerfect(uint256 shares_, uint256 maxToken0Deposit_, uint256 maxToken1Deposit_, address to_) payable returns (uint256 amount_, uint256 token0Amt_, uint256 token1Amt_)
dexCallback
nonpayablefunction dexCallback(address token_, uint256 amount_)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
rebalance
payablefunction rebalance(uint256 minOrMaxToken0_, uint256 minOrMaxToken1_) payable returns (uint256 shares_, uint256 token0Amt_, uint256 token1Amt_, bool isWithdraw_)
setFeeOrReward
nonpayablefunction setFeeOrReward(int256 feeOrReward_)
setRebalancer
nonpayablefunction setRebalancer(address rebalancer_)
spell
nonpayablefunction spell(address target_, bytes data_) returns (bytes response_)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
updateExchangePrice
nonpayablefunction updateExchangePrice()
withdraw
nonpayablefunction withdraw(uint256 token0Amt_, uint256 token1Amt_, uint256 maxSharesAmt_, address to_) returns (uint256 amount_, uint256 shares_)
withdrawPerfect
nonpayablefunction withdrawPerfect(uint256 shares_, uint256 minToken0Withdraw_, uint256 minToken1Withdraw_, address to_) returns (uint256 amount_, uint256 token0Amt_, uint256 token1Amt_)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
LogFeeOrRewardSet
event LogFeeOrRewardSet(int256 feeOrReward)
LogRebalance
event LogRebalance(uint256 shares_, uint256 token0Amt_, uint256 token1Amt_, bool isWithdraw_)
LogRebalancerSet
event LogRebalancerSet(address rebalancer)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
FluidDexError
error FluidDexError(uint256 errorId_)
FluidDexFactoryError
error FluidDexFactoryError(uint256 errorId)
FluidDexLiquidityOutput
error FluidDexLiquidityOutput(uint256 shares_)
FluidDexPerfectLiquidityOutput
error FluidDexPerfectLiquidityOutput(uint256 token0Amt, uint256 token1Amt)
FluidDexPricesAndExchangeRates
error FluidDexPricesAndExchangeRates((uint256 lastStoredPrice, uint256 centerPrice, uint256 upperRange, uint256 lowerRange, uint256 geometricMean, uint256 supplyToken0ExchangePrice, uint256 borrowToken0ExchangePrice, uint256 supplyToken1ExchangePrice, uint256 borrowToken1ExchangePrice) pex_)
FluidDexSingleTokenOutput
error FluidDexSingleTokenOutput(uint256 tokenAmt)
FluidDexSwapResult
error FluidDexSwapResult(uint256 amountOut)
FluidSafeTransferError
error FluidSafeTransferError(uint256 errorId_)
FluidSmartLendingError
error FluidSmartLendingError(uint256 errorId_)
FluidSmartLendingFactoryError
error FluidSmartLendingFactoryError(uint256 errorId_)
creation bytecode
0x6101606040523480156200001257600080fd5b50604051620041f1380380620041f18339810160408190526200003591620004d8565b60408051808201909152601481527f466c75696420536d617274204c656e64696e67200000000000000000000000006020820152620000748562000338565b604051602001620000879291906200055e565b60408051601f1981840301815282820190915260038252621994d360ea1b602083015290620000b68662000338565b604051602001620000c99291906200055e565b60408051601f198184030181529190526003620000e7838262000624565b506004620000f6828262000624565b50506007805460ff60a01b1916600160a01b17905550826001600160a01b0381166200013e57604051633407ab4b60e01b815261d2f160048201526024015b60405180910390fd5b826001600160a01b0381166200016c57604051633407ab4b60e01b815261d2f1600482015260240162000135565b826001600160a01b0381166200019a57604051633407ab4b60e01b815261d2f1600482015260240162000135565b6001600160a01b0386811660e052858116608081905290851660a052604051630971b35560e11b8152600481018990526312e366aa90602401602060405180830381865afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002179190620006f0565b6001600160a01b031660c081905260408051635bbc8df960e11b815290516000929163b7791bf2916004808301926102409291908290030181865afa15801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b9190620007df565b60a08101516001600160a01b0390811661010081905260c08301519091166101205290915073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480620002f15750610120516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b151561014052505050504264ffffffffff16700de0b6b3a7640000000000000000000000176005555050600780546001600160a01b03191661dead17905550620008d59050565b606060006200034783620003d1565b60010190506000816001600160401b038111156200036957620003696200057f565b6040519080825280601f01601f19166020018201604052801562000394576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846200039e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106200041b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062000448576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200046757662386f26fc10000830492506010015b6305f5e100831062000480576305f5e100830492506008015b61271083106200049557612710830492506004015b60648310620004a8576064830492506002015b600a8310620004b5576001015b92915050565b80516001600160a01b0381168114620004d357600080fd5b919050565b60008060008060808587031215620004ef57600080fd5b845193506200050160208601620004bb565b92506200051160408601620004bb565b91506200052160608601620004bb565b905092959194509250565b6000815160005b818110156200054f576020818501810151868301520162000533565b50600093019283525090919050565b6000620005776200057083866200052c565b846200052c565b949350505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005aa57607f821691505b602082108103620005cb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061f57600081815260208120601f850160051c81016020861015620005fa5750805b601f850160051c820191505b818110156200061b5782815560010162000606565b5050505b505050565b81516001600160401b038111156200064057620006406200057f565b620006588162000651845462000595565b84620005d1565b602080601f831160018114620006905760008415620006775750858301515b600019600386901b1c1916600185901b1785556200061b565b600085815260208120601f198616915b82811015620006c157888601518255948401946001909101908401620006a0565b5085821015620006e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200070357600080fd5b6200070e82620004bb565b9392505050565b6040516101c081016001600160401b03811182821017156200073b576200073b6200057f565b60405290565b600060a082840312156200075457600080fd5b60405160a081016001600160401b03811182821017156200077957620007796200057f565b6040529050806200078a83620004bb565b81526200079a60208401620004bb565b6020820152620007ad60408401620004bb565b6040820152620007c060608401620004bb565b6060820152620007d360808401620004bb565b60808201525092915050565b60006102408284031215620007f357600080fd5b620007fd62000715565b825181526200080f60208401620004bb565b60208201526200082260408401620004bb565b604082015262000836846060850162000741565b60608201526101006200084b818501620004bb565b608083015261012062000860818601620004bb565b60a084015261014062000875818701620004bb565b60c08501526101608087015160e086015261018080880151858701526101a0945084880151848701526101c0880151838701526101e088015182870152610200880151818701525050505061022084015181830152508091505092915050565b60805160a05160c05160e051610100516101205161014051613827620009ca6000396000818161081701528181610a37015281816123b901526127a5015260006105100152600081816104bc01528181610b79015281816123df01526127cb0152600081816104170152611ab7015260008181610254015281816105a701528181610aad01528181610c350152818161113101528181611214015281816112f50152818161192501528181611a3b01528181611fe001528181612325015281816124f701526128e80152600081816108b6015281816114f2015281816117490152611bd20152600061062501526138276000f3fe6080604052600436106102375760003560e01c806380935aa911610138578063c7acb01f116100b0578063ddd59b9f1161007f578063e47a882d11610064578063e47a882d1461086e578063f53eddcc146108a4578063fad3cc4b146108d857600080fd5b8063ddd59b9f14610805578063df8879b81461083957600080fd5b8063c7acb01f14610719578063c89c74ea14610739578063d331bef71461077d578063dd62ed3e146107b257600080fd5b806397b87b4a11610107578063a457c2d7116100ec578063a457c2d7146106ac578063a9059cbb146106cc578063bd4dbda0146106ec57600080fd5b806397b87b4a146106135780639e65741e1461064757600080fd5b806380935aa91461059557806392eb1656146105c95780639410ae88146105de57806395d89b41146105fe57600080fd5b8063313ce567116101cb578063443ec74d1161019a5780635ee04d781161017f5780635ee04d78146104fe5780636cfd15531461053257806370a082311461055257600080fd5b8063443ec74d146104aa5780634fa1aa8a146104de57600080fd5b8063313ce5671461043957806335f0df981461045557806339509351146104755780633bfaa7e31461049557600080fd5b806318160ddd1161020757806318160ddd1461039257806319d8ac61146103b157806323b872dd146103e55780632861c7d11461040557600080fd5b8062c3cdae146102bb57806301d22ccd146102ee57806306fdde0314610340578063095ea7b31461036257600080fd5b366102b6573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102b4576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f260048201526024015b60405180910390fd5b005b600080fd5b6102ce6102c93660046132ee565b6108eb565b604080519384526020840192909252908201526060015b60405180910390f35b3480156102fa57600080fd5b5060065461031b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e5565b34801561034c57600080fd5b50610355610dd8565b6040516102e59190613393565b34801561036e57600080fd5b5061038261037d3660046133ad565b610e6a565b60405190151581526020016102e5565b34801561039e57600080fd5b506002545b6040519081526020016102e5565b3480156103bd57600080fd5b506005546103cf9064ffffffffff1681565b60405164ffffffffff90911681526020016102e5565b3480156103f157600080fd5b506103826104003660046133d9565b610e84565b34801561041157600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044557600080fd5b50604051601281526020016102e5565b34801561046157600080fd5b506102ce6104703660046132ee565b610ea8565b34801561048157600080fd5b506103826104903660046133ad565b6113ec565b3480156104a157600080fd5b506102b4611438565b3480156104b657600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ea57600080fd5b506102b46104f936600461341a565b6114be565b34801561050a57600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053e57600080fd5b506102b461054d366004613433565b611715565b34801561055e57600080fd5b506103a361056d366004613433565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156105a157600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d557600080fd5b506103a36118c8565b3480156105ea57600080fd5b506102b46105f93660046133ad565b611a23565b34801561060a57600080fd5b50610355611ae0565b34801561061f57600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065357600080fd5b50600554610684906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1681565b60405176ffffffffffffffffffffffffffffffffffffffffffffff90911681526020016102e5565b3480156106b857600080fd5b506103826106c73660046133ad565b611aef565b3480156106d857600080fd5b506103826106e73660046133ad565b611bc0565b3480156106f857600080fd5b5060075461031b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561072557600080fd5b5061035561073436600461347f565b611bce565b34801561074557600080fd5b5061074e611d11565b6040805176ffffffffffffffffffffffffffffffffffffffffffffff90931683529015156020830152016102e5565b34801561078957600080fd5b5061079d6107983660046132ee565b611e3f565b604080519283526020830191909152016102e5565b3480156107be57600080fd5b506103a36107cd366004613561565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561081157600080fd5b506103827f000000000000000000000000000000000000000000000000000000000000000081565b61084c61084736600461359a565b6120f9565b60408051948552602085019390935291830152151560608201526080016102e5565b34801561087a57600080fd5b506005546108919065010000000000900460030b81565b60405160039190910b81526020016102e5565b3480156108b057600080fd5b5061031b7f000000000000000000000000000000000000000000000000000000000000000081565b61079d6108e63660046132ee565b612658565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556000808080610922611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff909316929092179091559050801561099b57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b60075474010000000000000000000000000000000000000000900460ff166001146109f6576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f660048201526024016102ab565b600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790557f0000000000000000000000000000000000000000000000000000000000000000610b75573415610a96576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f360048201526024016102ab565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016634d9036de610add8a60016135eb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152602481018a9052604481018990526000606482015260840160408051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b91906135fe565b9093509150610d13565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610bce5786610bd0565b875b905034811115610c10576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f360048201526024016102ab565b6000610c1c3447613622565b905073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016634d9036de83610c668d60016135eb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810191909152602481018d9052604481018c905260006064820152608401604080518083038185885af1158015610ccf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cf491906135fe565b9095509350303181811115610d0f57610d0f33838303612a04565b5050505b73ffffffffffffffffffffffffffffffffffffffff851615610d355784610d37565b335b6005549095506901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff16610d7589670de0b6b3a7640000613635565b610d7f919061364c565b9350610d8b8585612a55565b50600780547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000dead1790559196909550909350915050565b606060038054610de790613687565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1390613687565b8015610e605780601f10610e3557610100808354040283529160200191610e60565b820191906000526020600020905b815481529060010190602001808311610e4357829003601f168201915b5050505050905090565b600033610e78818585612b48565b60019150505b92915050565b600033610e92858285612cfb565b610e9d858585612dd2565b506001949350505050565b600080600080610eb6611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff9093169290921790915590508015610f2f57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b60075474010000000000000000000000000000000000000000900460ff16600114610f8a576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f660048201526024016102ab565b600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556001880161103f5733600090815260208190526040902054600554909450600190670de0b6b3a764000090611024906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1687613635565b61102e919061364c565b6110389190613622565b9750611092565b6005546901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1661107a89670de0b6b3a7640000613635565b611084919061364c565b61108f9060016135eb565b93505b61109c3385613041565b73ffffffffffffffffffffffffffffffffffffffff8516156110be57846110c0565b335b94506000871180156110d25750600086115b156111a7576040517f35f0df9800000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044810187905273ffffffffffffffffffffffffffffffffffffffff86811660648301527f000000000000000000000000000000000000000000000000000000000000000016906335f0df989060840160408051808303816000875af1158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d91906135fe565b909350915061139f565b6000871180156111b5575085155b15611288576040517f4c89bfd400000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044810187905273ffffffffffffffffffffffffffffffffffffffff86811660648301527f00000000000000000000000000000000000000000000000000000000000000001690634c89bfd4906084016020604051808303816000875af115801561125d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128191906136da565b925061139f565b861580156112965750600086115b15611369576040517f4c89bfd400000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044810187905273ffffffffffffffffffffffffffffffffffffffff86811660648301527f00000000000000000000000000000000000000000000000000000000000000001690634c89bfd4906084016020604051808303816000875af115801561133e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136291906136da565b915061139f565b6040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f760048201526024016102ab565b50600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790559196909550909350915050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610e7890829086906114339087906135eb565b612b48565b6000611442611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff90931692909217909155905080156114bb57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b50565b6040517f73f156420000000000000000000000000000000000000000000000000000000081523060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906373f1564290604401602060405180830381865afa15801561154e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157291906136f3565b6115ac576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f260048201526024016102ab565b60006115b6611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff909316929092179091559050801561162f57600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b620f424082138061165f57507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc082125b1561169a576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f460048201526024016102ab565b600580544264ffffffffff167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909116176501000000000063ffffffff8516021790556040518281527f7f11439341687b064c9a44aed86bf97e498b897829329ebebee243a8aeab35bb906020015b60405180910390a15050565b6040517f73f156420000000000000000000000000000000000000000000000000000000081523060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906373f1564290604401602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c991906136f3565b611803576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f260048201526024016102ab565b8073ffffffffffffffffffffffffffffffffffffffff8116611855576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f160048201526024016102ab565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f336a7807b53df027467559d6ed5ba292805d0e7df83ec3fd0df46e81675dbc5e90602001611709565b6040805130602080830191909152600382840152825180830384018152606083019384905280519101207fb5c736e400000000000000000000000000000000000000000000000000000000909252606481019190915260009081907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e490608401602060405180830381865afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a591906136da565b600554600254600983901c66ffffffffffffff1660019390931c60ff169290921b9250600091670de0b6b3a7640000916901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1690611a069190613635565b611a10919061364c565b9050611a1c8183613715565b9250505090565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a96576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f260048201526024016102ab565b600754611adc90839073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000084613205565b5050565b606060048054610de790613687565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016102ab565b610e9d8286868403612b48565b600033610e78818585612dd2565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f919061373c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f260048201526024016102ab565b600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018103611d0857816000803e816000fd5b50505092915050565b60055476ffffffffffffffffffffffffffffffffffffffffffffff69010000000000000000008204169060009065010000000000900460030b81811315611dc257611d636301e13380620f4240613635565b600554611d779064ffffffffff1642613622565b611d9a8376ffffffffffffffffffffffffffffffffffffffffffffff8716613635565b611da49190613635565b611dae919061364c565b611db89084613759565b9360019350915050565b6000811215611e3a57611ddc6301e13380620f4240613635565b600554611df09064ffffffffff1642613622565b611df983613789565b611e1c9076ffffffffffffffffffffffffffffffffffffffffffffff8716613635565b611e269190613635565b611e30919061364c565b611db890846137c1565b509091565b6000806000611e4c611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff9093169290921790915590508015611ec557600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b60075474010000000000000000000000000000000000000000900460ff16600114611f20576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f660048201526024016102ab565b600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905573ffffffffffffffffffffffffffffffffffffffff841615611f815783611f83565b335b6040517fd331bef700000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044810187905273ffffffffffffffffffffffffffffffffffffffff80831660648301529195507f00000000000000000000000000000000000000000000000000000000000000009091169063d331bef7906084016020604051808303816000875af115801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f91906136da565b6005549092506901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1661208d83670de0b6b3a7640000613635565b612097919061364c565b6120a29060016135eb565b92506120ae3384613041565b50600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055909590945092505050565b6000806000806000612109611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff909316929092179091559050801561218257600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b60075474010000000000000000000000000000000000000000900460ff166001146121dd576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f660048201526024016102ab565b60078054740200000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90911617905560065473ffffffffffffffffffffffffffffffffffffffff163314612273576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f560048201526024016102ab565b600061227d6118c8565b9050600081131561239b576001925034156122c8576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f360048201526024016102ab565b6040517f35f0df98000000000000000000000000000000000000000000000000000000008152600481018290526024810189905260448101889052336064820152909550859073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335f0df989060840160408051808303816000875af115801561236d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239191906135fe565b90955093506125c5565b60008112156125c55760009250826123b33447613622565b905060007f00000000000000000000000000000000000000000000000000000000000000001561243a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14612434578861243d565b8961243d565b60005b90503481111561247d576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f360048201526024016102ab565b61248683613789565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556040517f4d9036de00000000000000000000000000000000000000000000000000000000815260048101829052602481018c9052604481018b9052600060648201529098507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634d9036de908390608401604080518083038185885af1158015612555573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061257a91906135fe565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590975095503031828111156125c1576125c133848303612a04565b5050505b604080518781526020810187905290810185905283151560608201527f074a87ec182f91973b93d344745a07f667c7edd70584cb334add5392a31e173a9060800160405180910390a15050600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905592959194509250565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556000808061268e611d11565b6005805476ffffffffffffffffffffffffffffffffffffffffffffff90931669010000000000000000000268ffffffffffffffffff909316929092179091559050801561270757600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b60075474010000000000000000000000000000000000000000900460ff16600114612762576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f660048201526024016102ab565b600780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905560007f000000000000000000000000000000000000000000000000000000000000000015612826577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146128205786612829565b87612829565b60005b9050348114612868576040517f3407ab4b00000000000000000000000000000000000000000000000000000000815261d2f360048201526024016102ab565b73ffffffffffffffffffffffffffffffffffffffff85161561288a578461288c565b335b6040517fe980e1eb000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052604481018890526000606482015290955073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e980e1eb90839060840160206040518083038185885af1158015612932573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061295791906136da565b6005549093506001906901000000000000000000900476ffffffffffffffffffffffffffffffffffffffffffffff1661299885670de0b6b3a7640000613635565b6129a2919061364c565b6129ac9190613622565b93506129b88585612a55565b5050600780547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000dead179055909590945092505050565b60008060008060008587614e20f1905080612a50576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a60048201526024016102ab565b505050565b73ffffffffffffffffffffffffffffffffffffffff8216612ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016102ab565b8060026000828254612ae491906135eb565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316612bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff8216612c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612dcc5781811015612dbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016102ab565b612dcc8484848403612b48565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316612e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff8216612f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015612fce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612dcc565b73ffffffffffffffffffffffffffffffffffffffff82166130e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561319a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806132c5576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155960048201526024016102ab565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146114bb57600080fd5b6000806000806080858703121561330457600080fd5b8435935060208501359250604085013591506060850135613324816132cc565b939692955090935050565b6000815180845260005b8181101561335557602081850181015186830182015201613339565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006133a6602083018461332f565b9392505050565b600080604083850312156133c057600080fd5b82356133cb816132cc565b946020939093013593505050565b6000806000606084860312156133ee57600080fd5b83356133f9816132cc565b92506020840135613409816132cc565b929592945050506040919091013590565b60006020828403121561342c57600080fd5b5035919050565b60006020828403121561344557600080fd5b81356133a6816132cc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561349257600080fd5b823561349d816132cc565b9150602083013567ffffffffffffffff808211156134ba57600080fd5b818501915085601f8301126134ce57600080fd5b8135818111156134e0576134e0613450565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561352657613526613450565b8160405282815288602084870101111561353f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561357457600080fd5b823561357f816132cc565b9150602083013561358f816132cc565b809150509250929050565b600080604083850312156135ad57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610e7e57610e7e6135bc565b6000806040838503121561361157600080fd5b505080516020909101519092909150565b81810381811115610e7e57610e7e6135bc565b8082028115828204841417610e7e57610e7e6135bc565b600082613682577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c9082168061369b57607f821691505b6020821081036136d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156136ec57600080fd5b5051919050565b60006020828403121561370557600080fd5b815180151581146133a657600080fd5b8181036000831280158383131683831282161715613735576137356135bc565b5092915050565b60006020828403121561374e57600080fd5b81516133a6816132cc565b76ffffffffffffffffffffffffffffffffffffffffffffff818116838216019080821115613735576137356135bc565b60007f800000000000000000000000000000000000000000000000000000000000000082036137ba576137ba6135bc565b5060000390565b76ffffffffffffffffffffffffffffffffffffffffffffff828116828216039080821115613735576137356135bc56fea26469706673582212204654438f3b79a876fe2fc2b3d81f7a21c873c62ff82b82f71339ec45602f71e564736f6c63430008150033000000000000000000000000000000000000000000000000000000000000000700000000000000000000000052aa899454998be5b000ad077a46bbe360f4e49700000000000000000000000091716c4eda1fb55e84bf8b4c7085f84285c19085000000000000000000000000e57227c7d5900165344b190fc7aa580bceb53b9b