0 txs
1.2k calls
constructor
constructor()
functions
baseCollateralCoeff
viewfunction baseCollateralCoeff() view returns (uint256 inner)
baseDebtCoeff
viewfunction baseDebtCoeff() view returns (uint256 inner)
baseDelevCoeff
viewfunction baseDelevCoeff() view returns (uint256 inner)
baseToken
viewfunction baseToken() view returns (address)
defaultSwapCallData
viewfunction defaultSwapCallData() view returns (uint32)
discountedBaseCollateral
viewfunction discountedBaseCollateral() view returns (uint256)
discountedBaseDebt
viewfunction discountedBaseDebt() view returns (uint256)
discountedQuoteCollateral
viewfunction discountedQuoteCollateral() view returns (uint256)
discountedQuoteDebt
viewfunction discountedQuoteDebt() view returns (uint256)
emergencyWithdrawCoeff
viewfunction emergencyWithdrawCoeff() view returns (uint256 inner)
factory
viewfunction factory() view returns (address)
getBasePrice
viewfunction getBasePrice() view returns (tuple)
getHeapPosition
viewfunction getHeapPosition(uint32 index, bool _short) view returns (bool success, tuple)
getLiquidationPrice
viewfunction getLiquidationPrice() view returns (tuple)
initialPrice
viewfunction initialPrice() view returns (uint256 inner)
lastReinitTimestampSeconds
viewfunction lastReinitTimestampSeconds() view returns (uint256)
mode
viewfunction mode() view returns (uint8)
params
viewfunction params() view returns (uint8 maxLeverage, uint24 interestRate, uint24 fee, uint24 swapFee, uint24 mcSlippage, uint184 positionMinAmount, uint184 quoteLimit)
positions
viewfunction positions(address) view returns (uint8 _type, uint32 heapPosition, uint256 discountedBaseAmount, uint256 discountedQuoteAmount)
priceOracle
viewfunction priceOracle() view returns (address)
quoteCollateralCoeff
viewfunction quoteCollateralCoeff() view returns (uint256 inner)
quoteDebtCoeff
viewfunction quoteDebtCoeff() view returns (uint256 inner)
quoteDelevCoeff
viewfunction quoteDelevCoeff() view returns (uint256 inner)
quoteToken
viewfunction quoteToken() view returns (address)
systemLeverage
viewfunction systemLeverage() view returns (uint128 shortX96, uint128 longX96)
execute
payablefunction execute(uint8 call, uint256 amount1, int256 amount2, uint256 limitPriceX96, bool flag, address receivePositionAddress, uint256 swapCalldata) payable
initialize
nonpayablefunction initialize(address _quoteToken, address _baseToken, address _priceOracle, uint32 _defaultSwapCallData, tuple _params)
setParameters
nonpayablefunction setParameters(tuple _params)
shutDown
nonpayablefunction shutDown(uint256 swapCalldata)
sweepETH
nonpayablefunction sweepETH()
events
BalanceSync
event BalanceSync()
BaseDebtRepaid
event BaseDebtRepaid(address indexed user, uint256 realBaseDebtDelta, uint256 discountedBaseDebtDelta)
ClosePosition
event ClosePosition(address indexed user, address indexed token, uint256 collateralDelta, uint256 swapPriceX96, uint256 collateralDiscountedDelta)
Deleverage
event Deleverage(uint8 positionType, uint256 totalCollateralReduced, uint256 totalDebtReduced)
DepositBase
event DepositBase(address indexed user, uint256 amount, uint8 newPositionType, uint256 baseDiscountedAmount)
DepositQuote
event DepositQuote(address indexed user, uint256 amount, uint8 newPositionType, uint256 quoteDiscountedAmount)
Emergency
event Emergency(uint8 mode)
EmergencyWithdraw
event EmergencyWithdraw(address indexed who, address indexed token, uint256 amount)
EnactMarginCall
event EnactMarginCall(address indexed user, uint256 swapPriceX96)
Long
event Long(address indexed user, uint256 amount, uint256 swapPriceX96, uint256 quoteDiscountedDelta, uint256 baseDiscountedDelta)
ParametersChanged
event ParametersChanged()
QuoteDebtRepaid
event QuoteDebtRepaid(address indexed user, uint256 realQuoteDebtDelta, uint256 discountedQuoteDebtDelta)
ReceivePosition
event ReceivePosition(address indexed liquidator, address indexed position, uint8 newPositionType, uint256 newPositionQuoteDiscounted, uint256 newPositionBaseDiscounted)
Reinit
event Reinit(uint256 reinitTimestamp)
SellBaseForQuote
event SellBaseForQuote(address indexed user, uint256 baseDelta, uint256 quoteDelta, uint256 discountedBaseCollateralDelta, uint256 discountedQuoteCollateralDelta)
SellQuoteForBase
event SellQuoteForBase(address indexed user, uint256 quoteDelta, uint256 baseDelta, uint256 discountedQuoteCollateralDelta, uint256 discountedBaseCollateralDelta)
Short
event Short(address indexed user, uint256 amount, uint256 swapPriceX96, uint256 quoteDiscountedDelta, uint256 baseDiscountedDelta)
WithdrawBase
event WithdrawBase(address indexed user, uint256 amount, uint256 baseDiscountedDelta)
WithdrawQuote
event WithdrawQuote(address indexed user, uint256 amount, uint256 quoteDiscountedDelta)
errors
AccessDenied
error AccessDenied()
BadLeverage
error BadLeverage()
BigPrecisionLoss
error BigPrecisionLoss()
EmergencyMode
error EmergencyMode()
ExceedsLimit
error ExceedsLimit()
Forbidden
error Forbidden()
LessThanMinimalAmount
error LessThanMinimalAmount()
Locked
error Locked()
LongEmergency
error LongEmergency()
NotEmergency
error NotEmergency()
NotLiquidatable
error NotLiquidatable()
NotWETH9
error NotWETH9()
PositionInitialized
error PositionInitialized()
ShortEmergency
error ShortEmergency()
SlippageLimit
error SlippageLimit()
UninitializedPosition
error UninitializedPosition()
WrongIndex
error WrongIndex()
WrongPositionType
error WrongPositionType()
WrongValue
error WrongValue()
ZeroAmount
error ZeroAmount()
creation bytecode
0x608060405234801561001057600080fd5b50600080546001600160a01b03191661dead179055615a5480620000356000396000f3fe6080604052600436106101915760003560e01c806355f57510116100d7578063b49f4afd11610085578063b49f4afd146104e0578063c336714d146104f5578063c45a01551461050b578063c55dae631461052b578063cff0ab961461054b578063d47f6877146105f7578063d7f5cadf1461060c578063ec511d0b1461062257600080fd5b806355f57510146103be5780635b87ac0c1461041a5780635cfbe1211461043157806375e924081461047c57806394ad0c481461049c578063af734b39146104b3578063afcbea84146104ca57600080fd5b80632630c12f1161013f5780632630c12f146102bb578063295a5212146102db5780632c1830c4146103095780633d9c02ed146103425780633f056b231461035957806340e27c9014610370578063411641241461038357806346558d1b1461039a57600080fd5b806307cc1935146101d65780630f9c3816146102005780631471d68b146102165780631cb5d340146102365780631d0806ae1461024c578063217a4b701461026357806323578f2e1461029b57600080fd5b366101d15761019e610678565b6001600160a01b0316336001600160a01b0316146101cf5760405163178e51ad60e11b815260040160405180910390fd5b005b600080fd5b3480156101e257600080fd5b506011546101ed9081565b6040519081526020015b60405180910390f35b34801561020c57600080fd5b506101ed60075481565b34801561022257600080fd5b506101cf610231366004615510565b6106f5565b34801561024257600080fd5b506101ed60085481565b34801561025857600080fd5b506012546101ed9081565b34801561026f57600080fd5b50600154610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b3480156102a757600080fd5b506101cf6102b636600461552c565b610717565b3480156102c757600080fd5b50600354610283906001600160a01b031681565b3480156102e757600080fd5b506003546102fc90600160a81b900460ff1681565b6040516101f7919061555b565b34801561031557600080fd5b5060005461032d90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101f7565b34801561034e57600080fd5b50600d546101ed9081565b34801561036557600080fd5b506013546101ed9081565b6101cf61037e366004615598565b6108ee565b34801561038f57600080fd5b506010546101ed9081565b3480156103a657600080fd5b506103af610c0a565b604051905181526020016101f7565b3480156103ca57600080fd5b5061040a6103d936600461560e565b60196020526000908152604090208054600182015460029092015460ff82169261010090920463ffffffff16919084565b6040516101f7949392919061563f565b34801561042657600080fd5b50600c546101ed9081565b34801561043d57600080fd5b5060145461045c906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016101f7565b34801561048857600080fd5b506101cf610497366004615687565b610cab565b3480156104a857600080fd5b50600f546101ed9081565b3480156104bf57600080fd5b50600e546101ed9081565b3480156104d657600080fd5b506101ed600a5481565b3480156104ec57600080fd5b506103af610cf7565b34801561050157600080fd5b506101ed60095481565b34801561051757600080fd5b50600054610283906001600160a01b031681565b34801561053757600080fd5b50600254610283906001600160a01b031681565b34801561055757600080fd5b506004546005546006546105a79260ff81169262ffffff61010083048116936401000000008404821693600160381b8104831693600160501b909104909216916001600160b81b03908116911687565b6040805160ff909816885262ffffff96871660208901529486169487019490945291841660608601529290921660808401526001600160b81b0391821660a08401521660c082015260e0016101f7565b34801561060357600080fd5b506101cf610d4a565b34801561061857600080fd5b506101ed600b5481565b34801561062e57600080fd5b5061064261063d3660046156f4565b610d64565b60408051921515835281516001600160601b0316602080850191909152909101516001600160a01b0316908201526060016101f7565b60008060009054906101000a90046001600160a01b03166001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f0919061572b565b905090565b6106fd610dac565b61071461070f36839003830183615783565b610e52565b50565b61071f610dac565b610727610ffa565b6003805460ff60a01b1916600160a01b1790556000600354600160a81b900460ff16600281111561075a5761075a615545565b146107785760405163185079b960e01b815260040160405180910390fd5b610780611025565b5061078961138b565b61079161148e565b600061079b610cf7565b600a546040805160208101909152600e5481529192506000916107bf916001611572565b905060006107d1600754600a54611590565b600854604080516020810190915260115481529192506000916107f5916001611572565b905060006108076009546008546115da565b9050826108148686611611565b111561086d57600080610828601782611626565b915091508115610851576108408160200151886116a1565b1561085157505050505050506108de565b610861600188858989898e6116dd565b505050505050506108de565b6108778582611611565b8211156108c55760008061088c601582611626565b9150915081156108b5576108a48160200151886116a1565b156108b557505050505050506108de565b6108616002888787878b8e6116dd565b6040516303ca9f4d60e11b815260040160405180910390fd5b506003805460ff60a01b19169055565b6108f6610ffa565b6003805460ff60a01b1916600160a01b179055600887600981111561091d5761091d615545565b0361095457600085121561094457604051632635240760e21b815260040160405180910390fd5b61094f82878761181a565b610bf4565b600987600981111561096857610968615545565b036109765761094f83611d48565b6000600354600160a81b900460ff16600281111561099657610996615545565b146109b45760405163185079b960e01b815260040160405180910390fd5b6000806109bf61202d565b9150915081156109d9576109d2816120f9565b5050610bf4565b3360009081526019602052604090206109f2818361210b565b15610a1357610a023382846121f7565b610a0b826120f9565b505050610bf4565b60008a6009811115610a2757610a27615545565b03610a7057610a378983836124f7565b6000881315610a5257610a4d88888484886127b2565b610bde565b6000881215610a4d57610a4d610a6789615857565b88848488612a25565b60018a6009811115610a8457610a84615545565b03610ac757610a938982612a3e565b6000881315610aa957610a4d8888848488612a25565b6000881215610a4d57610a4d610abe89615857565b888484886127b2565b60028a6009811115610adb57610adb615545565b03610aec57610a4d89878484612ce4565b60038a6009811115610b0057610b00615545565b03610b1157610a4d89878484612f3b565b60048a6009811115610b2557610b25615545565b03610b3757610a4d8988848488612a25565b60058a6009811115610b4b57610b4b615545565b03610b5d57610a4d89888484886127b2565b60068a6009811115610b7157610b71615545565b03610b8157610a4d878286613188565b60078a6009811115610b9557610b95615545565b148015610b9f5750855b15610bde57610bac61138b565b610bb461148e565b6040517f84aada178f1632c750f9338e543f9e4d47b7b3f9f5977a056a71e16c16e1090190600090a15b610be781613514565b610bf0826120f9565b5050505b50506003805460ff60a01b191690555050505050565b6040805160208101825260008082526003546001546002549451634e83991f60e11b81526001600160a01b0391821660048201529481166024860152929391921690639d07323e906044015b602060405180830381865afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190615873565b604080516020810190915290815292915050565b6000546001600160a01b031615610cd557604051631dd2188d60e31b815260040160405180910390fd5b610cf085858585610ceb36879003870187615783565b61360c565b5050505050565b6040805160208101825260008082526003546001546002549451600162248f4560e11b031981526001600160a01b039182166004820152948116602486015292939192169063ffb6e17690604401610c56565b610d52610dac565b4715610d6257610d623347613749565b565b6000610d80604080518082019091526000808252602082015290565b8215610d9a57610d91601585611626565b91509150610da5565b610d91601785611626565b9250929050565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e21919061572b565b6001600160a01b0316336001600160a01b031614610d6257604051634ca8886760e01b815260040160405180910390fd5b620f424062ffffff16816020015162ffffff161180610e815750620f424062ffffff16816040015162ffffff16115b80610e9c5750620f424062ffffff16816060015162ffffff16115b80610eb75750620f424062ffffff16816080015162ffffff16115b80610ec857508051600160ff909116105b80610ede575060c08101516001600160b81b0316155b80610ef4575060a08101516001600160b81b0316155b15610f1257604051632635240760e21b815260040160405180910390fd5b80516004805460208401516040808601516060870151608088015160ff90971663ffffffff199095169490941761010062ffffff948516021769ffffffffffff0000000019166401000000009184169190910262ffffff60381b191617600160381b938316939093029290921762ffffff60501b1916600160501b919094160292909217905560a0820151600580546001600160b81b03199081166001600160b81b039384161790915560c0840151600680549092169216919091179055517ffd3af382071f4cb787d4d245bfe51266e40f514a545168e3063d1cf1226b9e4f90600090a150565b600354600160a01b900460ff1615610d62576040516303cb96db60e21b815260040160405180910390fd5b600080600b546110324290565b61103c919061588c565b90508060000361104e57600091505090565b42600b556040805160208101909152620f0c3f60651b815260045460009061108390610100900462ffffff16620f42406137f1565b905060006110c1611092613817565b6004546110bb9086906110b590640100000000900462ffffff16620f42406137f1565b9061382c565b9061384f565b905060006110cf828661386c565b90506000806009546000146111eb576040805160208101909152600e548152600a546000906110ff908390611611565b9050600061113861110e613817565b60408051602081019091526014546001600160801b031681526110bb908c906110b5908d90613924565b90506000611146828c61386c565b905061115c876111568684613924565b90613924565b51600e55600061119f6111976111848661117e611177613817565b8790613946565b90611611565b6111926009546008546115da565b6137f1565b6110bb613817565b90506111aa81613963565b6111e36111cd8561117e6111c66111bf613817565b8d90613946565b8690613924565b6040805160208101909152600c548152906139a2565b965050505050505b600754156112d95760408051602081019091526011548152600854600090611214908390611611565b90506000611254611223613817565b6040805160208101909152601454600160801b90046001600160801b031681526110bb908c906110b5908d90613924565b90506000611262828c61386c565b9050611272876111568684613924565b51601155600061129b61119761128d8661117e611177613817565b611192600754600a54611590565b90506112a6816139b7565b6112d16112bb8561117e6111c66111bf613817565b6040805160208101909152600f548152906139a2565b955050505050505b811515806112e657508015155b156113425760006112f56139f6565b60018101549091506113079084613a97565b6001820155600281015461131b9083613a97565b600282015560095461132d9084613a97565b60095560075461133d9083613a97565b600755505b7fcd1f75c78bd071a174b2793106d0f7b9bcd3576a93dae38f90ea24ceacf91d6c600b5460405161137591815260200190565b60405180910390a1600197505050505050505090565b6002546000906113a3906001600160a01b0316613ab2565b600a546040805160208101909152600e5481529192506000916113d19184916113cb91611611565b90613a97565b905060006113e36009546008546115da565b905060006113ef6139f6565b9050818311156114435760006114086111cd8585613b1d565b90508082600101600082825461141e919061589f565b925050819055508060096000828254611437919061589f565b90915550611488915050565b60006114526111cd8486613b1d565b905080826001016000828254611468919061588c565b925050819055508060096000828254611481919061588c565b9091555050505b50505050565b6001546000906114a6906001600160a01b0316613ab2565b600854604080516020810190915260115481529192506000916114ce9184916113cb91611611565b905060006114e0600754600a54611590565b905060006114ec6139f6565b9050818311156115345760006115056112bb8585613b1d565b90508082600201600082825461151b919061589f565b925050819055508060076000828254611437919061589f565b60006115436112bb8486613b1d565b905080826002016000828254611559919061588c565b925050819055508060076000828254611481919061588c565b6000611588846000015184600160601b85613b38565b949350505050565b604080516020810190915260105481526000906115d1906115b19084611611565b6040805160208101909152600f5481526115cb9086611611565b90613b1d565b90505b92915050565b6040805160208101909152600d5481526000906115d1906115fb9084611611565b6040805160208101909152600c5481526115cb90865b60006115d1836000015183600160601b613b95565b6000611642604080518082019091526000808252602082015290565b600184015463ffffffff9081169084161015610da557505063ffffffff16600090815260209182526040908190208151808301909252546001600160601b0381168252600160601b90046001600160a01b031691810191909152600191565b6001600160a01b03821660009081526019602052604081206116c3818461210b565b915081156116d6576116d68482856121f7565b5092915050565b6003805488919060ff60a81b1916600160a81b83600281111561170257611702615545565b0217905550855160125560008486101561171d576000611727565b6117278686613b1d565b90508284111561177357600061173d8585613b1d565b9050600061176260018b600281111561175857611758615545565b1483600087613c85565b905061176e8382613a97565b925050505b6001600354600160a81b900460ff16600281111561179357611793615545565b036117bc576117b36117a58883611611565b611192856115cb8b8b611611565b516013556117d9565b6117d4816111926117cd8a87611611565b8990613b1d565b516013555b7f53254125669410c9787ebe35314b4811ebcd804ad696379b0eb6c64a340032fa88604051611808919061555b565b60405180910390a15050505050505050565b6000600354600160a81b900460ff16600281111561183a5761183a615545565b146118585760405163185079b960e01b815260040160405180910390fd5b33600090815260196020526040812090815460ff16600381111561187e5761187e615545565b1461189c5760405163293510e360e11b815260040160405180910390fd5b6118a4611025565b506001600160a01b0384166000908152601960205260408120906118c6610cf7565b90506118d2828261210b565b6118ef57604051636ef5bcdd60e11b815260040160405180910390fd5b815460009061190b90600190610100900463ffffffff166158b2565b90506002835460ff16600381111561192557611925615545565b03611ac1576040805160208101909152600f54815260009061194790886139a2565b6007549091506119579082613a97565b60075560028401546119699082613a97565b600286015560018401546040805160208101909152600e5481526000916119909190611611565b905060008188106119e85750600185015460006119b06111cd8a85613b1d565b600189018190556009549091506119c79082613a97565b600955875460ff191660011788556119e26015601987613d58565b50611a56565b865460ff191660021787556119fe8460016158cf565b875464ffffffff00191661010063ffffffff928316021788556040805160208101909152600e548152611a33918a906139a216565b6001870154909150611a459082613b1d565b6001880155611a5660158533613ef9565b600a54611a639082613b1d565b600a5560408051602081019091526010548152611a84906112bb9083611611565b92508260076000828254611a98919061588c565b9250508190555082876002016000828254611ab3919061588c565b90915550611c539350505050565b6040805160208101909152600c548152600090611ade90876139a2565b600954909150611aee9082613a97565b6009556001840154611b009082613a97565b6001860155600284015460408051602081019091526011548152600091611b279190611611565b90506000818910611b7f575060028501546000611b476112bb8b85613b1d565b60028901819055600754909150611b5e9082613a97565b600755875460ff19166001178855611b796017601987613d58565b50611bed565b865460ff19166003178755611b958460016158cf565b875464ffffffff00191661010063ffffffff9283160217885560408051602081019091526011548152611bca918b906139a216565b6002870154909150611bdc9082613b1d565b6002880155611bed60178533613ef9565b600854611bfa9082613b1d565b6008556040805160208101909152600d548152611c1b906111cd9083611611565b92508260096000828254611c2f919061588c565b9250508190555082876001016000828254611c4a919061588c565b90915550505050505b611c5c84613514565b611c65826120f9565b6001600160a01b0387166000908152601960205260408120805464ffffffffff191681556001810182905560020155611c9e848361210b565b15611cbc5760405163522007a560e01b815260040160405180910390fd5b600254611cd3906001600160a01b03163387613f37565b600154611cea906001600160a01b03163388613f37565b8354600285015460018601546040516001600160a01b038b169333937f5640888abc8e397bce303a7cd7c161b313688acc5bc6b72248e052eac57468bf93611d379360ff909316926158ec565b60405180910390a350505050505050565b6000600354600160a81b900460ff166002811115611d6857611d68615545565b03611d86576040516303ca9f4d60e11b815260040160405180910390fd5b336000908152601960205260408082208151608081019092528054829060ff166003811115611db757611db7615545565b6003811115611dc857611dc8615545565b81528154610100900463ffffffff166020820152600182015460408201526002909101546060909101529050600081516003811115611e0957611e09615545565b03611e27576040516322192de760e21b815260040160405180910390fd5b6000806001600354600160a81b900460ff166002811115611e4a57611e4a615545565b03611f0857600283516003811115611e6457611e64615545565b03611e8257604051637bf6baff60e01b815260040160405180910390fd5b606083015160408051602081019091526011548152600091611ed491611ec291611eac9190611611565b60408051602081019091526012548152906139a2565b6115cb866040015187606001516115da565b60408051602081019091526013548152909150611ef19082611611565b6002546001600160a01b031693509150611fb39050565b600383516003811115611f1d57611f1d615545565b03611f3b576040516309772f7760e41b815260040160405180910390fd5b60408084015181516020808201845260125482528351908101909352600e548352600092611f8492611f7292909161117e91613924565b6115cb86606001518760400151611590565b60408051602081019091526013548152909150611fa19082611611565b6001546001600160a01b031693509150505b336000818152601960205260408120805464ffffffffff191681556001810182905560020155611fe7908590849084613fc3565b6040518181526001600160a01b0383169033907ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285049060200160405180910390a350505050565b60006120456040518060200160405280600081525090565b61204d610cf7565b9050612057611025565b61205f579091565b60008061206d601582611626565b9150915081156120a65760006120878260200151856116a1565b90508080156120a2575060208201516001600160a01b031633145b9450505b6120b260176000611626565b909250905081156120f35760006120cd8260200151856116a1565b905084806120ef57508080156120ef575060208201516001600160a01b031633145b9450505b50509091565b6121028161405d565b61071481614122565b600080806002855460ff16600381111561212757612127615545565b0361216b5761213e85600201548660010154611590565b60018601546040805160208101909152600e5481529193506121649161117e9087613924565b90506121d1565b6003855460ff16600381111561218357612183615545565b036121c6576121a461219d866001015487600201546115da565b8590611611565b6002860154604080516020810190915260115481529193506121649190611611565b6000925050506115d4565b60045460601b60ff60601b1660006121e984846141e2565b919091119695505050505050565b6002825460ff16600381111561220f5761220f615545565b0361236757600061222883600201548460010154611590565b9050600061223a600754600a54611590565b600854604080516020810190915260115481529192506000916122629185916113cb91611611565b90508181111561235f5760006122788284613b1d565b9050600061228686836139a2565b60018801546040805160208101909152600e5481529192506000916122aa91611611565b9050808211156122b8578091505b6122c2828461420f565b6040805160208101909152600e5481526000906122df90846139a2565b60018a01549091506122f19082613b1d565b60018a0155600a546123039082613b1d565b600a5560408051602081019091526010548152600090612332906112bb9061232b9085611611565b8790613a97565b60028b01549091506123449082613b1d565b60028b01556007546123569082613b1d565b60075550505050505b5050506124e8565b6003825460ff16600381111561237f5761237f615545565b036124cf576000612398836001015484600201546115da565b905060006123aa6009546008546115da565b600a546040805160208101909152600e5481529192506000916123d29185916113cb91611611565b90508181111561235f5760006123e88284613b1d565b905060006123f68683611611565b60028801546040805160208101909152601154815291925060009161241a91611611565b905080821115612428578091505b61243282846142d9565b6040805160208101909152601154815260009061244f90846139a2565b60028a01549091506124619082613b1d565b60028a01556008546124739082613b1d565b6008556040805160208101909152600d54815260009061249b906111cd9061232b9085611611565b60018b01549091506124ad9082613b1d565b60018b01556009546124bf9082613b1d565b60095550505050505050506124e8565b604051631a04c6d360e31b815260040160405180910390fd5b6124f28383614397565b505050565b8260000361251857604051631f2a200560e01b815260040160405180910390fd5b6000815460ff16600381111561253057612530615545565b0361254157805460ff191660011781555b6040805160208101909152600e54815260018201546002835460ff16600381111561256e5761256e615545565b036126d057600061257f8383611611565b905060008187106126535760006125968884613b1d565b90508288146125dd576006546001600160b81b03166125be6125b7836146a6565b8990611611565b11156125dd57604051632795088960e11b815260040160405180910390fd5b8554612606906019906125fd90600190610100900463ffffffff166158b2565b60159190613d58565b6040805160208101909152600c54815260009061262390836139a2565b875460ff19166001908117895588018190556009548694509091506126489082613a97565b6009555061266f9050565b61265d84886139a2565b90506126698382613b1d565b60018601555b60408051602081019091526010548152600090612690906112bb9084611611565b60028701549091506126a29082613b1d565b6002870155600a546126b49083613b1d565b600a556007546126c49082613b1d565b6007555061274e915050565b6006546001600160b81b03166126ef6126e8876146a6565b8690611611565b111561270e57604051632795088960e11b815260040160405180910390fd5b6040805160208101909152600c54815260009061272b90876139a2565b90506127378282613a97565b60018501556009546127499082613a97565b600955505b600254612765906001600160a01b03163387613f37565b8254600184015460405133927fa6038bcb866df255f5b5fe46dabc103bbdda6484349402a7f69b502240f139e5926127a3928a9260ff16919061590b565b60405180910390a25050505050565b6006546001600160b81b03166127ca61219d876146a6565b11156127e957604051632795088960e11b815260040160405180910390fd5b6127f48285836146dd565b60028201546001830154600061280a82846115da565b6005549091506001600160b81b031681101561283957604051634edec39960e01b815260040160405180910390fd5b50600061284b8789600160601b613b95565b9050600061285c6001838b8861493f565b9050600061286a828b614a1f565b60045490915060009061288d90600160381b900462ffffff1684620f4240613b95565b905061289881614a30565b60006128bd6128a78584613a97565b60408051602081019091526011548152906139a2565b90506128c98782613a97565b60028a01556008546128db9082613a97565b6008556040805160208101909152600d54815260009061290a906111cd906129039085611611565b8f90613a97565b90506129168782613a97565b60018b01556009546129289082613a97565b60095560018a5460ff16600381111561294357612943615545565b036129a3578954610100900463ffffffff161561297357604051632230814560e11b815260040160405180910390fd5b604080518082019091526000815233602082015261299690601790601990614aac565b50895460ff19166003178a555b6129ad8a8c61210b565b156129cb5760405163522007a560e01b815260040160405180910390fd5b604080518e8152602081018690529081018390526060810182905233907fa3194197f96c6af8d04f5de4d969d3d7dc126db2fa74e7091f2c87e6a50be129906080015b60405180910390a250505050505050505050505050565b604051631dd2188d60e31b815260040160405180910390fd5b81600003612a5f57604051631f2a200560e01b815260040160405180910390fd5b6000815460ff166003811115612a7757612a77615545565b03612a8857805460ff191660011781555b6040805160208101909152601154815260028201546003835460ff166003811115612ab557612ab5615545565b03612c0d576000612ac68383611611565b90506000818610612b90576000612add8784613b1d565b9050828714612b1a576006546001600160b81b0316612afb82614b65565b1115612b1a57604051632795088960e11b815260040160405180910390fd5b8554612b4390601990612b3a90600190610100900463ffffffff166158b2565b60179190613d58565b6040805160208101909152600f548152600090612b6090836139a2565b875460ff1916600117885560028801819055600754869450909150612b859082613a97565b60075550612bac9050565b612b9a84876139a2565b9050612ba68382613b1d565b60028601555b6040805160208101909152600d548152600090612bcd906111cd9084611611565b6001870154909150612bdf9082613b1d565b6001870155600854612bf19083613b1d565b600855600954612c019082613b1d565b60095550612c81915050565b6006546001600160b81b0316612c2285614b65565b1115612c4157604051632795088960e11b815260040160405180910390fd5b6040805160208101909152600f548152600090612c5e90866139a2565b9050612c6a8282613a97565b6002850155600754612c7c9082613a97565b600755505b600154612c98906001600160a01b03163386613f37565b8254600284015460405133927f674eb50a563a8d71e963ec32b215164a31e83cb53940ef8198fcf8f2e3a0e0be92612cd692899260ff16919061590b565b60405180910390a250505050565b83600003612d0557604051631f2a200560e01b815260040160405180910390fd5b805460ff166000816003811115612d1e57612d1e615545565b03612d3c576040516322192de760e21b815260040160405180910390fd5b6002816003811115612d5057612d50615545565b03612d6e57604051631a04c6d360e31b815260040160405180910390fd5b60018083015490600090836003811115612d8a57612d8a615545565b14612d99578360020154612d9c565b60005b90506000612daa83836115da565b905060008080838b10612dc857505050600285015481901584612de8565b6040805160208101909152600c5481528b9350612de590846139a2565b90505b6003876003811115612dfc57612dfc615545565b03612e655760408051602081019091526011548152600090612e1e9087611611565b9050612e2a8585613b1d565b600554612e44906001600160b81b03166113cb8d856139a2565b1115612e6357604051634edec39960e01b815260040160405180910390fd5b505b612e6f8682613b1d565b6001890155600954612e819082613b1d565b600955612e8e888a61210b565b15612eac5760405163522007a560e01b815260040160405180910390fd5b8115612ed957336000908152601960205260408120805464ffffffffff1916815560018101829055600201555b600254612ef2908b906001600160a01b03163386613fc3565b604080518481526020810183905233917f84fc81d1b98b7740216df0055337b83537c88efc18207fa4631bce54b4e07f8491015b60405180910390a25050505050505050505050565b83600003612f5c57604051631f2a200560e01b815260040160405180910390fd5b805460ff166000816003811115612f7557612f75615545565b03612f93576040516322192de760e21b815260040160405180910390fd5b6003816003811115612fa757612fa7615545565b03612fc557604051631a04c6d360e31b815260040160405180910390fd5b600282015460006001836003811115612fe057612fe0615545565b14612fef578360010154612ff2565b60005b905060006130008383611590565b905060008080838b1061301e5750505060018501548190158461303e565b6040805160208101909152600f5481528b935061303b90846139a2565b90505b600287600381111561305257613052615545565b036130c3576040805160208101909152600e5481526000906130749087611611565b90506130808585613b1d565b6005546130a29061309b9084906001600160b81b0316613a97565b8c90611611565b11156130c157604051634edec39960e01b815260040160405180910390fd5b505b6130cd8682613b1d565b60028901556007546130df9082613b1d565b6007556130ec888a61210b565b1561310a5760405163522007a560e01b815260040160405180910390fd5b811561313757336000908152601960205260408120805464ffffffffff1916815560018101829055600201555b600154613150908b906001600160a01b03163386613fc3565b604080518481526020810183905233917f487ff9253eff8d6ffd939875dc7caf988054404b5f75882a7ce9dc690b6a97bd9101612f26565b60008080806002865460ff1660038111156131a5576131a5615545565b0361332e57600180549087015460028801546001600160a01b039092169350906000906131d29083611590565b6040805160208101909152600e5481529091506000906131f490846001611572565b905060006132078b83600160601b613b95565b9050613216600184848c61493f565b9750808811156132395760405163f7b7f0b960e01b815260040160405180910390fd5b6132438883614a1f565b60045490955060009061326690600160381b900462ffffff168a620f4240613b95565b905061327181614a30565b61327b8982613a97565b60018c015460408051602081019091526010548152919a506132ac916112bb916132a59190611611565b8b90613a97565b975050506132c586600754613b1d90919063ffffffff16565b600755600a546132d59084613b1d565b600a5560028901546132e79087613b1d565b60028a015560006001808b018290558a5460ff19168117808c556133169190610100900463ffffffff166158b2565b90506133256015601983613d58565b505050506134c9565b6003865460ff16600381111561334657613346615545565b036124cf57600280549087015460018801546001600160a01b0390921693509060009061337390836115da565b6040805160208101909152601154815290915060009061339590846001611572565b6004549091506000906133b890600160381b900462ffffff1683620f4240613b95565b905060006133c68383613a97565b905060006133d9600160601b838f613b95565b90506133e8600086848e61493f565b9950808a111561340b5760405163f7b7f0b960e01b815260040160405180910390fd5b613415828b614a1f565b965061342083614a30565b60028c01546040805160208101909152600d54815261344d916111cd9161344691611611565b8c90613a97565b60095490995061345e915089613b1d565b60095560085461346e9086613b1d565b60085560018b01546134809089613b1d565b60018c810191909155600060028d018190558c5460ff19168217808e5590916134b391610100900463ffffffff166158b2565b90506134c26017601983613d58565b5050505050505b60408051858152602081018390529081018490526001600160a01b0383169033907f13a9b207a6235519f908e828190fa2f938b5e52c7888b90b98b87125caebde6e90606001611d37565b6003815460ff16600381111561352c5761352c615545565b0361358f576001810154604080516020810190915260125481526000916135609161355691611611565b8360020154614b9c565b825490915060009061357f90600190610100900463ffffffff166158b2565b9050611488601760198385614be1565b6002815460ff1660038111156135a7576135a7615545565b036107145760028101546001820154604080516020810190915260125481526000926135dd9290916135d891611611565b614b9c565b82549091506000906135fc90600190610100900463ffffffff166158b2565b9050611488601560198385614be1565b6001600160a01b03851661363357604051632635240760e21b815260040160405180910390fd5b6001600160a01b03841661365a57604051632635240760e21b815260040160405180910390fd5b6001600160a01b03831661368157604051632635240760e21b815260040160405180910390fd5b60008054336001600160a01b0319918216179091556001805482166001600160a01b0388811691909117909155600280548316878316179055600380549092169085161790556136d081610e52565b6136d8613817565b51600c556136e4613817565b51600e556136f0613817565b51600f556136fc613817565b5160115542600b5561370c610cf7565b516012556000805463ffffffff60a01b1916600160a01b63ffffffff8516021781556137366139f6565b805460ff19166001179055505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516137739190615951565b60006040518083038185875af1925050503d80600081146137b0576040519150601f19603f3d011682016040523d82523d6000602084013e6137b5565b606091505b50509050806124f25760405162461bcd60e51b815260206004820152600360248201526253544560e81b60448201526064015b60405180910390fd5b60408051602081019091526000815261380f600160601b8484613b95565b815292915050565b6040805160208101909152600160601b815290565b6040805160208101909152600081528251825161380f9190600160601b90613b95565b6040805160208101909152600081528251825161380f9190613a97565b60408051602081019091526000808252835161388d90600160601b9061588c565b9050600160601b81106138b357604051632635240760e21b815260040160405180910390fd5b600160601b60008181600387106138cb5760036138cd565b865b905060005b818114613909578060010186828a0302816138ef576138ef61596d565b049350600160601b838502049485019492506001016138d2565b50506040805160208101909152928352509095945050505050565b6040805160208101909152600081528251825161380f9190600160601b613b95565b6040805160208101909152600081528251825161380f9190613b1d565b6040805160208101909152600c54815261397d9082613924565b51600c556040805160208101909152600d54815261399b9082613924565b51600d5550565b60006115d1600160601b838560000151613b95565b6040805160208101909152600f5481526139d19082613924565b51600f55604080516020810190915260105481526139ef9082613924565b5160105550565b6000601960008060009054906101000a90046001600160a01b03166001600160a01b031663ecc456fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a72919061572b565b6001600160a01b03166001600160a01b03168152602001908152602001600020905090565b600082613aa4838261589f565b91508110156115d457600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613af9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d49190615873565b600082613b2a838261588c565b91508111156115d457600080fd5b600080613b46868686613b95565b90506001836002811115613b5c57613b5c615545565b148015613b79575060008480613b7457613b7461596d565b868809115b15613b8c57613b8960018261589f565b90505b95945050505050565b6000808060001985870985870292508281108382030391505080600003613bcf57838281613bc557613bc561596d565b0492505050613c7e565b808411613c165760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016137e8565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080613c90614c97565b905060008087613cb2576002546001546001600160a01b039182169116613cc6565b6001546002546001600160a01b0391821691165b91509150613cd5828489614ceb565b6040516365a8c7a960e11b81526001600160a01b0384169063cb518f5290613d09908890869086908d908d90600401615983565b6020604051808303816000875af1158015613d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4c9190615873565b98975050505050505050565b600183015463ffffffff9081169082168111613d8757604051632230814560e11b815260040160405180910390fd5b6000613d946001836158b2565b60018601805463ffffffff191663ffffffff83811691821790925590851660008181526020898152604080832054600160601b90046001600160a01b03168352908990529020805464ffffffff001916905591925014613edb5763ffffffff838116600081815260208890526040808220805494861683529082209290915281546001600160601b039081166001600160601b03198516811783559254600160601b908190046001600160a01b031602909217905516613e558460016158cf565b63ffffffff808616600081815260208a8152604080832080546001600160a01b03600160601b9091041684528b83529083208054969095166101000264ffffffff00199096169590951790935552879052546001600160601b039081169082161015613ecc57613ec6868686614d9f565b50613ed9565b613ed7868686614e13565b505b505b63ffffffff1660009081526020949094525050604082209190915550565b63ffffffff9091166000908152602092909252604090912080546001600160a01b03909216600160601b026001600160601b03909216919091179055565b803410613fb757613f46610678565b6001600160a01b0316836001600160a01b031603613fb757826001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f9957600080fd5b505af1158015613fad573d6000803e3d6000fd5b5050505050505050565b6124f283833084614f20565b831561405257613fd1610678565b6001600160a01b0316836001600160a01b03160361405257604051632e1a7d4d60e01b8152600481018290526001600160a01b03841690632e1a7d4d90602401600060405180830381600087803b15801561402b57600080fd5b505af115801561403f573d6000803e3d6000fd5b5050505061404d8282613749565b611488565b61148883838361502a565b60095460000361407f5750601480546001600160801b0316600160e01b179055565b60006140996140926009546008546115da565b8390611611565b600854604080516020810190915260115481529192506000916140bb91611611565b905060006140d7600160601b846140d28186613b1d565b613b95565b60045490915060601b60ff60601b166001600160801b03821681116140fc57806140fe565b815b601480546001600160801b03928316600160801b0292169190911790555050505050565b6007546000036141455750601480546001600160801b031916600160601b179055565b6000614155600754600a54611590565b600a546040805160208101909152600e54815291925060009161417d919061117e9086613924565b90506000614194600160601b846140d28186613b1d565b60045490915060601b60ff60601b166001600160801b03821681116141b957806141bb565b815b601480546001600160801b0319166001600160801b03929092169190911790555050505050565b600081831115614206576141ff600160601b846140d2858261588c565b90506115d4565b506000196115d4565b61423461421e836008546137f1565b6040805160208101909152600d5481529061384f565b51600d556008546142609061424a9083906137f1565b6040805160208101909152601154815290613946565b516011556040805160208101909152600160301b815251601154101561429957604051630a4a405760e01b815260040160405180910390fd5b7f1429071374b4a9149ad4dce390146b5e17e416f3e1da13ecc5703886089c9088600383836040516142cd939291906158ec565b60405180910390a15050565b6142fe6142e883600a546137f1565b604080516020810190915260105481529061384f565b51601055600a5461432a906143149083906137f1565b6040805160208101909152600e54815290613946565b51600e556040805160208101909152600160301b815251600e54101561436357604051630a4a405760e01b815260040160405180910390fd5b7f1429071374b4a9149ad4dce390146b5e17e416f3e1da13ecc5703886089c9088600283836040516142cd939291906158ec565b60006002825460ff1660038111156143b1576143b1615545565b0361451c5760006143ca83600201548460010154611590565b60018401546040805160208101909152600e5481529192506000916143ee91611611565b90506000821561447457600061443d61440f85614409610c0a565b906139a2565b60045461117e9061442f90600160501b900462ffffff16620f42406159b2565b62ffffff16620f42406137f1565b905061446460018583600060149054906101000a900463ffffffff1663ffffffff16613c85565b91506144708483614a1f565b9450505b6040805160208101909152600081528282106144a15761449a6111976111848486613b1d565b90506144c2565b6144bf6144b16111848585613b1d565b6144b9613817565b90613946565b90505b6144cb81613963565b60028601546007546144dc91613b1d565b6007556001860154600a546144f091613b1d565b600a558554614513906019906125fd90600190610100900463ffffffff166158b2565b50505050614636565b6000614530836001015484600201546115da565b60028401546040805160208101909152601154815291925060009161455491611611565b9050600082156145a057600061456f61440f8561117e610c0a565b600080549192506145909186908490600160a01b900463ffffffff16613c85565b915061459c8285614a1f565b9450505b6040805160208101909152600081528282106145cd576145c661119761128d8486613b1d565b90506145e0565b6145dd6144b161128d8585613b1d565b90505b6145e9816139b7565b60018601546009546145fa91613b1d565b600955600286015460085461460e91613b1d565b600855855461463190601990612b3a90600190610100900463ffffffff166158b2565b505050505b6001600160a01b038316600081815260196020526040808220805464ffffffffff191681556001810183905560020191909155517f535b19c900348d4fb84ebdf2e9e9dcdb8debe1de2cd9eae1f07d4020aab4311f906146999084815260200190565b60405180910390a2505050565b600a546040805160208101909152600e5481526000916115d4916146cb916001611572565b6115cb846113cb6009546008546115da565b825460ff1660008160038111156146f6576146f6615545565b03614714576040516322192de760e21b815260040160405180910390fd5b600381600381111561472857614728615545565b036147335750505050565b6000600282600381111561474957614749615545565b600287015491149150600082614760576000614766565b86600101545b905060006147748383611590565b905080600003614788575050505050505050565b6004546000906147a890600160381b900462ffffff1683620f4240613b95565b905060006147b68383613b1d565b905060006147d56001836147cf600160601b868f613b95565b8c613c85565b90506147e083614a30565b6040805160208101909152600e5481526000906147fd9087611611565b9050600061480e6111cd8484613b1d565b90508760076000828254614822919061588c565b9091555050600060028e018190556009805483929061484290849061589f565b909155505088156148de5786600a600082825461485f919061588c565b909155505060018d81018290558d5460ff19168117808f5560009161488e91610100900463ffffffff166158b2565b905061489d6015601983613d58565b60408051848152602081018a905233917fd5f4fcdc9767d669ab0e149c06e2afe501e8a40c3a238fe1a3a43e2719490067910160405180910390a2506148f8565b808d60010160008282546148f2919061589f565b90915550505b60408051858152602081018590529081018990526060810182905233907fe665269e8373d815787a9e98b1f91f51d05d3b4fdd40870d42f4049989bfcac390608001612a0e565b60008061494a614c97565b90506000808761496c576002546001546001600160a01b039182169116614980565b6001546002546001600160a01b0391821691165b9150915061498f828489614ceb565b604051635ef0652360e11b81526001600160a01b0384169063bde0ca46906149c3908890869086908d908d90600401615983565b6020604051808303816000875af11580156149e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a069190615873565b9350614a1482846000614ceb565b505050949350505050565b60006115d183600160601b84613b95565b6001546000546040805163331af97960e21b81529051610714936001600160a01b0390811693169163cc6be5e49160048083019260209291908290030181865afa158015614a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa6919061572b565b8361502a565b60018084015463ffffffff1660008181526020868152604082208551918601516001600160a01b0316600160601b026001600160601b0390921691909117905591614af89082906158cf565b6020808501516001600160a01b031660009081529086905260409020805463ffffffff929092166101000264ffffffff0019909216919091179055614b3e8160016158cf565b60018601805463ffffffff191663ffffffff92909216919091179055613b8c858583614d9f565b600854604080516020810190915260115481526000916115d491614b8a916001611572565b6115cb846113cb600754600a54611590565b60006001600160601b0383156141ff576000614bbd600160301b8587613b95565b9050816001600160601b0316811115614bd8575090506115d4565b91506115d49050565b600184015460009063ffffffff90811690841610614c1257604051632230814560e11b815260040160405180910390fd5b63ffffffff8316600090815260208690526040902080546001600160601b0380851691161015614c675780546001600160601b0319166001600160601b038416178155614c60868686614d9f565b9150614c8e565b80546001600160601b0319166001600160601b038416178155614c8b868686614e13565b91505b50949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663c31c9c076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614d3c8482615123565b61148857604080516001600160a01b038516602482015260006044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614d959085906151c6565b61148884826151c6565b6000815b63ffffffff8116156115885760006001614dbd81846158b2565b63ffffffff848116600090815260208a905260408082205493831690941c918216815292909220549192506001600160601b03908116911610614e005750611588565b614e0c8686848461529b565b9050614da3565b6001830154600090829063ffffffff165b816000614e3c600183811b6401fffffffe16906158cf565b90506000614e566401fffffffe600187901b1660026158cf565b90508363ffffffff168263ffffffff161015614ea35763ffffffff808416600090815260208b905260408082205492851682529020546001600160601b0391821691161115614ea3578192505b8363ffffffff168163ffffffff161015614eee5763ffffffff808416600090815260208b905260408082205492841682529020546001600160601b0391821691161115614eee578092505b8463ffffffff168363ffffffff1603614f0957505050614c8e565b614f158989878661529b565b829450505050614e24565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691614f849190615951565b6000604051808303816000865af19150503d8060008114614fc1576040519150601f19603f3d011682016040523d82523d6000602084013e614fc6565b606091505b5091509150818015614ff0575080511580614ff0575080806020019051810190614ff091906159ce565b6150225760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b60448201526064016137e8565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916150869190615951565b6000604051808303816000865af19150503d80600081146150c3576040519150601f19603f3d011682016040523d82523d6000602084013e6150c8565b606091505b50915091508180156150f25750805115806150f25750808060200190518101906150f291906159ce565b610cf05760405162461bcd60e51b815260206004820152600260248201526114d560f21b60448201526064016137e8565b6000806000846001600160a01b0316846040516151409190615951565b6000604051808303816000865af19150503d806000811461517d576040519150601f19603f3d011682016040523d82523d6000602084013e615182565b606091505b50915091508180156151ac5750805115806151ac5750808060200190518101906151ac91906159ce565b8015613b8c5750505050506001600160a01b03163b151590565b600061521b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166153d59092919063ffffffff16565b905080516000148061523c57508080602001905181019061523c91906159ce565b6124f25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016137e8565b63ffffffff8083166000908152602086815260408083208151808301835290546001600160601b0380821683526001600160a01b03600160601b9283900481168487015296881686528a8552948390208351808501909452549485168352909304909316908301529061530f8360016158cf565b6020808401516001600160a01b031660009081529087905260409020805463ffffffff929092166101000264ffffffff00199092169190911790556153558460016158cf565b602082810180516001600160a01b0390811660009081529883526040808a20805464ffffffff00191661010063ffffffff978816021790559784168952988252868820935190516001600160601b03918216600160601b918b16820217909455949091168652939094208151919093015191169316909102919091179055565b6060611588848460008585600080866001600160a01b031685876040516153fc9190615951565b60006040518083038185875af1925050503d8060008114615439576040519150601f19603f3d011682016040523d82523d6000602084013e61543e565b606091505b509150915061544f8783838761545a565b979650505050505050565b606083156154c95782516000036154c2576001600160a01b0385163b6154c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016137e8565b5081611588565b61158883838151156154de5781518083602001fd5b8060405162461bcd60e51b81526004016137e891906159eb565b600060e0828403121561550a57600080fd5b50919050565b600060e0828403121561552257600080fd5b6115d183836154f8565b60006020828403121561553e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061556f5761556f615545565b91905290565b801515811461071457600080fd5b6001600160a01b038116811461071457600080fd5b600080600080600080600060e0888a0312156155b357600080fd5b8735600a81106155c257600080fd5b965060208801359550604088013594506060880135935060808801356155e781615575565b925060a08801356155f781615583565b8092505060c0880135905092959891949750929550565b60006020828403121561562057600080fd5b8135613c7e81615583565b6004811061563b5761563b615545565b9052565b6080810161564d828761562b565b63ffffffff8516602083015283604083015282606083015295945050505050565b803563ffffffff8116811461568257600080fd5b919050565b600080600080600061016086880312156156a057600080fd5b85356156ab81615583565b945060208601356156bb81615583565b935060408601356156cb81615583565b92506156d96060870161566e565b91506156e887608088016154f8565b90509295509295909350565b6000806040838503121561570757600080fd5b6157108361566e565b9150602083013561572081615575565b809150509250929050565b60006020828403121561573d57600080fd5b8151613c7e81615583565b803560ff8116811461568257600080fd5b803562ffffff8116811461568257600080fd5b80356001600160b81b038116811461568257600080fd5b600060e0828403121561579557600080fd5b60405160e0810181811067ffffffffffffffff821117156157c657634e487b7160e01b600052604160045260246000fd5b6040526157d283615748565b81526157e060208401615759565b60208201526157f160408401615759565b604082015261580260608401615759565b606082015261581360808401615759565b608082015261582460a0840161576c565b60a082015261583560c0840161576c565b60c08201529392505050565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b820161586c5761586c615841565b5060000390565b60006020828403121561588557600080fd5b5051919050565b818103818111156115d4576115d4615841565b808201808211156115d4576115d4615841565b63ffffffff8281168282160390808211156116d6576116d6615841565b63ffffffff8181168382160190808211156116d6576116d6615841565b606081016158fa828661562b565b602082019390935260400152919050565b8381526060810161591f602083018561562b565b826040830152949350505050565b60005b83811015615948578181015183820152602001615930565b50506000910152565b6000825161596381846020870161592d565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b62ffffff8281168282160390808211156116d6576116d6615841565b6000602082840312156159e057600080fd5b8151613c7e81615575565b6020815260008251806020840152615a0a81604085016020870161592d565b601f01601f1916919091016040019291505056fea2646970667358221220215d9a7a2f563ccbec8af1fa222bd168c73d1dcddcccf1aa86c80eee7f67287d64736f6c63430008130033