0 txs
518 calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
calcEthOut
viewfunction calcEthOut(uint256 lpAmount) view returns (uint256 wethOut)
calcLpOut
viewfunction calcLpOut(uint256 wethValueInUSD) view returns (uint256 lpOut)
decimals
viewfunction decimals() view returns (uint8)
futuresCore
viewfunction futuresCore() view returns (address)
getEffectivePoolValue
viewfunction getEffectivePoolValue() view returns (uint256 totalValueInUSD)
getEthPriceInUSD
viewfunction getEthPriceInUSD(uint256 ethAmount) view returns (uint256)
lockedLiquidity
viewfunction lockedLiquidity(address, uint256) view returns (uint256 amount, uint256 unlockTime, uint8 animalType)
lockedLiquidityAny
viewfunction lockedLiquidityAny(address, uint256) view returns (uint256 amount, uint256 unlockTime)
lockedLiquidityExtraAnimals
viewfunction lockedLiquidityExtraAnimals(address, uint256) view returns (uint256 amount, uint256 unlockTime, uint256 animalType)
name
viewfunction name() view returns (string)
nonLockedLiquidity
viewfunction nonLockedLiquidity(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
priceFeed
viewfunction priceFeed() view returns (address)
priceFeedDecimals
viewfunction priceFeedDecimals() view returns (uint8)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
swapSlippage
viewfunction swapSlippage() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
trackExtraAnimals
viewfunction trackExtraAnimals(uint256) view returns (uint256)
uniswapRouter
viewfunction uniswapRouter() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
USDC
viewfunction USDC() view returns (address)
version
purefunction version() pure returns (uint256)
WETH
viewfunction WETH() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addLiquidity
payablefunction addLiquidity() payable
addNewAnimalType
nonpayablefunction addNewAnimalType(uint256 animal, uint256 usdAmount)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
initialize
nonpayablefunction initialize(address _usdc, address _weth, string _name, string _symbol, address _uniswapRouter, address _priceFeed)
lockLiquidity
payablefunction lockLiquidity(uint256 months, uint8 animalType) payable
lockLiquidityAny
payablefunction lockLiquidityAny(uint256 day) payable
lockLiquidityExtraAnimals
payablefunction lockLiquidityExtraAnimals(uint256 months, uint256 animalType) payable
payOutUSDC
nonpayablefunction payOutUSDC(address trader, uint256 usdcAmount)
rebalancePool
nonpayablefunction rebalancePool(uint256 eth_WEIGHT, uint256 usdc_WEIGHT)
renounceOwnership
nonpayablefunction renounceOwnership()
setAddLiqAvailable
nonpayablefunction setAddLiqAvailable(uint256 x)
setFuturesCore
nonpayablefunction setFuturesCore(address _futuresCore)
setlLockLiqAvailable
nonpayablefunction setlLockLiqAvailable(uint256 x)
setPriceFeed
nonpayablefunction setPriceFeed(address _priceFeed)
setSwapSlippage
nonpayablefunction setSwapSlippage(uint256 slippage)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unlockLiquidity
nonpayablefunction unlockLiquidity(uint256 id)
unlockLiquidityAny
nonpayablefunction unlockLiquidityAny(uint256 id, uint256 amountToUnlock)
unlockLiquidityExtraAnimals
nonpayablefunction unlockLiquidityExtraAnimals(uint256 id)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 lpAmount)
events
AddedLiquidity
event AddedLiquidity(address indexed lp, uint256 ethAmount, uint256 ethValueInUSD)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Initialized
event Initialized(uint64 version)
LockedLiquidityExecuted
event LockedLiquidityExecuted(address indexed lp, uint256 indexed id, uint256 ethAmount, uint256 ethValueInUSD, uint8 animalType, uint256 lockPeriod, uint256 unlockTime)
LockedLiquidityExecutedAny
event LockedLiquidityExecutedAny(address indexed lp, uint256 indexed id, uint256 ethAmount, uint256 ethValueInUSD, uint256 lpAmountOut, uint256 lockPeriod, uint256 unlockTime)
LockedLiquidityExecutedExtraAnimals
event LockedLiquidityExecutedExtraAnimals(address indexed lp, uint256 indexed id, uint256 ethAmount, uint256 ethValueInUSD, uint256 animalType, uint256 lockPeriod, uint256 unlockTime)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PoolRebalanced
event PoolRebalanced(uint256 newEthBalance, uint256 newUsdcBalance)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
UnLockedLiquidityExecuted
event UnLockedLiquidityExecuted(address indexed lp, uint256 indexed id, uint256 wethOut)
UnLockedLiquidityExecutedAny
event UnLockedLiquidityExecutedAny(address indexed lp, uint256 indexed id, uint256 wethOut, uint256 amountToUnlock)
UnLockedLiquidityExecutedExtraAnimals
event UnLockedLiquidityExecutedExtraAnimals(address indexed lp, uint256 indexed id, uint256 wethOut)
Upgraded
event Upgraded(address indexed implementation)
WithdrawedLiquidity
event WithdrawedLiquidity(address indexed lp, uint256 wethOut)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161403990816100ed823960805181818161175f01526118040152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f803560e01c8063059dd04314612ef257806306fdde0314612e10578063095ea7b314612d475780630a861f2a14612b395780630b10ea4a1461299d5780630c5b2ab3146123d25780631139698114612369578063162c64f214611fe157806318160ddd14611fb75780631aedeabe14611f9957806323b872dd14611f76578063265b946714611d1957806328b57e7b14611cf6578063313ce56714611cda5780633141ca5c14611cb3578063350e87d314611c5757806336c7f82814611a665780633a4f0866146119b25780634f1ef286146117b357806352d1902d1461174c57806354fd4d50146117305780635f96855d1461159857806370a0823114611553578063715018a6146114d4578063724e78da14611414578063735de9f7146113eb578063741bef1a146113c257806378dba99c146113a357806379ba5097146113535780637bfdcc6e14610db957806389a3027114610d905780638da5cb5b14610d5b57806395d89b4114610c6857806396e8392414610ab2578063a25aa00b14610a8e578063a33a34da14610a6b578063a9059cbb14610a4b578063ad3cb1cc14610a06578063ad5c4648146109dd578063ae437d6f146109b3578063b9cfe3481461093f578063c709684a14610906578063d590e9d4146108e7578063dd62ed3e1461086b578063e30c397814610836578063e8078d941461074c578063ea474e7b14610731578063edf654e214610375578063ef34dca01461034e578063f2fde38b146102c85763fa88dd1514610256575061000e565b346102c55760203660031901126102c557600435610272613a69565b61271081116102815760095580f35b606460405162461bcd60e51b815260206004820152602060248201527f536c697070616765206578636565647320616c6c6f7761626c652072616e67656044820152fd5b80fd5b50346102c55760203660031901126102c5576102e2612f3c565b6102ea613a69565b5f80516020613fe483398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020613f64833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346102c55760203660031901126102c557602061036d6004356139dd565b604051908152f35b5060403660031901126102c557600435602435600681101561072d5761039f600160055414613204565b6103aa341515613250565b600482148015610723575b8015610719575b6103c590613362565b6103ce346136f5565b90839281158061070b575b80156106ef575b8481156106cb575b81156106a6575b8115610681575b8115610648575b50156105ed5761040c8361348d565b936104188515156132a6565b60025486906001600160a01b0316803b156105e9578160049160405192838092630d0e30db60e41b825234905af180156105de576105c5575b505033865260076020526040862054943387526007602052604087209162278d0084029284840462278d0014851517156105b15761048f84426132f7565b6040519161049c83612fc2565b84835260208301918252604083019361059d57878452805490600160401b82101561058957906104d191600182018155613070565b9290926105755790600292915182555160018201550190516006811015610561576105179261052e94926105119260ff8019835416911617905533613d7a565b426132f7565b9260405194348652602086015260408501906130cc565b606083015260808201527f533b83dd245017700b4ad49a664a3eb4cc497463455cd963d970443e1e6d22c860a03392a380f35b634e487b7160e01b89526021600452602489fd5b634e487b7160e01b8b5260048b905260248bfd5b634e487b7160e01b8c52604160045260248cfd5b634e487b7160e01b8b52602160045260248bfd5b634e487b7160e01b89526011600452602489fd5b816105cf91612fde565b6105da57855f610451565b8580fd5b6040513d84823e3d90fd5b5080fd5b60405162461bcd60e51b815260206004820152602d60248201527f496e76616c696420616e696d616c2074797065206f7220696e7375666669636960448201526c656e74204554482076616c756560981b6064820152608490fd5b905061066d57600582148061065e575b846103fd565b5064174876e800831015610658565b634e487b7160e01b85526021600452602485fd5b905061066d576004821480610697575b846103f6565b506405d21dba00831015610691565b905061066d5760038214806106bc575b846103ef565b506402540be4008310156106b6565b905061066d5760028214806106e1575b846103e8565b50639502f9008310156106db565b508493506001821480156103e05750631dcd65008310156103e0565b506305f5e1008310156103d9565b50600882146103bc565b50600682146103b5565b8280fd5b50346102c557806003193601126102c557602061036d6137e4565b50806003193601126102c557610766600160065414613204565b610771341515613250565b61077a346136f5565b6107838161348d565b61078e8115156132a6565b60025483906001600160a01b0316803b156105e9578160049160405192838092630d0e30db60e41b825234905af180156105de57610821575b50506107d38133613d7a565b33835260086020526107ea604084209182546132f7565b90556040519034825260208201527f23e65819fee433cde99868836d19dad84b8569b10a34bc82c501a1f94d72c2dd60403392a280f35b8161082b91612fde565b61072d57825f6107c7565b50346102c557806003193601126102c5575f80516020613fe4833981519152546040516001600160a01b039091168152602090f35b50346102c55760403660031901126102c557610885612f3c565b6108ca610890612f52565b6001600160a01b039092165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b9060018060a01b03165f52602052602060405f2054604051908152f35b50346102c55760203660031901126102c557602061036d6004356136f5565b50346102c55760203660031901126102c5576020906040906001600160a01b0361092e612f3c565b168152600883522054604051908152f35b50346102c55760403660031901126102c557610959612f3c565b6001600160a01b03168152600760205260408120805460243592908310156102c55760606109878484613070565b506109b181549160ff600260018301549201541690604051938452602084015260408301906130cc565bf35b50346102c55760203660031901126102c55760406020916004358152600a83522054604051908152f35b50346102c557806003193601126102c5576002546040516001600160a01b039091168152602090f35b50346102c557806003193601126102c55750610a47604051610a29604082612fde565b60058152640352e302e360dc1b602082015260405191829182612f68565b0390f35b50346102c55760403660031901126102c557610a65612f3c565b5061331d565b50346102c55760203660031901126102c557610a85613a69565b60043560055580f35b50346102c557806003193601126102c557602060ff60045460a01c16604051908152f35b50346102c55760203660031901126102c5576004353382526007602052610ade604083205482106133a4565b3382526007602052610af38160408420613070565b5082815491610b03831515613423565b610b1360018201544210156133e4565b55610b1d816139dd565b6002546040516370a0823160e01b815230600482015291929190602090829060249082906001600160a01b03165afa908115610c5d578591610c27575b50828110610c0f575b5060025484906001600160a01b0316803b156105e957818091602460405180948193632e1a7d4d60e01b83528960048401525af180156105de57610bf6575b5050610bae9033613cb1565b610bc78380808085335af1610bc1613193565b506131c2565b6040519081527fb57b94b1406b7314ba9d338489f7c48acaba5019902d32a610c108a62a17385160203392a380f35b81610c0091612fde565b610c0b57835f610ba2565b8380fd5b610c1c610c219184613172565b613b0a565b5f610b63565b90506020813d602011610c55575b81610c4260209383612fde565b81010312610c5157515f610b5a565b5f80fd5b3d9150610c35565b6040513d87823e3d90fd5b50346102c557806003193601126102c55760405190805f80516020613f448339815191525490610c978261312b565b8085529160018116908115610d345750600114610ccb575b610a4784610cbf81860382612fde565b60405191829182612f68565b5f80516020613f4483398151915281527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610d1a57509091508101602001610cbf82610caf565b919260018160209254838588010152019101909291610d01565b60ff191660208087019190915292151560051b85019092019250610cbf9150839050610caf565b50346102c557806003193601126102c5575f80516020613f64833981519152546040516001600160a01b039091168152602090f35b50346102c557806003193601126102c5576001546040516001600160a01b039091168152602090f35b50346102c557610dc83661309d565b90610dd1613a69565b6064610ddd83836132f7565b0361131a576002546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156110905784916112e8575b506001546040516370a0823160e01b815230600482015292906001600160a01b0316602084602481845afa9384156112dd5786946112a9575b50620f4240610e6b610e65613578565b856132e4565b0493670de0b6b3a76400008102818104670de0b6b3a7640000148215171561129557620f4240610e9d910480966132f7565b9283610ea7578780f35b610ec06064610eb78193876132e4565b049788956132e4565b04809584620f4240610ed9610ed3613578565b896132e4565b0411156110dc5750505050620f4240610efd610f0393610ef7613578565b906132e4565b04613172565b620f4240810290808204620f424014901517156110c857610f2c90610f26613578565b9061346f565b60025460035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905292949291602091839160449183918a91165af18015610c5d5761109b575b50602061101660e4610faa670de0b6b3a7640000610f93610ed3613578565b04612710610fa3600954836132e4565b0490613172565b6003546002546001546040516001600160a01b039384169a90949390929181169116610fd585612f92565b8452868401526101f46040840152306060840152608083015260a08201528760c08201528760405197889485936304e45aaf60e01b85526004850190613ab4565b5af1918215611090577fc71840dd62ea35135fb271061847e00cfad3cab87f37c632a52c9f0632cf7b1693604093611061575b505b82519182526020820152a15f8080808080808780f35b6110829060203d602011611089575b61107a8183612fde565b810190613163565b505f611049565b503d611070565b6040513d86823e3d90fd5b6110bc9060203d6020116110c1575b6110b48183612fde565b810190613a9c565b610f74565b503d6110aa565b634e487b7160e01b84526011600452602484fd5b91935091935011611114575b50507fc71840dd62ea35135fb271061847e00cfad3cab87f37c632a52c9f0632cf7b169160409161104b565b620f42408394929402838104620f424014841517156112645761114761118292670de0b6b3a76400006020930490613172565b60035460405163095ea7b360e01b81526001600160a01b03909116600482015260248101829052909590928391908290899082906044820190565b03925af18015610c5d57611278575b5061119a613578565b670de0b6b3a76400008402848104670de0b6b3a764000014851517156112645760e46111dd6111ce6020946112089461346f565b612710610fa3600954836132e4565b6003546001546002546040516001600160a01b039384169a90949390929181169116610fd585612f92565b5af1918215611090577fc71840dd62ea35135fb271061847e00cfad3cab87f37c632a52c9f0632cf7b1693604093611245575b50918193506110e8565b61125d9060203d6020116110895761107a8183612fde565b505f61123b565b634e487b7160e01b86526011600452602486fd5b6112909060203d6020116110c1576110b48183612fde565b611191565b634e487b7160e01b88526011600452602488fd5b9093506020813d6020116112d5575b816112c560209383612fde565b81010312610c515751925f610e55565b3d91506112b8565b6040513d88823e3d90fd5b90506020813d602011611312575b8161130360209383612fde565b81010312610c5157515f610e1c565b3d91506112f6565b60405162461bcd60e51b8152602060048201526011602482015270496e636f7272656374207765696768747360781b6044820152606490fd5b50346102c557806003193601126102c5575f80516020613fe483398151915254336001600160a01b03909116036113905761138d33613e0f565b80f35b63118cdaa760e01b815233600452602490fd5b50346102c55760203660031901126102c557602061036d60043561348d565b50346102c557806003193601126102c5576004546040516001600160a01b039091168152602090f35b50346102c557806003193601126102c5576003546040516001600160a01b039091168152602090f35b50346102c55760203660031901126102c55761142e612f3c565b611436613a69565b6001600160a01b031661144a8115156130ed565b60045490806001600160601b0360a01b83161760045560405163313ce56760e01b8152602081600481855afa9081156110905784916114a5575b506001600160a81b03199092161760a09190911b60ff60a01b161760045580f35b6114c7915060203d6020116114cd575b6114bf8183612fde565b810190613304565b5f611484565b503d6114b5565b50346102c557806003193601126102c5576114ed613a69565b5f80516020613fe483398151915280546001600160a01b03199081169091555f80516020613f648339815191528054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102c55760203660031901126102c5576020906040906001600160a01b0361157b612f3c565b1681525f80516020613f2483398151915283522054604051908152f35b50346102c55760203660031901126102c557600435338252600b6020526115c4604083205482106133a4565b338252600b6020526115d98160408420613070565b50828154916115e9831515613423565b6115f960018201544210156133e4565b55611603816139dd565b6002546040516370a0823160e01b815230600482015291929190602090829060249082906001600160a01b03165afa908115610c5d5785916116fe575b508281106116eb575b5060025484906001600160a01b0316803b156105e957818091602460405180948193632e1a7d4d60e01b83528960048401525af180156105de576116d6575b50506116949033613cb1565b6116a78380808085335af1610bc1613193565b6040519081527f91cd2bf5b33ee1a2b3ca1554f09a83611720668f219e0e8b2b5ea8e17bd3da0560203392a380f35b816116e091612fde565b610c0b57835f611688565b610c1c6116f89184613172565b5f611649565b90506020813d602011611728575b8161171960209383612fde565b81010312610c5157515f611640565b3d915061170c565b50346102c557806003193601126102c557602060405160018152f35b50346102c557806003193601126102c5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117a45760206040515f80516020613fa48339815191528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126102c5576117c8612f3c565b9060243567ffffffffffffffff81116105e957366023820112156105e9576117fa90369060248160040135910161301c565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611990575b506119815761183c613a69565b6040516352d1902d60e01b8152926001600160a01b0381169190602085600481865afa80958596611949575b5061188157634c9c8ce360e01b84526004839052602484fd5b9091845f80516020613fa483398151915281036119375750813b15611925575f80516020613fa483398151915280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a2815183901561190b578083602061190795519101845af4611901613193565b91613ea5565b5080f35b505050346119165780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8452600452602483fd5b632a87526960e21b8552600452602484fd5b9095506020813d602011611979575b8161196560209383612fde565b810103126119755751945f611868565b8480fd5b3d9150611958565b63703e46dd60e11b8252600482fd5b5f80516020613fa4833981519152546001600160a01b0316141590505f61182f565b50346102c5576119c13661309d565b906119ca613a69565b6005811115611a2d5781156119e8578252600a602052604082205580f35b60405162461bcd60e51b815260206004820152601e60248201527f55534420636f7374206d75737420626520686967686572207468616e203000006044820152606490fd5b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a5908185b9a5b585b081a59607a1b6044820152606490fd5b50346102c557611a753661309d565b338352600c602052611a8c604084205483106133a4565b338352600c602052611aa182604085206130b3565b5080548281101580611c4e575b15611c095782611acd91611ac860018501544210156133e4565b613172565b9055611ad8816139dd565b6002546040516370a0823160e01b815230600482015291929190602090829060249082906001600160a01b03165afa908115610c5d578591611bd7575b50828110611bc4575b5060025484906001600160a01b0316803b156105e957818091602460405180948193632e1a7d4d60e01b83528960048401525af180156105de57611baf575b5050611b698133613cb1565b611b7c8480808086335af1610bc1613193565b60405191825260208201527e17a81e26b61525004338c3aa28c5b56d21f9cd5abb5611798181e0778bfc7560403392a380f35b81611bb991612fde565b610c0b57835f611b5d565b610c1c611bd19184613172565b5f611b1e565b90506020813d602011611c01575b81611bf260209383612fde565b81010312610c5157515f611b15565b3d9150611be5565b60405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74206c6f636b6564206c69717569646974790000006044820152606490fd5b50821515611aae565b50346102c55760403660031901126102c557611c71612f3c565b6001600160a01b03168152600c60205260408120805460243592908310156102c5576040611c9f84846130b3565b506001815491015482519182526020820152f35b50346102c557806003193601126102c557546040516001600160a01b039091168152602090f35b50346102c557806003193601126102c557602060405160128152f35b50346102c55760203660031901126102c557611d10613a69565b60043560065580f35b50611d233661309d565b90611d32600160055414613204565b611d3d341515613250565b600481148015611f6c575b8015611f62575b611d5890613362565b611d61346136f5565b90828452600a602052604084205415611f2757828452600a60205260408420548210611ee957611d908261348d565b92611d9c8415156132a6565b60025485906001600160a01b0316803b156105e9578160049160405192838092630d0e30db60e41b825234905af180156105de57611ed4575b5050338552600b602052604085205493338652600b602052604086209062278d0084029184830462278d00148515171561129557611e1383426132f7565b9060405191611e2183612fc2565b838352602083019081526040830191868352805490600160401b8210156105895790611e5291600182018155613070565b9390936105755793611ea09360027fbdbca9507ef9eb6a10b4665a149ef0aa2b7fbf18e8fadb482aa3676df620373c9998979461051194611ece985184555160018401555191015533613d7a565b604051938493339734869192608093969594919660a084019784526020840152604083015260608201520152565b0390a380f35b81611ede91612fde565b61197557845f611dd5565b60405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74204554482076616c756560501b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272496e76616c696420616e696d616c207479706560681b6044820152606490fd5b5060088114611d4f565b5060068114611d48565b50346102c55760603660031901126102c557611f90612f3c565b50610a65612f52565b50346102c557806003193601126102c5576020600954604051908152f35b50346102c557806003193601126102c55760205f80516020613f8483398151915254604051908152f35b50346102c55760403660031901126102c557611ffb612f3c565b815460243591906001600160a01b03163303612312576001546040516370a0823160e01b81523060048201528491602090829060249082906001600160a01b03165afa9081156105de5782916122dd575b508381106120f5575b5060015460405163a9059cbb60e01b602082019081526001600160a01b0394851660248301526044808301969096529481529216926120b19282919061209c606482612fde565b519082865af16120aa613193565b9083613ea5565b80519081151591826120da575b50506120c8575080f35b635274afe760e01b8252600452602490fd5b6120ed9250602080918301019101613a9c565b155f806120be565b612100915083613172565b612108613578565b670de0b6b3a76400008202828104670de0b6b3a764000014831517156112645761213786939261214d9261346f565b612710612146600954836132e4565b04906132f7565b60025460035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905292939291602091839160449183918991165af180156110905760209261220d9260e4926122c2575b506003546002546001546040516001600160a01b039384169890949093909291811691166121cc85612f92565b8452868401526101f46040840152306060840152608083015260a08201528560c0820152856040519586948593635023b4df60e01b85526004850190613ab4565b5af180156105de5761228f575b5060025460035460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529391602091859160449183918791165af19081156105de576120b1938392612270575b509250612055565b6122889060203d6020116110c1576110b48183612fde565b505f612268565b90506020813d6020116122ba575b816122aa60209383612fde565b81010312610c515750828061221a565b3d915061229d565b6122d890853d87116110c1576110b48183612fde565b61219f565b9150506020813d60201161230a575b816122f960209383612fde565b81010312610c51578390515f61204c565b3d91506122ec565b60405162461bcd60e51b815260206004820152602960248201527f4f6e6c792063616c6c61626c65206279207468652066757475726573436f72656044820152680818dbdb9d1c9858dd60ba1b6064820152608490fd5b50346102c55760403660031901126102c557612383612f3c565b6001600160a01b03168152600b60205260408120805460243592908310156102c55760606123b18484613070565b50805490600260018201549101549060405192835260208301526040820152f35b50346102c55760c03660031901126102c5576123ec612f3c565b6123f4612f52565b60443567ffffffffffffffff8111610c0b57612414903690600401613052565b9160643567ffffffffffffffff811161197557612435903690600401613052565b916084356001600160a01b03811692908390036105da5760a4356001600160a01b0381169490859003612999575f80516020613fc4833981519152549560ff8760401c16159667ffffffffffffffff811680159081612991575b6001149081612987575b15908161297e575b5061296f5767ffffffffffffffff1981166001175f80516020613fc48339815191525587612943575b506124d3613e7a565b6124db613e7a565b6124e3613e7a565b6124eb613e7a565b80519067ffffffffffffffff821161292f5781906125165f80516020613f048339815191525461312b565b601f81116128b5575b50602090601f8311600114612839578a9261282e575b50508160011b915f199060031b1c1916175f80516020613f04833981519152555b80519067ffffffffffffffff821161281a5781906125815f80516020613f448339815191525461312b565b601f81116127a0575b50602090601f8311600114612724578992612719575b50508160011b915f199060031b1c1916175f80516020613f44833981519152555b6125ca33613e0f565b6001600160a01b0316906125df8215156130ed565b6001600160a01b0316906125f48215156130ed565b6125ff8315156130ed565b61260a8415156130ed565b6001600160601b0360a01b60015416176001556001600160601b0360a01b60025416176002556001600160601b0360a01b600354161760035560045490806001600160601b0360a01b83161760045560405163313ce56760e01b8152602081600481855afa908115610c5d5785916126fa575b506001600160a81b03199092161760a09190911b60ff60a01b16176004556126a25780f35b68ff0000000000000000195f80516020613fc483398151915254165f80516020613fc4833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b612713915060203d6020116114cd576114bf8183612fde565b5f61267d565b015190505f806125a0565b5f80516020613f448339815191528a52818a209250601f1984168a5b8181106127885750908460019594939210612770575b505050811b015f80516020613f44833981519152556125c1565b01515f1960f88460031b161c191690555f8080612756565b92936020600181928786015181550195019301612740565b5f80516020613f448339815191528a529091507f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510612810575b90601f859493920160051c01905b818110612802575061258a565b8a81558493506001016127f5565b90915081906127e7565b634e487b7160e01b88526041600452602488fd5b015190505f80612535565b5f80516020613f048339815191528b52818b209250601f1984168b5b81811061289d5750908460019594939210612885575b505050811b015f80516020613f0483398151915255612556565b01515f1960f88460031b161c191690555f808061286b565b92936020600181928786015181550195019301612855565b5f80516020613f048339815191528b529091507f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510612925575b90601f859493920160051c01905b818110612917575061251f565b8b815584935060010161290a565b90915081906128fc565b634e487b7160e01b89526041600452602489fd5b68ffffffffffffffffff191668010000000000000001175f80516020613fc4833981519152555f6124ca565b63f92ee8a960e01b8952600489fd5b9050155f6124a1565b303b159150612499565b89915061248f565b8680fd5b5060203660031901126102c5576004356129bb600160065414613204565b6129c6341515613250565b6129cf346136f5565b6129d88161348d565b916129e48315156132a6565b60025484906001600160a01b0316803b156105e9578160049160405192838092630d0e30db60e41b825234905af180156105de57612b24575b5050338452600c602052604084205492338552600c6020526040852062015180830290838204620151801484151715612b1057612a5a82426132f7565b604051916040830183811067ffffffffffffffff821117612afc5760405284835260208301918252805490600160401b821015612afc5790612aa1916001820181556130b3565b929092612ae85792611ece926001611ea0937fa19f708d2de0965ac02da74cd465fedb887877820ae5b445b48d96325927cf33989796518355519101556105118433613d7a565b634e487b7160e01b89526004899052602489fd5b634e487b7160e01b8a52604160045260248afd5b634e487b7160e01b87526011600452602487fd5b81612b2e91612fde565b610c0b57835f612a1d565b5034610c51576020366003190112610c51576004358015612d0357335f52600860205260405f20548111612cbe57612b70816139dd565b6002546040516370a0823160e01b815230600482015291929190602090829060249082906001600160a01b03165afa908115612c6e575f91612c8c575b50828110612c79575b506002546001600160a01b0316803b15610c51575f8091602460405180948193632e1a7d4d60e01b83528860048401525af18015612c6e57612c59575b50612bfe8133613cb1565b3383526008602052612c1560408420918254613172565b9055612c2a8280808085335af1610bc1613193565b6040519081527f4a0e7471a7aa380559f39fa147d2665643936dbc3cebdcaa4054f574b2b7cb4160203392a280f35b612c669193505f90612fde565b5f915f612bf3565b6040513d5f823e3d90fd5b610c1c612c869184613172565b5f612bb6565b90506020813d602011612cb6575b81612ca760209383612fde565b81010312610c5157515f612bad565b3d9150612c9a565b60405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e74204c502062616c616e63650000000000000000006044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f4c5020616d6f756e74206d7573742062652067726561746572207468616e20306044820152fd5b34610c51576040366003190112610c5157612d60612f3c565b602435903315612dfd576001600160a01b0316908115612dea57335f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260409020825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610c51575f366003190112610c51576040515f5f80516020613f0483398151915254612e3c8161312b565b8084529060018116908115612ece5750600114612e64575b610a4783610cbf81850382612fde565b5f80516020613f048339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b808210612eb457509091508101602001610cbf612e54565b919260018160209254838588010152019101909291612e9c565b60ff191660208086019190915291151560051b84019091019150610cbf9050612e54565b34610c51576020366003190112610c5157612f0b612f3c565b612f13613a69565b6001600160a01b0316612f278115156130ed565b6001600160601b0360a01b5f5416175f555f80f35b600435906001600160a01b0382168203610c5157565b602435906001600160a01b0382168203610c5157565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b60e0810190811067ffffffffffffffff821117612fae57604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff821117612fae57604052565b90601f8019910116810190811067ffffffffffffffff821117612fae57604052565b67ffffffffffffffff8111612fae57601f01601f191660200190565b92919261302882613000565b916130366040519384612fde565b829481845281830111610c51578281602093845f960137010152565b9080601f83011215610c515781602061306d9335910161301c565b90565b8054821015613089575f52600360205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b6040906003190112610c51576004359060243590565b8054821015613089575f5260205f209060011b01905f90565b9060068210156130d95752565b634e487b7160e01b5f52602160045260245ffd5b156130f457565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606490fd5b90600182811c92168015613159575b602083101461314557565b634e487b7160e01b5f52602260045260245ffd5b91607f169161313a565b90816020910312610c51575190565b9190820391821161317f57565b634e487b7160e01b5f52601160045260245ffd5b3d156131bd573d906131a482613000565b916131b26040519384612fde565b82523d5f602084013e565b606090565b156131c957565b60405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606490fd5b1561320b57565b60405162461bcd60e51b815260206004820152601c60248201527f4f6e6c792063616c6c61626c65207768656e20617661696c61626c65000000006044820152606490fd5b1561325757565b60405162461bcd60e51b815260206004820152602160248201527f45544820616d6f756e74206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608490fd5b156132ad57565b60405162461bcd60e51b815260206004820152600f60248201526e131bddc81b1c105b5bdd5b9d13dd5d608a1b6044820152606490fd5b8181029291811591840414171561317f57565b9190820180921161317f57565b90816020910312610c51575160ff81168103610c515790565b60405162461bcd60e51b815260206004820152601f60248201527f546f6b656e207472616e736665727320617265206e6f7420616c6c6f776564006044820152606490fd5b1561336957565b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac81c195c9a5bd9606a1b6044820152606490fd5b156133ab57565b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d5b9b1bd8dac81251607a1b6044820152606490fd5b156133eb57565b60405162461bcd60e51b815260206004820152601060248201526f139bdd081d5b9b1bd8dad959081e595d60821b6044820152606490fd5b1561342a57565b60405162461bcd60e51b815260206004820152601960248201527f4e6f206c6f636b6564206c697175696469747920666f756e64000000000000006044820152606490fd5b8115613479570490565b634e487b7160e01b5f52601260045260245ffd5b6134956137e4565b678ac7230489e800008110613520575b5f80516020613f848339815191525490816134e6575050670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561317f57620f4240900490565b9091670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561317f5761306d92620f424061351b92046132e4565b61346f565b50678ac7230489e800006134a5565b519069ffffffffffffffffffff82168203610c5157565b60ff166012039060ff821161317f57565b60ff6011199116019060ff821161317f57565b604d811161317f57600a0a90565b60048054604051633fabe5a360e21b81529160a0908390816001600160a01b0385165afa8015612c6e575f925f916136a1575b505f83131561365c576135c1610e109142613172565b116136245760a01c60ff1690601282111561360e57610f2660ff6135e76135ed94613557565b1661356a565b670de0b6b3a7640000818102918183040361317f5764e8d4a5100091040490565b610ef760ff6135e761361f94613546565b6135ed565b60405162461bcd60e51b815260206004820152601060248201526f5374616c65207072696365206461746160801b6044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642070726963652066726f6d206f7261636c65000000000000006044820152606490fd5b92505060a0823d60a0116136ed575b816136bd60a09383612fde565b81010312610c51576136ce8261352f565b5060208201516136e560806060850151940161352f565b50915f6135ab565b3d91506136b0565b60048054604051633fabe5a360e21b81529160a0908390816001600160a01b0385165afa8015612c6e575f925f91613790575b505f83131561365c5761373e610e109142613172565b116136245764e8d4a5100092670de0b6b3a76400009260ff61377a9360a01c1690816012105f1461377f57610f2660ff6135e7610ef794613557565b040490565b610ef760ff6135e7610ef794613546565b92505060a0823d60a0116137dc575b816137ac60a09383612fde565b81010312610c51576137bd8261352f565b5060208201516137d460806060850151940161352f565b50915f613728565b3d915061379f565b6002546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015612c6e575f906139aa575b6001546040516370a0823160e01b81523060048201529250602090839060249082906001600160a01b03165afa918215612c6e575f92613974575b50613869620f424091610ef7613578565b04670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561317f57620f424061389a9204906132f7565b5f546001600160a01b0316806138ae575090565b6020600491604051928380926353a22b5d60e11b82525afa908115612c6e575f91613942575b50670de0b6b3a7640000810290808205670de0b6b3a7640000149015171561317f57620f42409005905f8212158080613939575b613932571561391b579061306d91613172565b600160ff1b821461317f5761306d915f03906132f7565b5050505f90565b50818311613908565b90506020813d60201161396c575b8161395d60209383612fde565b81010312610c5157515f6138d4565b3d9150613950565b9091506020813d6020116139a2575b8161399060209383612fde565b81010312610c51575190613869613858565b3d9150613983565b506020813d6020116139d5575b816139c460209383612fde565b81010312610c51576024905161381d565b3d91506139b7565b5f80516020613f8483398151915254908115613a63576139fb6137e4565b90670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561317f57613a2a92610ef79161346f565b613a32613578565b90670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561317f57620f424061306d92049061346f565b50505f90565b5f80516020613f64833981519152546001600160a01b03163303613a8957565b63118cdaa760e01b5f523360045260245ffd5b90816020910312610c5157518015158103610c515790565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff16908401526060808301518216908401526080808301519084015260a0808301519084015260c09182015116910152565b613b37670de0b6b3a7640000613b27613b21613578565b846132e4565b04612710612146600954836132e4565b60015460035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905292939291602091839160449183915f91165af18015612c6e57602092613bf79260e492613c96575b506003546001546002546040516001600160a01b03938416989094909390929181169116613bb685612f92565b8452868401526101f46040840152306060840152608083015260a08201525f60c08201525f6040519586948593635023b4df60e01b85526004850190613ab4565b5af18015612c6e57613c67575b5060015460035460405163095ea7b360e01b81526001600160a01b0391821660048201525f60248201819052909260209284926044928492165af18015612c6e57613c4c5750565b613c649060203d6020116110c1576110b48183612fde565b50565b6020813d602011613c8e575b81613c8060209383612fde565b81010312610c515751613c04565b3d9150613c73565b613cac90853d87116110c1576110b48183612fde565b613b89565b9091906001600160a01b03168015613d6757805f525f80516020613f2483398151915260205260405f2054838110613d4d576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020613f248339815191528452036040862055805f80516020613f8483398151915254035f80516020613f8483398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b6001600160a01b0316908115613dfc577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082613dc75f945f80516020613f84833981519152546132f7565b5f80516020613f84833981519152558484525f80516020613f24833981519152825260408420818154019055604051908152a3565b63ec442f0560e01b5f525f60045260245ffd5b5f80516020613fe483398151915280546001600160a01b03199081169091555f80516020613f6483398151915280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b60ff5f80516020613fc48339815191525460401c1615613e9657565b631afcd79f60e31b5f5260045ffd5b90613ec95750805115613eba57805190602001fd5b630a12f52160e11b5f5260045ffd5b81511580613efa575b613eda575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15613ed256fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a2646970667358221220aec2e7638c5d10c78251b574b11c8290ba5aae7abd56092d7369b303ce60e68664736f6c634300081a0033