0 txs
13.7k 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
0x608060405234801561001057600080fd5b50600080546001600160a01b03191661dead179055615f2480620000356000396000f3fe6080604052600436106101915760003560e01c806355f57510116100d7578063b49f4afd11610085578063b49f4afd146104e0578063c336714d146104f5578063c45a01551461050b578063c55dae631461052b578063cff0ab961461054b578063d47f6877146105f7578063d7f5cadf1461060c578063ec511d0b1461062257600080fd5b806355f57510146103be5780635b87ac0c1461041a5780635cfbe1211461043157806375e924081461047c57806394ad0c481461049c578063af734b39146104b3578063afcbea84146104ca57600080fd5b80632630c12f1161013f5780632630c12f146102bb578063295a5212146102db5780632c1830c4146103095780633d9c02ed146103425780633f056b231461035957806340e27c9014610370578063411641241461038357806346558d1b1461039a57600080fd5b806307cc1935146101d65780630f9c3816146102005780631471d68b146102165780631cb5d340146102365780631d0806ae1461024c578063217a4b701461026357806323578f2e1461029b57600080fd5b366101d15761019e610678565b6001600160a01b0316336001600160a01b0316146101cf5760405163178e51ad60e11b815260040160405180910390fd5b005b600080fd5b3480156101e257600080fd5b506011546101ed9081565b6040519081526020015b60405180910390f35b34801561020c57600080fd5b506101ed60075481565b34801561022257600080fd5b506101cf6102313660046159e0565b6106f5565b34801561024257600080fd5b506101ed60085481565b34801561025857600080fd5b506012546101ed9081565b34801561026f57600080fd5b50600154610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b3480156102a757600080fd5b506101cf6102b63660046159fc565b610717565b3480156102c757600080fd5b50600354610283906001600160a01b031681565b3480156102e757600080fd5b506003546102fc90600160a81b900460ff1681565b6040516101f79190615a2b565b34801561031557600080fd5b5060005461032d90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101f7565b34801561034e57600080fd5b50600d546101ed9081565b34801561036557600080fd5b506013546101ed9081565b6101cf61037e366004615a68565b6108ee565b34801561038f57600080fd5b506010546101ed9081565b3480156103a657600080fd5b506103af610c0a565b604051905181526020016101f7565b3480156103ca57600080fd5b5061040a6103d9366004615ade565b60196020526000908152604090208054600182015460029092015460ff82169261010090920463ffffffff16919084565b6040516101f79493929190615b0f565b34801561042657600080fd5b50600c546101ed9081565b34801561043d57600080fd5b5060145461045c906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016101f7565b34801561048857600080fd5b506101cf610497366004615b57565b610cab565b3480156104a857600080fd5b50600f546101ed9081565b3480156104bf57600080fd5b50600e546101ed9081565b3480156104d657600080fd5b506101ed600a5481565b3480156104ec57600080fd5b506103af610cf7565b34801561050157600080fd5b506101ed60095481565b34801561051757600080fd5b50600054610283906001600160a01b031681565b34801561053757600080fd5b50600254610283906001600160a01b031681565b34801561055757600080fd5b506004546005546006546105a79260ff81169262ffffff61010083048116936401000000008404821693600160381b8104831693600160501b909104909216916001600160b81b03908116911687565b6040805160ff909816885262ffffff96871660208901529486169487019490945291841660608601529290921660808401526001600160b81b0391821660a08401521660c082015260e0016101f7565b34801561060357600080fd5b506101cf610d4a565b34801561061857600080fd5b506101ed600b5481565b34801561062e57600080fd5b5061064261063d366004615bc4565b610d64565b60408051921515835281516001600160601b0316602080850191909152909101516001600160a01b0316908201526060016101f7565b60008060009054906101000a90046001600160a01b03166001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f09190615bfb565b905090565b6106fd610dac565b61071461070f36839003830183615c53565b610e52565b50565b61071f610dac565b610727610ffa565b6003805460ff60a01b1916600160a01b1790556000600354600160a81b900460ff16600281111561075a5761075a615a15565b146107785760405163185079b960e01b815260040160405180910390fd5b610780611025565b5061078961138b565b61079161148e565b600061079b610cf7565b600a546040805160208101909152600e5481529192506000916107bf916001611572565b905060006107d1600754600a54611590565b600854604080516020810190915260115481529192506000916107f5916001611572565b905060006108076009546008546115da565b9050826108148686611611565b111561086d57600080610828601782611626565b915091508115610851576108408160200151886116a1565b1561085157505050505050506108de565b610861600188858989898e6116dd565b505050505050506108de565b6108778582611611565b8211156108c55760008061088c601582611626565b9150915081156108b5576108a48160200151886116a1565b156108b557505050505050506108de565b6108616002888787878b8e6116dd565b6040516303ca9f4d60e11b815260040160405180910390fd5b506003805460ff60a01b19169055565b6108f6610ffa565b6003805460ff60a01b1916600160a01b179055600887600981111561091d5761091d615a15565b0361095457600085121561094457604051632635240760e21b815260040160405180910390fd5b61094f82878761181a565b610bf4565b600987600981111561096857610968615a15565b036109765761094f83611d48565b6000600354600160a81b900460ff16600281111561099657610996615a15565b146109b45760405163185079b960e01b815260040160405180910390fd5b6000806109bf61202d565b9150915081156109d9576109d2816120f9565b5050610bf4565b3360009081526019602052604090206109f2818361210b565b15610a1357610a023382846121f7565b610a0b826120f9565b505050610bf4565b60008a6009811115610a2757610a27615a15565b03610a7057610a378983836124f7565b6000881315610a5257610a4d88888484886127b2565b610bde565b6000881215610a4d57610a4d610a6789615d27565b88848488612a25565b60018a6009811115610a8457610a84615a15565b03610ac757610a938982612ca7565b6000881315610aa957610a4d8888848488612a25565b6000881215610a4d57610a4d610abe89615d27565b888484886127b2565b60028a6009811115610adb57610adb615a15565b03610aec57610a4d89878484612f4d565b60038a6009811115610b0057610b00615a15565b03610b1157610a4d898784846131a4565b60048a6009811115610b2557610b25615a15565b03610b3757610a4d8988848488612a25565b60058a6009811115610b4b57610b4b615a15565b03610b5d57610a4d89888484886127b2565b60068a6009811115610b7157610b71615a15565b03610b8157610a4d8782866133f1565b60078a6009811115610b9557610b95615a15565b148015610b9f5750855b15610bde57610bac61138b565b610bb461148e565b6040517f84aada178f1632c750f9338e543f9e4d47b7b3f9f5977a056a71e16c16e1090190600090a15b610be78161377d565b610bf0826120f9565b5050505b50506003805460ff60a01b191690555050505050565b6040805160208101825260008082526003546001546002549451634e83991f60e11b81526001600160a01b0391821660048201529481166024860152929391921690639d07323e906044015b602060405180830381865afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190615d43565b604080516020810190915290815292915050565b6000546001600160a01b031615610cd557604051631dd2188d60e31b815260040160405180910390fd5b610cf085858585610ceb36879003870187615c53565b613875565b5050505050565b6040805160208101825260008082526003546001546002549451600162248f4560e11b031981526001600160a01b039182166004820152948116602486015292939192169063ffb6e17690604401610c56565b610d52610dac565b4715610d6257610d6233476139b2565b565b6000610d80604080518082019091526000808252602082015290565b8215610d9a57610d91601585611626565b91509150610da5565b610d91601785611626565b9250929050565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190615bfb565b6001600160a01b0316336001600160a01b031614610d6257604051634ca8886760e01b815260040160405180910390fd5b620f424062ffffff16816020015162ffffff161180610e815750620f424062ffffff16816040015162ffffff16115b80610e9c5750620f424062ffffff16816060015162ffffff16115b80610eb75750620f424062ffffff16816080015162ffffff16115b80610ec857508051600260ff909116105b80610ede575060c08101516001600160b81b0316155b80610ef4575060a08101516001600160b81b0316155b15610f1257604051632635240760e21b815260040160405180910390fd5b80516004805460208401516040808601516060870151608088015160ff90971663ffffffff199095169490941761010062ffffff948516021769ffffffffffff0000000019166401000000009184169190910262ffffff60381b191617600160381b938316939093029290921762ffffff60501b1916600160501b919094160292909217905560a0820151600580546001600160b81b03199081166001600160b81b039384161790915560c0840151600680549092169216919091179055517ffd3af382071f4cb787d4d245bfe51266e40f514a545168e3063d1cf1226b9e4f90600090a150565b600354600160a01b900460ff1615610d62576040516303cb96db60e21b815260040160405180910390fd5b600080600b546110324290565b61103c9190615d5c565b90508060000361104e57600091505090565b42600b556040805160208101909152620f0c3f60651b815260045460009061108390610100900462ffffff16620f4240613a5a565b905060006110c1611092613a80565b6004546110bb9086906110b590640100000000900462ffffff16620f4240613a5a565b90613a95565b90613ab8565b905060006110cf8286613ad5565b90506000806009546000146111eb576040805160208101909152600e548152600a546000906110ff908390611611565b9050600061113861110e613a80565b60408051602081019091526014546001600160801b031681526110bb908c906110b5908d90613b8d565b90506000611146828c613ad5565b905061115c876111568684613b8d565b90613b8d565b51600e55600061119f6111976111848661117e611177613a80565b8790613baf565b90611611565b6111926009546008546115da565b613a5a565b6110bb613a80565b90506111aa81613bcc565b6111e36111cd8561117e6111c66111bf613a80565b8d90613baf565b8690613b8d565b6040805160208101909152600c54815290613c0b565b965050505050505b600754156112d95760408051602081019091526011548152600854600090611214908390611611565b90506000611254611223613a80565b6040805160208101909152601454600160801b90046001600160801b031681526110bb908c906110b5908d90613b8d565b90506000611262828c613ad5565b9050611272876111568684613b8d565b51601155600061129b61119761128d8661117e611177613a80565b611192600754600a54611590565b90506112a681613c20565b6112d16112bb8561117e6111c66111bf613a80565b6040805160208101909152600f54815290613c0b565b955050505050505b811515806112e657508015155b156113425760006112f5613c5f565b60018101549091506113079084613d00565b6001820155600281015461131b9083613d00565b600282015560095461132d9084613d00565b60095560075461133d9083613d00565b600755505b7fcd1f75c78bd071a174b2793106d0f7b9bcd3576a93dae38f90ea24ceacf91d6c600b5460405161137591815260200190565b60405180910390a1600197505050505050505090565b6002546000906113a3906001600160a01b0316613d1b565b600a546040805160208101909152600e5481529192506000916113d19184916113cb91611611565b90613d00565b905060006113e36009546008546115da565b905060006113ef613c5f565b9050818311156114435760006114086111cd8585613d86565b90508082600101600082825461141e9190615d6f565b9250508190555080600960008282546114379190615d6f565b90915550611488915050565b60006114526111cd8486613d86565b9050808260010160008282546114689190615d5c565b9250508190555080600960008282546114819190615d5c565b9091555050505b50505050565b6001546000906114a6906001600160a01b0316613d1b565b600854604080516020810190915260115481529192506000916114ce9184916113cb91611611565b905060006114e0600754600a54611590565b905060006114ec613c5f565b9050818311156115345760006115056112bb8585613d86565b90508082600201600082825461151b9190615d6f565b9250508190555080600760008282546114379190615d6f565b60006115436112bb8486613d86565b9050808260020160008282546115599190615d5c565b9250508190555080600760008282546114819190615d5c565b6000611588846000015184600160601b85613da1565b949350505050565b604080516020810190915260105481526000906115d1906115b19084611611565b6040805160208101909152600f5481526115cb9086611611565b90613d86565b90505b92915050565b6040805160208101909152600d5481526000906115d1906115fb9084611611565b6040805160208101909152600c5481526115cb90865b60006115d1836000015183600160601b613dfe565b6000611642604080518082019091526000808252602082015290565b600184015463ffffffff9081169084161015610da557505063ffffffff16600090815260209182526040908190208151808301909252546001600160601b0381168252600160601b90046001600160a01b031691810191909152600191565b6001600160a01b03821660009081526019602052604081206116c3818461210b565b915081156116d6576116d68482856121f7565b5092915050565b6003805488919060ff60a81b1916600160a81b83600281111561170257611702615a15565b0217905550855160125560008486101561171d576000611727565b6117278686613d86565b90508284111561177357600061173d8585613d86565b9050600061176260018b600281111561175857611758615a15565b1483600087613eee565b905061176e8382613d00565b925050505b6001600354600160a81b900460ff16600281111561179357611793615a15565b036117bc576117b36117a58883611611565b611192856115cb8b8b611611565b516013556117d9565b6117d4816111926117cd8a87611611565b8990613d86565b516013555b7f53254125669410c9787ebe35314b4811ebcd804ad696379b0eb6c64a340032fa886040516118089190615a2b565b60405180910390a15050505050505050565b6000600354600160a81b900460ff16600281111561183a5761183a615a15565b146118585760405163185079b960e01b815260040160405180910390fd5b33600090815260196020526040812090815460ff16600381111561187e5761187e615a15565b1461189c5760405163293510e360e11b815260040160405180910390fd5b6118a4611025565b506001600160a01b0384166000908152601960205260408120906118c6610cf7565b90506118d2828261210b565b6118ef57604051636ef5bcdd60e11b815260040160405180910390fd5b815460009061190b90600190610100900463ffffffff16615d82565b90506002835460ff16600381111561192557611925615a15565b03611ac1576040805160208101909152600f5481526000906119479088613c0b565b6007549091506119579082613d00565b60075560028401546119699082613d00565b600286015560018401546040805160208101909152600e5481526000916119909190611611565b905060008188106119e85750600185015460006119b06111cd8a85613d86565b600189018190556009549091506119c79082613d00565b600955875460ff191660011788556119e26015601987613fc1565b50611a56565b865460ff191660021787556119fe846001615d9f565b875464ffffffff00191661010063ffffffff928316021788556040805160208101909152600e548152611a33918a90613c0b16565b6001870154909150611a459082613d86565b6001880155611a5660158533614162565b600a54611a639082613d86565b600a5560408051602081019091526010548152611a84906112bb9083611611565b92508260076000828254611a989190615d5c565b9250508190555082876002016000828254611ab39190615d5c565b90915550611c539350505050565b6040805160208101909152600c548152600090611ade9087613c0b565b600954909150611aee9082613d00565b6009556001840154611b009082613d00565b6001860155600284015460408051602081019091526011548152600091611b279190611611565b90506000818910611b7f575060028501546000611b476112bb8b85613d86565b60028901819055600754909150611b5e9082613d00565b600755875460ff19166001178855611b796017601987613fc1565b50611bed565b865460ff19166003178755611b95846001615d9f565b875464ffffffff00191661010063ffffffff9283160217885560408051602081019091526011548152611bca918b90613c0b16565b6002870154909150611bdc9082613d86565b6002880155611bed60178533614162565b600854611bfa9082613d86565b6008556040805160208101909152600d548152611c1b906111cd9083611611565b92508260096000828254611c2f9190615d5c565b9250508190555082876001016000828254611c4a9190615d5c565b90915550505050505b611c5c8461377d565b611c65826120f9565b6001600160a01b0387166000908152601960205260408120805464ffffffffff191681556001810182905560020155611c9e848361210b565b15611cbc5760405163522007a560e01b815260040160405180910390fd5b600254611cd3906001600160a01b031633876141a0565b600154611cea906001600160a01b031633886141a0565b8354600285015460018601546040516001600160a01b038b169333937f5640888abc8e397bce303a7cd7c161b313688acc5bc6b72248e052eac57468bf93611d379360ff90931692615dbc565b60405180910390a350505050505050565b6000600354600160a81b900460ff166002811115611d6857611d68615a15565b03611d86576040516303ca9f4d60e11b815260040160405180910390fd5b336000908152601960205260408082208151608081019092528054829060ff166003811115611db757611db7615a15565b6003811115611dc857611dc8615a15565b81528154610100900463ffffffff166020820152600182015460408201526002909101546060909101529050600081516003811115611e0957611e09615a15565b03611e27576040516322192de760e21b815260040160405180910390fd5b6000806001600354600160a81b900460ff166002811115611e4a57611e4a615a15565b03611f0857600283516003811115611e6457611e64615a15565b03611e8257604051637bf6baff60e01b815260040160405180910390fd5b606083015160408051602081019091526011548152600091611ed491611ec291611eac9190611611565b6040805160208101909152601254815290613c0b565b6115cb866040015187606001516115da565b60408051602081019091526013548152909150611ef19082611611565b6002546001600160a01b031693509150611fb39050565b600383516003811115611f1d57611f1d615a15565b03611f3b576040516309772f7760e41b815260040160405180910390fd5b60408084015181516020808201845260125482528351908101909352600e548352600092611f8492611f7292909161117e91613b8d565b6115cb86606001518760400151611590565b60408051602081019091526013548152909150611fa19082611611565b6001546001600160a01b031693509150505b336000818152601960205260408120805464ffffffffff191681556001810182905560020155611fe790859084908461422c565b6040518181526001600160a01b0383169033907ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285049060200160405180910390a350505050565b60006120456040518060200160405280600081525090565b61204d610cf7565b9050612057611025565b61205f579091565b60008061206d601582611626565b9150915081156120a65760006120878260200151856116a1565b90508080156120a2575060208201516001600160a01b031633145b9450505b6120b260176000611626565b909250905081156120f35760006120cd8260200151856116a1565b905084806120ef57508080156120ef575060208201516001600160a01b031633145b9450505b50509091565b612102816142c6565b6107148161438b565b600080806002855460ff16600381111561212757612127615a15565b0361216b5761213e85600201548660010154611590565b60018601546040805160208101909152600e5481529193506121649161117e9087613b8d565b90506121d1565b6003855460ff16600381111561218357612183615a15565b036121c6576121a461219d866001015487600201546115da565b8590611611565b6002860154604080516020810190915260115481529193506121649190611611565b6000925050506115d4565b60045460601b60ff60601b1660006121e9848461444b565b919091119695505050505050565b6002825460ff16600381111561220f5761220f615a15565b0361236757600061222883600201548460010154611590565b9050600061223a600754600a54611590565b600854604080516020810190915260115481529192506000916122629185916113cb91611611565b90508181111561235f5760006122788284613d86565b905060006122868683613c0b565b60018801546040805160208101909152600e5481529192506000916122aa91611611565b9050808211156122b8578091505b6122c28284614478565b6040805160208101909152600e5481526000906122df9084613c0b565b60018a01549091506122f19082613d86565b60018a0155600a546123039082613d86565b600a5560408051602081019091526010548152600090612332906112bb9061232b9085611611565b8790613d00565b60028b01549091506123449082613d86565b60028b01556007546123569082613d86565b60075550505050505b5050506124e8565b6003825460ff16600381111561237f5761237f615a15565b036124cf576000612398836001015484600201546115da565b905060006123aa6009546008546115da565b600a546040805160208101909152600e5481529192506000916123d29185916113cb91611611565b90508181111561235f5760006123e88284613d86565b905060006123f68683611611565b60028801546040805160208101909152601154815291925060009161241a91611611565b905080821115612428578091505b6124328284614542565b6040805160208101909152601154815260009061244f9084613c0b565b60028a01549091506124619082613d86565b60028a01556008546124739082613d86565b6008556040805160208101909152600d54815260009061249b906111cd9061232b9085611611565b60018b01549091506124ad9082613d86565b60018b01556009546124bf9082613d86565b60095550505050505050506124e8565b604051631a04c6d360e31b815260040160405180910390fd5b6124f28383614600565b505050565b8260000361251857604051631f2a200560e01b815260040160405180910390fd5b6000815460ff16600381111561253057612530615a15565b0361254157805460ff191660011781555b6040805160208101909152600e54815260018201546002835460ff16600381111561256e5761256e615a15565b036126d057600061257f8383611611565b905060008187106126535760006125968884613d86565b90508288146125dd576006546001600160b81b03166125be6125b78361490f565b8990611611565b11156125dd57604051632795088960e11b815260040160405180910390fd5b8554612606906019906125fd90600190610100900463ffffffff16615d82565b60159190613fc1565b6040805160208101909152600c5481526000906126239083613c0b565b875460ff19166001908117895588018190556009548694509091506126489082613d00565b6009555061266f9050565b61265d8488613c0b565b90506126698382613d86565b60018601555b60408051602081019091526010548152600090612690906112bb9084611611565b60028701549091506126a29082613d86565b6002870155600a546126b49083613d86565b600a556007546126c49082613d86565b6007555061274e915050565b6006546001600160b81b03166126ef6126e88761490f565b8690611611565b111561270e57604051632795088960e11b815260040160405180910390fd5b6040805160208101909152600c54815260009061272b9087613c0b565b90506127378282613d00565b60018501556009546127499082613d00565b600955505b600254612765906001600160a01b031633876141a0565b8254600184015460405133927fa6038bcb866df255f5b5fe46dabc103bbdda6484349402a7f69b502240f139e5926127a3928a9260ff169190615ddb565b60405180910390a25050505050565b6006546001600160b81b03166127ca61219d8761490f565b11156127e957604051632795088960e11b815260040160405180910390fd5b6127f4828583614946565b60028201546001830154600061280a82846115da565b6005549091506001600160b81b031681101561283957604051634edec39960e01b815260040160405180910390fd5b50600061284b8789600160601b613dfe565b9050600061285c6001838b88614ba8565b9050600061286a828b614c88565b60045490915060009061288d90600160381b900462ffffff1684620f4240613dfe565b905061289881614c99565b60006128bd6128a78584613d00565b6040805160208101909152601154815290613c0b565b90506128c98782613d00565b60028a01556008546128db9082613d00565b6008556040805160208101909152600d54815260009061290a906111cd906129039085611611565b8f90613d00565b90506129168782613d00565b60018b01556009546129289082613d00565b60095560018a5460ff16600381111561294357612943615a15565b036129a3578954610100900463ffffffff161561297357604051632230814560e11b815260040160405180910390fd5b604080518082019091526000815233602082015261299690601790601990614d15565b50895460ff19166003178a555b6129ad8a8c61210b565b156129cb5760405163522007a560e01b815260040160405180910390fd5b604080518e8152602081018690529081018390526060810182905233907fa3194197f96c6af8d04f5de4d969d3d7dc126db2fa74e7091f2c87e6a50be129906080015b60405180910390a250505050505050505050505050565b612a30828583614dce565b600182015460028301546000612a468284611590565b600554909150612a609087906001600160b81b0316611611565b811015612a8057604051634edec39960e01b815260040160405180910390fd5b506000612a928789600160601b613dfe565b90506000612aa360008a8488613eee565b90506000612ab1828b614c88565b600454909150600090612ad490600160381b900462ffffff1684620f4240613dfe565b90506000612ae28483613d86565b6006549091506001600160b81b0316612afa82615035565b1115612b1957604051632795088960e11b815260040160405180910390fd5b6040805160208101909152600e548152600090612b36908e613c0b565b9050612b428882613d00565b60018b0155600a54612b549082613d00565b600a5560408051602081019091526010548152600090612b83906112bb90612b7c9085611611565b8590613d00565b9050612b8f8882613d00565b60028c0155600754612ba19082613d00565b600755612bad84614c99565b60018b5460ff166003811115612bc557612bc5615a15565b03612c25578a54610100900463ffffffff1615612bf557604051632230814560e11b815260040160405180910390fd5b6040805180820190915260008152336020820152612c1890601590601990614d15565b508a5460ff19166002178b555b612c2f8b8d61210b565b15612c4d5760405163522007a560e01b815260040160405180910390fd5b604080518f8152602081018790529081018290526060810183905233907fa7c8eea95b406faff8384cbf8d7fe933d25688fb428520ee12576a8bca0eea2d9060800160405180910390a25050505050505050505050505050565b81600003612cc857604051631f2a200560e01b815260040160405180910390fd5b6000815460ff166003811115612ce057612ce0615a15565b03612cf157805460ff191660011781555b6040805160208101909152601154815260028201546003835460ff166003811115612d1e57612d1e615a15565b03612e76576000612d2f8383611611565b90506000818610612df9576000612d468784613d86565b9050828714612d83576006546001600160b81b0316612d6482615035565b1115612d8357604051632795088960e11b815260040160405180910390fd5b8554612dac90601990612da390600190610100900463ffffffff16615d82565b60179190613fc1565b6040805160208101909152600f548152600090612dc99083613c0b565b875460ff1916600117885560028801819055600754869450909150612dee9082613d00565b60075550612e159050565b612e038487613c0b565b9050612e0f8382613d86565b60028601555b6040805160208101909152600d548152600090612e36906111cd9084611611565b6001870154909150612e489082613d86565b6001870155600854612e5a9083613d86565b600855600954612e6a9082613d86565b60095550612eea915050565b6006546001600160b81b0316612e8b85615035565b1115612eaa57604051632795088960e11b815260040160405180910390fd5b6040805160208101909152600f548152600090612ec79086613c0b565b9050612ed38282613d00565b6002850155600754612ee59082613d00565b600755505b600154612f01906001600160a01b031633866141a0565b8254600284015460405133927f674eb50a563a8d71e963ec32b215164a31e83cb53940ef8198fcf8f2e3a0e0be92612f3f92899260ff169190615ddb565b60405180910390a250505050565b83600003612f6e57604051631f2a200560e01b815260040160405180910390fd5b805460ff166000816003811115612f8757612f87615a15565b03612fa5576040516322192de760e21b815260040160405180910390fd5b6002816003811115612fb957612fb9615a15565b03612fd757604051631a04c6d360e31b815260040160405180910390fd5b60018083015490600090836003811115612ff357612ff3615a15565b14613002578360020154613005565b60005b9050600061301383836115da565b905060008080838b1061303157505050600285015481901584613051565b6040805160208101909152600c5481528b935061304e9084613c0b565b90505b600387600381111561306557613065615a15565b036130ce57604080516020810190915260115481526000906130879087611611565b90506130938585613d86565b6005546130ad906001600160b81b03166113cb8d85613c0b565b11156130cc57604051634edec39960e01b815260040160405180910390fd5b505b6130d88682613d86565b60018901556009546130ea9082613d86565b6009556130f7888a61210b565b156131155760405163522007a560e01b815260040160405180910390fd5b811561314257336000908152601960205260408120805464ffffffffff1916815560018101829055600201555b60025461315b908b906001600160a01b0316338661422c565b604080518481526020810183905233917f84fc81d1b98b7740216df0055337b83537c88efc18207fa4631bce54b4e07f8491015b60405180910390a25050505050505050505050565b836000036131c557604051631f2a200560e01b815260040160405180910390fd5b805460ff1660008160038111156131de576131de615a15565b036131fc576040516322192de760e21b815260040160405180910390fd5b600381600381111561321057613210615a15565b0361322e57604051631a04c6d360e31b815260040160405180910390fd5b60028201546000600183600381111561324957613249615a15565b1461325857836001015461325b565b60005b905060006132698383611590565b905060008080838b10613287575050506001850154819015846132a7565b6040805160208101909152600f5481528b93506132a49084613c0b565b90505b60028760038111156132bb576132bb615a15565b0361332c576040805160208101909152600e5481526000906132dd9087611611565b90506132e98585613d86565b60055461330b906133049084906001600160b81b0316613d00565b8c90611611565b111561332a57604051634edec39960e01b815260040160405180910390fd5b505b6133368682613d86565b60028901556007546133489082613d86565b600755613355888a61210b565b156133735760405163522007a560e01b815260040160405180910390fd5b81156133a057336000908152601960205260408120805464ffffffffff1916815560018101829055600201555b6001546133b9908b906001600160a01b0316338661422c565b604080518481526020810183905233917f487ff9253eff8d6ffd939875dc7caf988054404b5f75882a7ce9dc690b6a97bd910161318f565b60008080806002865460ff16600381111561340e5761340e615a15565b0361359757600180549087015460028801546001600160a01b0390921693509060009061343b9083611590565b6040805160208101909152600e54815290915060009061345d90846001611572565b905060006134708b83600160601b613dfe565b905061347f600184848c614ba8565b9750808811156134a25760405163f7b7f0b960e01b815260040160405180910390fd5b6134ac8883614c88565b6004549095506000906134cf90600160381b900462ffffff168a620f4240613dfe565b90506134da81614c99565b6134e48982613d00565b60018c015460408051602081019091526010548152919a50613515916112bb9161350e9190611611565b8b90613d00565b9750505061352e86600754613d8690919063ffffffff16565b600755600a5461353e9084613d86565b600a5560028901546135509087613d86565b60028a015560006001808b018290558a5460ff19168117808c5561357f9190610100900463ffffffff16615d82565b905061358e6015601983613fc1565b50505050613732565b6003865460ff1660038111156135af576135af615a15565b036124cf57600280549087015460018801546001600160a01b039092169350906000906135dc90836115da565b604080516020810190915260115481529091506000906135fe90846001611572565b60045490915060009061362190600160381b900462ffffff1683620f4240613dfe565b9050600061362f8383613d00565b90506000613642600160601b838f613dfe565b9050613651600086848e614ba8565b9950808a11156136745760405163f7b7f0b960e01b815260040160405180910390fd5b61367e828b614c88565b965061368983614c99565b60028c01546040805160208101909152600d5481526136b6916111cd916136af91611611565b8c90613d00565b6009549099506136c7915089613d86565b6009556008546136d79086613d86565b60085560018b01546136e99089613d86565b60018c810191909155600060028d018190558c5460ff19168217808e55909161371c91610100900463ffffffff16615d82565b905061372b6017601983613fc1565b5050505050505b60408051858152602081018390529081018490526001600160a01b0383169033907f13a9b207a6235519f908e828190fa2f938b5e52c7888b90b98b87125caebde6e90606001611d37565b6003815460ff16600381111561379557613795615a15565b036137f8576001810154604080516020810190915260125481526000916137c9916137bf91611611565b836002015461506c565b82549091506000906137e890600190610100900463ffffffff16615d82565b90506114886017601983856150b1565b6002815460ff16600381111561381057613810615a15565b0361071457600281015460018201546040805160208101909152601254815260009261384692909161384191611611565b61506c565b825490915060009061386590600190610100900463ffffffff16615d82565b90506114886015601983856150b1565b6001600160a01b03851661389c57604051632635240760e21b815260040160405180910390fd5b6001600160a01b0384166138c357604051632635240760e21b815260040160405180910390fd5b6001600160a01b0383166138ea57604051632635240760e21b815260040160405180910390fd5b60008054336001600160a01b0319918216179091556001805482166001600160a01b03888116919091179091556002805483168783161790556003805490921690851617905561393981610e52565b613941613a80565b51600c5561394d613a80565b51600e55613959613a80565b51600f55613965613a80565b5160115542600b55613975610cf7565b516012556000805463ffffffff60a01b1916600160a01b63ffffffff85160217815561399f613c5f565b805460ff19166001179055505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516139dc9190615e21565b60006040518083038185875af1925050503d8060008114613a19576040519150601f19603f3d011682016040523d82523d6000602084013e613a1e565b606091505b50509050806124f25760405162461bcd60e51b815260206004820152600360248201526253544560e81b60448201526064015b60405180910390fd5b604080516020810190915260008152613a78600160601b8484613dfe565b815292915050565b6040805160208101909152600160601b815290565b60408051602081019091526000815282518251613a789190600160601b90613dfe565b60408051602081019091526000815282518251613a789190613d00565b604080516020810190915260008082528351613af690600160601b90615d5c565b9050600160601b8110613b1c57604051632635240760e21b815260040160405180910390fd5b600160601b6000818160038710613b34576003613b36565b865b905060005b818114613b72578060010186828a030281613b5857613b58615e3d565b049350600160601b83850204948501949250600101613b3b565b50506040805160208101909152928352509095945050505050565b60408051602081019091526000815282518251613a789190600160601b613dfe565b60408051602081019091526000815282518251613a789190613d86565b6040805160208101909152600c548152613be69082613b8d565b51600c556040805160208101909152600d548152613c049082613b8d565b51600d5550565b60006115d1600160601b838560000151613dfe565b6040805160208101909152600f548152613c3a9082613b8d565b51600f5560408051602081019091526010548152613c589082613b8d565b5160105550565b6000601960008060009054906101000a90046001600160a01b03166001600160a01b031663ecc456fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdb9190615bfb565b6001600160a01b03166001600160a01b03168152602001908152602001600020905090565b600082613d0d8382615d6f565b91508110156115d457600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613d62573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d49190615d43565b600082613d938382615d5c565b91508111156115d457600080fd5b600080613daf868686613dfe565b90506001836002811115613dc557613dc5615a15565b148015613de2575060008480613ddd57613ddd615e3d565b868809115b15613df557613df2600182615d6f565b90505b95945050505050565b6000808060001985870985870292508281108382030391505080600003613e3857838281613e2e57613e2e615e3d565b0492505050613ee7565b808411613e7f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401613a51565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080613ef9615167565b905060008087613f1b576002546001546001600160a01b039182169116613f2f565b6001546002546001600160a01b0391821691165b91509150613f3e8284896151bb565b6040516365a8c7a960e11b81526001600160a01b0384169063cb518f5290613f72908890869086908d908d90600401615e53565b6020604051808303816000875af1158015613f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb59190615d43565b98975050505050505050565b600183015463ffffffff9081169082168111613ff057604051632230814560e11b815260040160405180910390fd5b6000613ffd600183615d82565b60018601805463ffffffff191663ffffffff83811691821790925590851660008181526020898152604080832054600160601b90046001600160a01b03168352908990529020805464ffffffff0019169055919250146141445763ffffffff838116600081815260208890526040808220805494861683529082209290915281546001600160601b039081166001600160601b03198516811783559254600160601b908190046001600160a01b0316029092179055166140be846001615d9f565b63ffffffff808616600081815260208a8152604080832080546001600160a01b03600160601b9091041684528b83529083208054969095166101000264ffffffff00199096169590951790935552879052546001600160601b0390811690821610156141355761412f86868661526f565b50614142565b6141408686866152e3565b505b505b63ffffffff1660009081526020949094525050604082209190915550565b63ffffffff9091166000908152602092909252604090912080546001600160a01b03909216600160601b026001600160601b03909216919091179055565b803410614220576141af610678565b6001600160a01b0316836001600160a01b03160361422057826001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561420257600080fd5b505af1158015614216573d6000803e3d6000fd5b5050505050505050565b6124f2838330846153f0565b83156142bb5761423a610678565b6001600160a01b0316836001600160a01b0316036142bb57604051632e1a7d4d60e01b8152600481018290526001600160a01b03841690632e1a7d4d90602401600060405180830381600087803b15801561429457600080fd5b505af11580156142a8573d6000803e3d6000fd5b505050506142b682826139b2565b611488565b6114888383836154fa565b6009546000036142e85750601480546001600160801b0316600160e01b179055565b60006143026142fb6009546008546115da565b8390611611565b6008546040805160208101909152601154815291925060009161432491611611565b90506000614340600160601b8461433b8186613d86565b613dfe565b60045490915060601b60ff60601b166001600160801b03821681116143655780614367565b815b601480546001600160801b03928316600160801b0292169190911790555050505050565b6007546000036143ae5750601480546001600160801b031916600160601b179055565b60006143be600754600a54611590565b600a546040805160208101909152600e5481529192506000916143e6919061117e9086613b8d565b905060006143fd600160601b8461433b8186613d86565b60045490915060601b60ff60601b166001600160801b03821681116144225780614424565b815b601480546001600160801b0319166001600160801b03929092169190911790555050505050565b60008183111561446f57614468600160601b8461433b8582615d5c565b90506115d4565b506000196115d4565b61449d61448783600854613a5a565b6040805160208101909152600d54815290613ab8565b51600d556008546144c9906144b3908390613a5a565b6040805160208101909152601154815290613baf565b516011556040805160208101909152600160301b815251601154101561450257604051630a4a405760e01b815260040160405180910390fd5b7f1429071374b4a9149ad4dce390146b5e17e416f3e1da13ecc5703886089c90886003838360405161453693929190615dbc565b60405180910390a15050565b61456761455183600a54613a5a565b6040805160208101909152601054815290613ab8565b51601055600a546145939061457d908390613a5a565b6040805160208101909152600e54815290613baf565b51600e556040805160208101909152600160301b815251600e5410156145cc57604051630a4a405760e01b815260040160405180910390fd5b7f1429071374b4a9149ad4dce390146b5e17e416f3e1da13ecc5703886089c90886002838360405161453693929190615dbc565b60006002825460ff16600381111561461a5761461a615a15565b0361478557600061463383600201548460010154611590565b60018401546040805160208101909152600e54815291925060009161465791611611565b9050600082156146dd5760006146a661467885614672610c0a565b90613c0b565b60045461117e9061469890600160501b900462ffffff16620f4240615e82565b62ffffff16620f4240613a5a565b90506146cd60018583600060149054906101000a900463ffffffff1663ffffffff16613eee565b91506146d98483614c88565b9450505b60408051602081019091526000815282821061470a576147036111976111848486613d86565b905061472b565b61472861471a6111848585613d86565b614722613a80565b90613baf565b90505b61473481613bcc565b600286015460075461474591613d86565b6007556001860154600a5461475991613d86565b600a55855461477c906019906125fd90600190610100900463ffffffff16615d82565b5050505061489f565b6000614799836001015484600201546115da565b6002840154604080516020810190915260115481529192506000916147bd91611611565b9050600082156148095760006147d86146788561117e610c0a565b600080549192506147f99186908490600160a01b900463ffffffff16613eee565b91506148058285614c88565b9450505b6040805160208101909152600081528282106148365761482f61119761128d8486613d86565b9050614849565b61484661471a61128d8585613d86565b90505b61485281613c20565b600186015460095461486391613d86565b600955600286015460085461487791613d86565b600855855461489a90601990612da390600190610100900463ffffffff16615d82565b505050505b6001600160a01b038316600081815260196020526040808220805464ffffffffff191681556001810183905560020191909155517f535b19c900348d4fb84ebdf2e9e9dcdb8debe1de2cd9eae1f07d4020aab4311f906149029084815260200190565b60405180910390a2505050565b600a546040805160208101909152600e5481526000916115d491614934916001611572565b6115cb846113cb6009546008546115da565b825460ff16600081600381111561495f5761495f615a15565b0361497d576040516322192de760e21b815260040160405180910390fd5b600381600381111561499157614991615a15565b0361499c5750505050565b600060028260038111156149b2576149b2615a15565b6002870154911491506000826149c95760006149cf565b86600101545b905060006149dd8383611590565b9050806000036149f1575050505050505050565b600454600090614a1190600160381b900462ffffff1683620f4240613dfe565b90506000614a1f8383613d86565b90506000614a3e600183614a38600160601b868f613dfe565b8c613eee565b9050614a4983614c99565b6040805160208101909152600e548152600090614a669087611611565b90506000614a776111cd8484613d86565b90508760076000828254614a8b9190615d5c565b9091555050600060028e0181905560098054839290614aab908490615d6f565b90915550508815614b475786600a6000828254614ac89190615d5c565b909155505060018d81018290558d5460ff19168117808f55600091614af791610100900463ffffffff16615d82565b9050614b066015601983613fc1565b60408051848152602081018a905233917fd5f4fcdc9767d669ab0e149c06e2afe501e8a40c3a238fe1a3a43e2719490067910160405180910390a250614b61565b808d6001016000828254614b5b9190615d6f565b90915550505b60408051858152602081018590529081018990526060810182905233907fe665269e8373d815787a9e98b1f91f51d05d3b4fdd40870d42f4049989bfcac390608001612a0e565b600080614bb3615167565b905060008087614bd5576002546001546001600160a01b039182169116614be9565b6001546002546001600160a01b0391821691165b91509150614bf88284896151bb565b604051635ef0652360e11b81526001600160a01b0384169063bde0ca4690614c2c908890869086908d908d90600401615e53565b6020604051808303816000875af1158015614c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c6f9190615d43565b9350614c7d828460006151bb565b505050949350505050565b60006115d183600160601b84613dfe565b6001546000546040805163331af97960e21b81529051610714936001600160a01b0390811693169163cc6be5e49160048083019260209291908290030181865afa158015614ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d0f9190615bfb565b836154fa565b60018084015463ffffffff1660008181526020868152604082208551918601516001600160a01b0316600160601b026001600160601b0390921691909117905591614d61908290615d9f565b6020808501516001600160a01b031660009081529086905260409020805463ffffffff929092166101000264ffffffff0019909216919091179055614da7816001615d9f565b60018601805463ffffffff191663ffffffff92909216919091179055613df585858361526f565b825460ff166000816003811115614de757614de7615a15565b03614e05576040516322192de760e21b815260040160405180910390fd5b6002816003811115614e1957614e19615a15565b03614e245750505050565b60006003826003811115614e3a57614e3a615a15565b600187015491149150600082614e51576000614e57565b86600201545b90506000614e6583836115da565b905080600003614e79575050505050505050565b6000614e96600083614e908b86600160601b613dfe565b8a613eee565b600454909150600090614eb990600160381b900462ffffff1683620f4240613dfe565b9050614ec481614c99565b6000614ed08383613d86565b60408051602081019091526011548152909150600090614ef09087611611565b90506000614f016112bb8484613d86565b90508760096000828254614f159190615d5c565b9091555050600060018e0181905560078054839290614f35908490615d6f565b90915550508815614fd4578660086000828254614f529190615d5c565b909155505060028d018190558c5460ff19166001908117808f55600091614f849163ffffffff61010090910416615d82565b9050614f936017601983613fc1565b60408051848152602081018a905233917ff844f661d542f3ab6eddd747fe90ae1a456fdef7e6cec663615c585c198e4f57910160405180910390a250614fee565b808d6002016000828254614fe89190615d6f565b90915550505b60408051878152602081018590529081018990526060810182905233907f2c66db90b5e6703c0411060ed36b935dc40eefbbec5cb21f8bd28709f830300090608001612a0e565b600854604080516020810190915260115481526000916115d49161505a916001611572565b6115cb846113cb600754600a54611590565b60006001600160601b03831561446857600061508d600160301b8587613dfe565b9050816001600160601b03168111156150a8575090506115d4565b91506115d49050565b600184015460009063ffffffff908116908416106150e257604051632230814560e11b815260040160405180910390fd5b63ffffffff8316600090815260208690526040902080546001600160601b03808516911610156151375780546001600160601b0319166001600160601b03841617815561513086868661526f565b915061515e565b80546001600160601b0319166001600160601b03841617815561515b8686866152e3565b91505b50949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663c31c9c076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261520c84826155f3565b61148857604080516001600160a01b038516602482015260006044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052615265908590615696565b6114888482615696565b6000815b63ffffffff811615611588576000600161528d8184615d82565b63ffffffff848116600090815260208a905260408082205493831690941c918216815292909220549192506001600160601b039081169116106152d05750611588565b6152dc8686848461576b565b9050615273565b6001830154600090829063ffffffff165b81600061530c600183811b6401fffffffe1690615d9f565b905060006153266401fffffffe600187901b166002615d9f565b90508363ffffffff168263ffffffff1610156153735763ffffffff808416600090815260208b905260408082205492851682529020546001600160601b0391821691161115615373578192505b8363ffffffff168163ffffffff1610156153be5763ffffffff808416600090815260208b905260408082205492841682529020546001600160601b03918216911611156153be578092505b8463ffffffff168363ffffffff16036153d95750505061515e565b6153e58989878661576b565b8294505050506152f4565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916154549190615e21565b6000604051808303816000865af19150503d8060008114615491576040519150601f19603f3d011682016040523d82523d6000602084013e615496565b606091505b50915091508180156154c05750805115806154c05750808060200190518101906154c09190615e9e565b6154f25760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b6044820152606401613a51565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916155569190615e21565b6000604051808303816000865af19150503d8060008114615593576040519150601f19603f3d011682016040523d82523d6000602084013e615598565b606091505b50915091508180156155c25750805115806155c25750808060200190518101906155c29190615e9e565b610cf05760405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606401613a51565b6000806000846001600160a01b0316846040516156109190615e21565b6000604051808303816000865af19150503d806000811461564d576040519150601f19603f3d011682016040523d82523d6000602084013e615652565b606091505b509150915081801561567c57508051158061567c57508080602001905181019061567c9190615e9e565b8015613df55750505050506001600160a01b03163b151590565b60006156eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158a59092919063ffffffff16565b905080516000148061570c57508080602001905181019061570c9190615e9e565b6124f25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401613a51565b63ffffffff8083166000908152602086815260408083208151808301835290546001600160601b0380821683526001600160a01b03600160601b9283900481168487015296881686528a855294839020835180850190945254948516835290930490931690830152906157df836001615d9f565b6020808401516001600160a01b031660009081529087905260409020805463ffffffff929092166101000264ffffffff0019909216919091179055615825846001615d9f565b602082810180516001600160a01b0390811660009081529883526040808a20805464ffffffff00191661010063ffffffff978816021790559784168952988252868820935190516001600160601b03918216600160601b918b16820217909455949091168652939094208151919093015191169316909102919091179055565b6060611588848460008585600080866001600160a01b031685876040516158cc9190615e21565b60006040518083038185875af1925050503d8060008114615909576040519150601f19603f3d011682016040523d82523d6000602084013e61590e565b606091505b509150915061591f8783838761592a565b979650505050505050565b60608315615999578251600003615992576001600160a01b0385163b6159925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401613a51565b5081611588565b61158883838151156159ae5781518083602001fd5b8060405162461bcd60e51b8152600401613a519190615ebb565b600060e082840312156159da57600080fd5b50919050565b600060e082840312156159f257600080fd5b6115d183836159c8565b600060208284031215615a0e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310615a3f57615a3f615a15565b91905290565b801515811461071457600080fd5b6001600160a01b038116811461071457600080fd5b600080600080600080600060e0888a031215615a8357600080fd5b8735600a8110615a9257600080fd5b96506020880135955060408801359450606088013593506080880135615ab781615a45565b925060a0880135615ac781615a53565b8092505060c0880135905092959891949750929550565b600060208284031215615af057600080fd5b8135613ee781615a53565b60048110615b0b57615b0b615a15565b9052565b60808101615b1d8287615afb565b63ffffffff8516602083015283604083015282606083015295945050505050565b803563ffffffff81168114615b5257600080fd5b919050565b60008060008060006101608688031215615b7057600080fd5b8535615b7b81615a53565b94506020860135615b8b81615a53565b93506040860135615b9b81615a53565b9250615ba960608701615b3e565b9150615bb887608088016159c8565b90509295509295909350565b60008060408385031215615bd757600080fd5b615be083615b3e565b91506020830135615bf081615a45565b809150509250929050565b600060208284031215615c0d57600080fd5b8151613ee781615a53565b803560ff81168114615b5257600080fd5b803562ffffff81168114615b5257600080fd5b80356001600160b81b0381168114615b5257600080fd5b600060e08284031215615c6557600080fd5b60405160e0810181811067ffffffffffffffff82111715615c9657634e487b7160e01b600052604160045260246000fd5b604052615ca283615c18565b8152615cb060208401615c29565b6020820152615cc160408401615c29565b6040820152615cd260608401615c29565b6060820152615ce360808401615c29565b6080820152615cf460a08401615c3c565b60a0820152615d0560c08401615c3c565b60c08201529392505050565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201615d3c57615d3c615d11565b5060000390565b600060208284031215615d5557600080fd5b5051919050565b818103818111156115d4576115d4615d11565b808201808211156115d4576115d4615d11565b63ffffffff8281168282160390808211156116d6576116d6615d11565b63ffffffff8181168382160190808211156116d6576116d6615d11565b60608101615dca8286615afb565b602082019390935260400152919050565b83815260608101615def6020830185615afb565b826040830152949350505050565b60005b83811015615e18578181015183820152602001615e00565b50506000910152565b60008251615e33818460208701615dfd565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b62ffffff8281168282160390808211156116d6576116d6615d11565b600060208284031215615eb057600080fd5b8151613ee781615a45565b6020815260008251806020840152615eda816040850160208701615dfd565b601f01601f1916919091016040019291505056fea2646970667358221220389a7a328350e5c710cf0f3e29e66b334098eae07a467e337f3b3db2563c6ec364736f6c63430008130033