0 txs
374.3k calls
constructor
constructor()
functions
getAddresses
viewfunction getAddresses() view returns (tuple)
getPendingGovFeesCollateral
viewfunction getPendingGovFeesCollateral(uint8 _collateralIndex) view returns (uint256)
getVaultClosingFeeP
viewfunction getVaultClosingFeeP() view returns (uint8)
hasRole
viewfunction hasRole(address _account, uint8 _role) view returns (bool)
hasRoles
viewfunction hasRoles(address _account, uint8 _roleA, uint8 _roleB) view returns (bool)
validateTriggerCloseOrderCallback
viewfunction validateTriggerCloseOrderCallback(tuple _tradeId, uint8 _orderType, uint64 _open, uint64 _high, uint64 _low) view returns (tuple t, uint8 cancelReason, tuple v)
validateTriggerOpenOrderCallback
viewfunction validateTriggerOpenOrderCallback(tuple _tradeId, uint8 _orderType, uint64 _open, uint64 _high, uint64 _low) view returns (tuple t, uint8 cancelReason, tuple v)
claimPendingGovFees
nonpayablefunction claimPendingGovFees()
closeTradeMarketCallback
nonpayablefunction closeTradeMarketCallback(tuple _a)
decreasePositionSizeMarketCallback
nonpayablefunction decreasePositionSizeMarketCallback(tuple _a)
executeTriggerCloseOrderCallback
nonpayablefunction executeTriggerCloseOrderCallback(tuple _a)
executeTriggerOpenOrderCallback
nonpayablefunction executeTriggerOpenOrderCallback(tuple _a)
increasePositionSizeMarketCallback
nonpayablefunction increasePositionSizeMarketCallback(tuple _a)
initialize
nonpayablefunction initialize(address _govTimelock)
initializeCallbacks
nonpayablefunction initializeCallbacks(uint8 _vaultClosingFeeP)
initializeTreasuryAddress
nonpayablefunction initializeTreasuryAddress(address _treasury)
openTradeMarketCallback
nonpayablefunction openTradeMarketCallback(tuple _a)
setRoles
nonpayablefunction setRoles(address[] _accounts, uint8[] _roles, bool[] _values)
updateLeverageCallback
nonpayablefunction updateLeverageCallback(tuple _a)
updateTreasuryAddress
nonpayablefunction updateTreasuryAddress(address _treasury)
updateVaultClosingFeeP
nonpayablefunction updateVaultClosingFeeP(uint8 _valueP)
events
AccessControlUpdated
event AccessControlUpdated(address target, uint8 role, bool access)
AddressesUpdated
event AddressesUpdated((address gns, address gnsStaking, address treasury) addresses)
BorrowingFeeCharged
event BorrowingFeeCharged(address indexed trader, uint32 indexed index, uint8 indexed collateralIndex, uint256 amountCollateral)
GnsOtcFeeCharged
event GnsOtcFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)
GovFeeCharged
event GovFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)
GTokenFeeCharged
event GTokenFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)
Initialized
event Initialized(uint8 version)
LeverageUpdateExecuted
event LeverageUpdateExecuted((address user, uint32 index) orderId, bool isIncrease, uint8 cancelReason, uint8 indexed collateralIndex, address indexed trader, uint256 pairIndex, uint256 indexed index, uint256 oraclePrice, uint256 collateralDelta, (uint256 newLeverage, uint256 newCollateralAmount, uint256 liqPrice, uint256 govFeeCollateral) values)
LeverageUpdateInitiated
event LeverageUpdateInitiated((address user, uint32 index) orderId, address indexed trader, uint256 indexed pairIndex, uint256 indexed index, bool isIncrease, uint256 newLeverage)
LimitExecuted
event LimitExecuted((address user, uint32 index) orderId, address indexed user, uint32 indexed index, uint32 indexed limitIndex, (address user, uint32 index, uint16 pairIndex, uint24 leverage, bool long, bool isOpen, uint8 collateralIndex, uint8 tradeType, uint120 collateralAmount, uint64 openPrice, uint64 tp, uint64 sl, uint192 __placeholder) t, address triggerCaller, uint8 orderType, uint256 oraclePrice, uint256 marketPrice, uint256 liqPrice, uint256 priceImpactP, int256 percentProfit, uint256 amountSentToTrader, uint256 collateralPriceUsd, bool exactExecution)
MarketCloseCanceled
event MarketCloseCanceled((address user, uint32 index) orderId, address indexed trader, uint256 indexed pairIndex, uint256 indexed index, uint8 cancelReason)
MarketExecuted
event MarketExecuted((address user, uint32 index) orderId, address indexed user, uint32 indexed index, (address user, uint32 index, uint16 pairIndex, uint24 leverage, bool long, bool isOpen, uint8 collateralIndex, uint8 tradeType, uint120 collateralAmount, uint64 openPrice, uint64 tp, uint64 sl, uint192 __placeholder) t, bool open, uint256 oraclePrice, uint256 marketPrice, uint256 liqPrice, uint256 priceImpactP, int256 percentProfit, uint256 amountSentToTrader, uint256 collateralPriceUsd)
MarketOpenCanceled
event MarketOpenCanceled((address user, uint32 index) orderId, address indexed trader, uint256 indexed pairIndex, uint8 cancelReason)
PendingGovFeesClaimed
event PendingGovFeesClaimed(uint8 collateralIndex, uint256 amountCollateral)
PositionSizeDecreaseExecuted
event PositionSizeDecreaseExecuted((address user, uint32 index) orderId, uint8 cancelReason, uint8 indexed collateralIndex, address indexed trader, uint256 pairIndex, uint256 indexed index, bool long, uint256 oraclePrice, uint256 collateralPriceUsd, uint256 collateralDelta, uint256 leverageDelta, (uint256 positionSizeCollateralDelta, uint256 existingPositionSizeCollateral, uint256 existingLiqPrice, uint256 priceAfterImpact, int256 existingPnlCollateral, uint256 borrowingFeeCollateral, uint256 closingFeeCollateral, int256 availableCollateralInDiamond, int256 collateralSentToTrader, uint120 newCollateralAmount, uint24 newLeverage) values)
PositionSizeIncreaseExecuted
event PositionSizeIncreaseExecuted((address user, uint32 index) orderId, uint8 cancelReason, uint8 indexed collateralIndex, address indexed trader, uint256 pairIndex, uint256 indexed index, bool long, uint256 oraclePrice, uint256 collateralPriceUsd, uint256 collateralDelta, uint256 leverageDelta, (uint256 positionSizeCollateralDelta, uint256 existingPositionSizeCollateral, uint256 newPositionSizeCollateral, uint256 newCollateralAmount, uint256 newLeverage, uint256 priceAfterImpact, int256 existingPnlCollateral, uint256 oldPosSizePlusPnlCollateral, uint256 newOpenPrice, uint256 borrowingFeeCollateral, uint256 openingFeesCollateral, uint256 existingLiqPrice, uint256 newLiqPrice) values)
PositionSizeUpdateInitiated
event PositionSizeUpdateInitiated((address user, uint32 index) orderId, address indexed trader, uint256 indexed pairIndex, uint256 indexed index, bool isIncrease, uint256 collateralDelta, uint256 leverageDelta)
ReferralFeeCharged
event ReferralFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)
TriggerFeeCharged
event TriggerFeeCharged(address indexed trader, uint8 indexed collateralIndex, uint256 amountCollateral)
TriggerOrderCanceled
event TriggerOrderCanceled((address user, uint32 index) orderId, address indexed triggerCaller, uint8 orderType, uint8 cancelReason)
VaultClosingFeePUpdated
event VaultClosingFeePUpdated(uint8 valueP)
errors
AboveMax
error AboveMax()
AlreadyExists
error AlreadyExists()
BelowMin
error BelowMin()
BlockOrder
error BlockOrder()
DoesntExist
error DoesntExist()
InitError
error InitError()
InsufficientBalance
error InsufficientBalance()
InvalidAddress
error InvalidAddress()
InvalidAddresses
error InvalidAddresses()
InvalidCollateralIndex
error InvalidCollateralIndex()
InvalidDecreasePositionSizeInput
error InvalidDecreasePositionSizeInput()
InvalidIncreasePositionSizeInput
error InvalidIncreasePositionSizeInput()
InvalidInputLength
error InvalidInputLength()
NewPositionSizeSmaller
error NewPositionSizeSmaller()
NotAllowed
error NotAllowed()
NotAuthorized
error NotAuthorized()
Overflow
error Overflow()
Paused
error Paused()
PendingOrderNotOpen
error PendingOrderNotOpen()
UnsupportedChain
error UnsupportedChain()
WrongAccess
error WrongAccess()
WrongIndex
error WrongIndex()
WrongLength
error WrongLength()
WrongOrder
error WrongOrder()
WrongOrderType
error WrongOrderType()
WrongParams
error WrongParams()
WrongTradeType
error WrongTradeType()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6155dd80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806392dd2940116100d8578063b9c972291161008c578063cbc8e6f211610066578063cbc8e6f214610374578063e1d8871814610387578063ec98ec831461039a57600080fd5b8063b9c972291461033b578063c4d66de81461034e578063c61a7ad41461036157600080fd5b8063a39fac12116100bd578063a39fac1214610289578063a5b26e461461030e578063a96ae63b1461032857600080fd5b806392dd29401461025357806395a8c58d1461026657600080fd5b80633b0c59381161012f57806363a21e541161011457806363a21e541461020b578063841e45611461021e57806385ea3c781461023157600080fd5b80633b0c5938146101e55780634b0b5629146101f857600080fd5b806313ebc2c61161016057806313ebc2c6146101a45780632c6fe6d1146101b757806336c3dba2146101dd57600080fd5b8063101e65031461017c57806310d8e75414610191575b600080fd5b61018f61018a366004614391565b6103ad565b005b61018f61019f36600461454e565b610512565b61018f6101b236600461454e565b61053e565b6101ca6101c5366004614609565b610567565b6040519081526020015b60405180910390f35b61018f610578565b61018f6101f336600461454e565b61058b565b61018f61020636600461454e565b6105b4565b61018f610219366004614626565b6105dd565b61018f61022c366004614626565b6106ca565b61024461023f366004614650565b6106e2565b6040516101d49392919061480f565b61018f61026136600461454e565b6107ca565b6102796102743660046148b8565b6107f3565b60405190151581526020016101d4565b6102dc604080516060810182526000808252602082018190529181019190915250604080516060810182526003546001600160a01b03908116825260045481166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015182169083015292820151909216908201526060016101d4565b61031661084a565b60405160ff90911681526020016101d4565b610244610336366004614650565b610859565b6102796103493660046148ed565b61092f565b61018f61035c366004614626565b6109e0565b61018f61036f36600461454e565b610b16565b61018f610382366004614609565b610b3f565b61018f61039536600461454e565b610b53565b61018f6103a8366004614609565b610b7c565b60006103b881610c1e565b85841415806103c75750858214155b156103e557604051637db491eb60e01b815260040160405180910390fd5b60005b8681101561050857600086868381811061040457610404614932565b90506020020160208101906104199190614948565b600381111561042a5761042a6146c0565b14801561046557503388888381811061044557610445614932565b905060200201602081019061045a9190614626565b6001600160a01b0316145b1561048357604051631eb49d6d60e11b815260040160405180910390fd5b61050088888381811061049857610498614932565b90506020020160208101906104ad9190614626565b8787848181106104bf576104bf614932565b90506020020160208101906104d49190614948565b8686858181106104e6576104e6614932565b90506020020160208101906104fb9190614971565b610c45565b6001016103e8565b5050505050505050565b33301461053257604051631b17ff5560e21b815260040160405180910390fd5b61053b81610ce7565b50565b33301461055e57604051631b17ff5560e21b815260040160405180910390fd5b61053b81610e5a565b6000610572826112b5565b92915050565b600161058381610c1e565b61053b6112db565b3330146105ab57604051631b17ff5560e21b815260040160405180910390fd5b61053b81611439565b3330146105d457604051631b17ff5560e21b815260040160405180910390fd5b61053b816117ab565b600054600f90610100900460ff161580156105ff575060005460ff8083169116105b6106675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff8316176101001790556106848261201f565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60006106d581610c1e565b6106de8261201f565b5050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915260006107ab60405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600063ffffffff168152602001600081525090565b6107b888888888886120d0565b9250925092505b955095509592505050565b3330146107ea57604051631b17ff5560e21b815260040160405180910390fd5b61053b8161279c565b6001600160a01b03821660009081526002602052604081208183600381111561081e5761081e6146c0565b600381111561082f5761082f6146c0565b815260208101919091526040016000205460ff169392505050565b60006108546128db565b905090565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152600061092260405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600063ffffffff168152602001600081525090565b6107b888888888886128ee565b6001600160a01b03831660009081526002602052604081208184600381111561095a5761095a6146c0565b600381111561096b5761096b6146c0565b815260208101919091526040016000205460ff16806109d657506001600160a01b0384166000908152600260205260408120908360038111156109b0576109b06146c0565b60038111156109c1576109c16146c0565b815260208101919091526040016000205460ff165b90505b9392505050565b600054610100900460ff1615808015610a005750600054600160ff909116105b80610a1a5750303b158015610a1a575060005460ff166001145b610a7d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065e565b6000805460ff191660011790558015610aa0576000805461ff0019166101001790555b6001600160a01b038216610ac757604051632c1c702960e21b815260040160405180910390fd5b610ad48260006001610c45565b80156106de576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016106be565b333014610b3657604051631b17ff5560e21b815260040160405180910390fd5b61053b81612c15565b6001610b4a81610c1e565b6106de82612ead565b333014610b7357604051631b17ff5560e21b815260040160405180910390fd5b61053b81612f21565b600054600990610100900460ff16158015610b9e575060005460ff8083169116105b610c015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065e565b6000805461ffff191660ff83161761010017905561068482613060565b610c2833826107f3565b61053b57604051631b17ff5560e21b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604081208291846003811115610c7157610c716146c0565b6003811115610c8257610c826146c0565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8d7fdec37f50c07219a6a0859420936836eb9254bf412035e3acede18b8b093d838383604051610cda9392919061498e565b60405180910390a1505050565b6000306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906149dc565b6002811115610d5c57610d5c6146c0565b14610d7a576040516313d0ff5960e31b815260040160405180910390fd5b805160405163c6e729bb60e01b8152600091309163c6e729bb91610da0916004016149f9565b61026060405180830381865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190614bc4565b9050610ded81613069565b60405163ec1bfead60e01b815273f9e09e7c739e8397833b8724ecf41c4ba5f34ec59063ec1bfead90610e269084908690600401614d06565b60006040518083038186803b158015610e3e57600080fd5b505af4158015610e52573d6000803e3d6000fd5b505050505050565b6000306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906149dc565b6002811115610ecf57610ecf6146c0565b14610eed576040516313d0ff5960e31b815260040160405180910390fd5b6000610efc826000015161308b565b9050610f0781613069565b6000816000015190506000806000610f3a8487604001516001600160401b031688602001518860c0015161ffff1661318c565b6001600160401b03821661012088015291945092509050600081600c811115610f6557610f656146c0565b0361107857610f7484866135eb565b93506000610f858560c00151613828565b9050846020015163ffffffff1685600001516001600160a01b03167f26d428c63a1c5161a75dbe15e1e65bc7bf932acb203db2a47df55b16a60d35b189600001518860018c604001518b610120015173a3be4e1d4677b08e95f540f685249f2034561a226311f07d6e8e60016040518363ffffffff1660e01b815260040161100e929190614d8e565b602060405180830381865af415801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104f9190614dad565b8c6000808c60405161106a9a99989796959493929190614dc6565b60405180910390a350610e52565b60c08401518451604080870151905163e5c9206d60e01b815260ff90931660048401526001600160a01b03909116602483015261ffff1660448201526000606482015273a3be4e1d4677b08e95f540f685249f2034561a229063e5c9206d9060840160006040518083038186803b1580156110f257600080fd5b505af4158015611106573d6000803e3d6000fd5b50505060c0850151855160408088015190516315078f9760e31b815260ff90931660048401526001600160a01b03909116602483015261ffff1660448201526000915073a3be4e1d4677b08e95f540f685249f2034561a229063a83c7cb890606401602060405180830381865af4158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a99190614dad565b60c08601518651604051639611f34b60e01b815260ff90921660048301526001600160a01b031660248201526044810182905290915073a3be4e1d4677b08e95f540f685249f2034561a2290639611f34b9060640160006040518083038186803b15801561121657600080fd5b505af415801561122a573d6000803e3d6000fd5b50505060c0860151865161010088015161125893506112539085906001600160781b0316614e58565b613898565b846040015161ffff1685600001516001600160a01b03167f377325122a5a86014bf0a307dc0c8eab0bf1e2858ff6e1522a7551e6df2537828960000151856040516112a4929190614e6b565b60405180910390a350505050505050565b60006112bf6138a5565b60ff909216600090815260019290920160205250604090205490565b60006112e56138b0565b600201546001600160a01b03169050806113125760405163d92e233d60e01b815260040160405180910390fd5b6000306001600160a01b031663a3e15d096040518163ffffffff1660e01b8152600401602060405180830381865afa158015611352573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113769190614e99565b905060015b8160ff168160ff16116114345760006113926138a5565b60ff831660009081526001919091016020526040902054905080156114235760006113bb6138a5565b60010160008460ff1660ff168152602001908152602001600020819055506113e682858360006138ba565b6040805160ff84168152602081018390527f0b92b2d73b4c8443d11985dbf6a8cfdfc03b93d6679aab94b7d4fb5842dd0cb0910160405180910390a15b5061142d81614eb6565b905061137b565b505050565b6000306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d91906149dc565b60028111156114ae576114ae6146c0565b146114cc576040516313d0ff5960e31b815260040160405180910390fd5b60006114db826000015161308b565b90506114e681613069565b600080600061153b60405180604001604052808660000151600001516001600160a01b0316815260200186600001516020015163ffffffff168152508560800151876060015188608001518960a001516128ee565b91945092509050600082600c811115611556576115566146c0565b036117525760208381015163ffffffff908116610100840190815260408051808201825287516001600160a01b039081168252925184169481019485529051630887497d60e21b815290519091166004820152915116602482015260006044820152309063221d25f490606401600060405180830381600087803b1580156115dd57600080fd5b505af11580156115f1573d6000803e3d6000fd5b5050505060208101516001600160401b0316610120840152600060e084015261161a83856135eb565b6040516308f83eb760e11b815290935073a3be4e1d4677b08e95f540f685249f2034561a22906311f07d6e90611657908690600190600401614d8e565b602060405180830381865af4158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190614dad565b604082015260c08301516116ab90613828565b81608001818152505080610100015163ffffffff16836020015163ffffffff1684600001516001600160a01b03167f33b71dccfeb2f3e0f4ed2a9f7c05255d8c5aa57936b542245a5e63c93830159788600001518789602001518a608001518860e001518b61012001518a604001518b61012001516000808e608001518f60a001516040516117459c9b9a99989796959493929190614ed5565b60405180910390a46117a4565b83602001516001600160a01b03167f0766d5a97748cddd280198f717da563fe9aad4d38e5bd546fe56d04fbc68a3cd866000015186608001518560405161179b93929190614f75565b60405180910390a25b5050505050565b6002306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180f91906149dc565b6002811115611820576118206146c0565b0361183e576040516313d0ff5960e31b815260040160405180910390fd5b600061184d826000015161308b565b905061185881613069565b8051805160209091015160009161186e9161399a565b825180516020909101519192506000916118889190613a7d565b905060008073a3be4e1d4677b08e95f540f685249f2034561a226344ef50f9604051806080016040528087815260200189604001516001600160401b031681526020018960200151815260200173a3be4e1d4677b08e95f540f685249f2034561a2263feec5b5b8961010001518a606001516040518363ffffffff1660e01b81526004016119309291906001600160781b0392909216825262ffffff16602082015260400190565b602060405180830381865af415801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190614dad565b8152506040518263ffffffff1660e01b81526004016119909190614fde565b606060405180830381865af41580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d19190614fed565b5091509150600080866000015161012001516001600160401b0316905060006103e860646000886060015161ffff1611611a0d576103e8611a13565b87606001515b611a219061ffff168561501b565b611a2b9190615032565b611a359190615032565b90508660a0015115611a7a578660800151611a5b57611a548183615054565b8411611a68565b611a658183614e58565b84105b611a73576000611a7d565b6003611a7d565b60095b925060099150611a8a9050565b81600c811115611a9c57611a9c6146c0565b14611f9d57611aff60405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600063ffffffff168152602001600081525090565b600082600c811115611b1357611b136146c0565b03611d01576101208601516080870151606088015160405163b19962e560e01b81526001600160401b0393841660048201529286166024840152901515604483015262ffffff16606482015273a3be4e1d4677b08e95f540f685249f2034561a229063b19962e590608401602060405180830381865af4158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190614dad565b81526040516308f83eb760e11b815273a3be4e1d4677b08e95f540f685249f2034561a22906311f07d6e90611bfb908990600190600401614d8e565b602060405180830381865af4158015611c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3c9190614dad565b6040808301829052825160808a0151918b0151611c65938a93916001600160401b031690613b40565b606082015260c0860151611c7890613828565b816080018181525050856020015163ffffffff1686600001516001600160a01b03167f26d428c63a1c5161a75dbe15e1e65bc7bf932acb203db2a47df55b16a60d35b18a600001518960008d604001518988604001518c8a600001518b606001518c60800151604051611cf49a99989796959493929190615067565b60405180910390a3611f9b565b60c08601518651604080890151905163e5c9206d60e01b815260ff90931660048401526001600160a01b03909116602483015261ffff1660448201526000606482015273a3be4e1d4677b08e95f540f685249f2034561a229063e5c9206d9060840160006040518083038186803b158015611d7b57600080fd5b505af4158015611d8f573d6000803e3d6000fd5b50505060c087015187516040808a015190516315078f9760e31b815260ff90931660048401526001600160a01b03909116602483015261ffff1660448201526000915073a3be4e1d4677b08e95f540f685249f2034561a229063a83c7cb890606401602060405180830381865af4158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e329190614dad565b60c08801518851604051639611f34b60e01b815260ff90921660048301526001600160a01b031660248201526044810182905290915073a3be4e1d4677b08e95f540f685249f2034561a2290639611f34b9060640160006040518083038186803b158015611e9f57600080fd5b505af4158015611eb3573d6000803e3d6000fd5b50505050611ebe3090565b6001600160a01b0316635a68200d60405180604001604052808a600001516001600160a01b031681526020018a6020015163ffffffff16815250838a6101000151611f0991906150e5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815282516001600160a01b0316600482015260209092015163ffffffff1660248301526001600160781b03166044820152606401600060405180830381600087803b158015611f8157600080fd5b505af1158015611f95573d6000803e3d6000fd5b50505050505b505b600081600c811115611fb157611fb16146c0565b1461201657846020015163ffffffff16856040015161ffff1686600001516001600160a01b03167f1d7048e18d77f0864147aec27ae4b78d421fe35ddde1ea0ec535562c4a90cc588a600001518560405161200d929190614e6b565b60405180910390a45b50505050505050565b6001600160a01b0381166120465760405163d92e233d60e01b815260040160405180910390fd5b60006120506138b0565b6002810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385811691821790925560408051845484168152600185015490931660208401528201529091507f7b2fde61973b60e9083bea5f934d31d97c530deecb02e158dfa0280c8bc3f71a906060016106be565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152600061219960405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600063ffffffff168152602001600081525090565b60048760098111156121ad576121ad6146c0565b141580156121cd575060058760098111156121ca576121ca6146c0565b14155b80156121eb575060068760098111156121e8576121e86146c0565b14155b156122095760405163bef31f6b60e01b815260040160405180910390fd5b61221b8860000151896020015161399a565b9250600061223189600001518a60200151613a7d565b90508360a0015115612244576000612247565b60095b9250600083600c81111561225d5761225d6146c0565b1461226857506107bf565b6040516308f83eb760e11b815273a3be4e1d4677b08e95f540f685249f2034561a22906311f07d6e906122a2908790600190600401614d8e565b602060405180830381865af41580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190614dad565b6040830152600060048960098111156122fe576122fe6146c0565b1461233a576005896009811115612317576123176146c0565b1461232657826040015161234a565b8461016001516001600160401b031661234a565b8461014001516001600160401b03165b9050600081118015612365575080866001600160401b031611155b801561237a575080876001600160401b031610155b151560a0840181905261239657876001600160401b0316612398565b805b60e084015260068960098111156123b1576123b16146c0565b146125795773a3be4e1d4677b08e95f540f685249f2034561a226344ef50f960405180608001604052808881526020018660e0015181526020016123f23090565b89516040808c0151905163d6bfb05560e01b81526001600160a01b03928316600482015261ffff909116602482015291169063d6bfb05590604401602060405180830381865afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246e9190614dad565b815261010089015160608a015160405163feec5b5b60e01b81526001600160781b03909216600483015262ffffff16602482015260209091019073a3be4e1d4677b08e95f540f685249f2034561a229063feec5b5b90604401602060405180830381865af41580156124e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125089190614dad565b8152506040518263ffffffff1660e01b81526004016125279190614fde565b606060405180830381865af4158015612544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125689190614fed565b506020850152610120840152612584565b60e083015160208401525b60006103e860646000856060015161ffff16116125a3576103e86125a9565b84606001515b6125b79061ffff168561501b565b6125c19190615032565b6125cb9190615032565b90508360a0015180612625575060068a60098111156125ec576125ec6146c0565b14801561262557508560800151612613578360400151896001600160401b03161015612625565b8360400151896001600160401b031611155b806126a6575060048a600981111561263f5761263f6146c0565b14801561265a575060008661014001516001600160401b0316115b80156126a65750856080015161268a578561014001516001600160401b0316896001600160401b031611156126a6565b8561014001516001600160401b0316896001600160401b031610155b80612727575060058a60098111156126c0576126c06146c0565b1480156126db575060008661016001516001600160401b0316115b80156127275750856080015161270b578561016001516001600160401b0316896001600160401b03161015612727565b8561016001516001600160401b0316896001600160401b031611155b61273257600b61278c565b60068a6009811115612746576127466146c0565b1415801561277e5750856080015161276d576127628183615054565b84602001511161277e565b6127778183614e58565b8460200151105b61278957600061278c565b60035b9450505050955095509592505050565b6000306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280091906149dc565b6002811115612811576128116146c0565b1461282f576040516313d0ff5960e31b815260040160405180910390fd5b805160405163c6e729bb60e01b8152600091309163c6e729bb91612855916004016149f9565b61026060405180830381865afa158015612873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128979190614bc4565b90506128a281613069565b604051637331b33b60e01b815273a495afba337c2b6eebdf70edf76573be3f98f2fc90637331b33b90610e269084908690600401614d06565b60006128e56138a5565b5460ff16919050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915260006129b760405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600063ffffffff168152602001600081525090565b60028760098111156129cb576129cb6146c0565b141580156129eb575060038760098111156129e8576129e86146c0565b14155b15612a095760405163bef31f6b60e01b815260040160405180910390fd5b612a1b8860000151896020015161399a565b92508260a00151612a2f57600991506107bf565b8261012001516001600160401b0316856001600160401b031610158015612a6d57508261012001516001600160401b0316846001600160401b031611155b151560a08201819052612a805785612a87565b8261012001515b6001600160401b031660e08201819052612b39908490308651604080890151905163d6bfb05560e01b81526001600160a01b03928316600482015261ffff909116602482015291169063d6bfb05590604401602060405180830381865afa158015612af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1a9190614dad565b612b2c87600001518860200151613a7d565b6060015161ffff1661318c565b602084019190915261012083019190915260a0820151909250158015612c01575060028360e001516002811115612b7257612b726146c0565b14612bbe578260800151612b9f578261012001516001600160401b0316866001600160401b031610612c01565b8261012001516001600160401b0316866001600160401b031611612c01565b8260800151612be6578261012001516001600160401b0316866001600160401b031611612c01565b8261012001516001600160401b0316866001600160401b0316105b156107bf57600b9150955095509592505050565b6002306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7991906149dc565b6002811115612c8a57612c8a6146c0565b03612ca8576040516313d0ff5960e31b815260040160405180910390fd5b6000612cb7826000015161308b565b9050612cc281613069565b6000806000612d1760405180604001604052808660000151600001516001600160a01b0316815260200186600001516020015163ffffffff168152508560800151876060015188608001518960a001516120d0565b91945092509050600082600c811115612d3257612d326146c0565b036117525761012083015160208201516080850151606086015160405163b19962e560e01b81526001600160401b0394851660048201529390921660248401521515604483015262ffffff16606482015273a3be4e1d4677b08e95f540f685249f2034561a229063b19962e590608401602060405180830381865af4158015612dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de39190614dad565b808252608085015160e08301516040840151612e0493879390929091613b40565b606082015260c0830151612e1790613828565b8160800181815250506000836020015163ffffffff1684600001516001600160a01b03167f33b71dccfeb2f3e0f4ed2a9f7c05255d8c5aa57936b542245a5e63c93830159788600001518789602001518a608001518860e0015189602001518a604001518b61012001518c600001518d606001518e608001518f60a001516040516117459c9b9a9998979695949392919061510c565b60648160ff161115612ed257604051630ad1e31b60e01b815260040160405180910390fd5b80612edb6138a5565b805460ff191660ff92831617905560405190821681527f1be5a8e0282c1b895f845900a8efe7585790659f1b4f062f17000e2712dd86019060200160405180910390a150565b6002306001600160a01b0316634115c1226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8591906149dc565b6002811115612f9657612f966146c0565b03612fb4576040516313d0ff5960e31b815260040160405180910390fd5b805160405163c6e729bb60e01b8152600091309163c6e729bb91612fda916004016149f9565b61026060405180830381865afa158015612ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301c9190614bc4565b905061302781613069565b604051639787f1a360e01b815273f9e09e7c739e8397833b8724ecf41c4ba5f34ec590639787f1a390610e269084908690600401614d06565b61053b81612ead565b806060015161053b576040516309230ba360e41b815260040160405180910390fd5b6040805161028081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e083018290526102008301829052610220830182905261024083018290526102608301829052825260208201819052818301819052606082018190526080820181905260a0820181905260c0820152905163c6e729bb60e01b8152309063c6e729bb9061314a9085906004016149f9565b61026060405180830381865afa158015613168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105729190614bc4565b610100840151606085015160405163feec5b5b60e01b81526001600160781b03909216600483015262ffffff16602482015260009081908190819073a3be4e1d4677b08e95f540f685249f2034561a229063feec5b5b90604401602060405180830381865af4158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190614dad565b905073a3be4e1d4677b08e95f540f685249f2034561a22636e6a629e60405180608001604052808b81526020018a81526020018981526020018481525061326b3090565b6001600160a01b0316639095b1196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cc91906151b2565b6040518363ffffffff1660e01b81526004016132e99291906151dd565b6040805180830381865af4158015613305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332991906151fa565b809450819550505060006103e86064878b61012001516001600160401b0316613352919061501b565b61335c9190615032565b6133669190615032565b9050886080015161339257808961012001516001600160401b031661338b9190614e58565b84106133af565b808961012001516001600160401b03166133ac9190615054565b84115b6135da5760008961014001516001600160401b03161180156133ff575088608001516133ec578861014001516001600160401b03168411156133ff565b8861014001516001600160401b03168410155b6135d35760008961016001516001600160401b031611801561344f5750886080015161343c578861016001516001600160401b031688101561344f565b8861016001516001600160401b03168811155b6135cc5760c08901516040808b015160808c015191516318e3b57b60e01b815260ff909316600484015261ffff166024830152151560448201526064810183905273a3be4e1d4677b08e95f540f685249f2034561a22906318e3b57b90608401602060405180830381865af41580156134cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f0919061521e565b156135c5576135056402540be400602861501b565b6103e88a6060015162ffffff168761351d919061501b565b6135279190615032565b116135be57306040808b01519051630a06da4f60e21b815261ffff90911660048201526001600160a01b03919091169063281b693c90602401602060405180830381865afa15801561357d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a19190614dad565b896060015162ffffff16116135b75760006135dd565b60086135dd565b60076135dd565b60066135dd565b60056135dd565b60046135dd565b60035b925050509450945094915050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152610100830151606084015160405163feec5b5b60e01b81526001600160781b03909216600483015262ffffff16602482015273a3be4e1d4677b08e95f540f685249f2034561a229063d141758b908590839063feec5b5b90604401602060405180830381865af41580156136cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f09190614dad565b85608001516040518463ffffffff1660e01b81526004016137139392919061523b565b602060405180830381865af4158015613730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137549190614dad565b836101000181815161376691906150e5565b6001600160781b03169052506040805161012081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820152905163d7ec078760e01b8152309063d7ec0787906137dc908790859060040161525f565b6101a0604051808303816000875af11580156137fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613820919061530e565b949350505050565b60003060405163bbb4e3f960e01b815260ff841660048201526001600160a01b03919091169063bbb4e3f990602401602060405180830381865afa158015613874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105729190614dad565b61143483838360016138ba565b6000806101c3610572565b6000806003610572565b81156139945760003060405163bb33a55b60e01b815260ff871660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613930919061534b565b519050818015613944575061394481613ec2565b80156139535750613953613ef9565b156139805761397b8484613965613f15565b6001600160a01b03851692919061ffff16613f40565b6117a4565b6117a46001600160a01b038216858561400f565b50505050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152306040516315878e0760e01b81526001600160a01b03858116600483015263ffffffff8516602483015291909116906315878e07906044016101a060405180830381865afa158015613a59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d9919061530e565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152306040516375cd812d60e01b81526001600160a01b03858116600483015263ffffffff8516602483015291909116906375cd812d9060440161012060405180830381865afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d99190615412565b610100850151606086015160405163feec5b5b60e01b81526001600160781b03909216600483015262ffffff166024820152600090819073a3be4e1d4677b08e95f540f685249f2034561a229063d141758b908990839063feec5b5b90604401602060405180830381865af4158015613bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be19190614dad565b886040518463ffffffff1660e01b8152600401613c009392919061523b565b602060405180830381865af4158015613c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c419190614dad565b9050600073a3be4e1d4677b08e95f540f685249f2034561a2263a2971fd58989853060c08e015160405163bb33a55b60e01b815260ff90911660048201526001600160a01b03919091169063bb33a55b9060240160a060405180830381865afa158015613cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd6919061534b565b608001516040518563ffffffff1660e01b8152600401613cf994939291906154c8565b6040805180830381865af4158015613d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3991906151fa565b60808a01519194509150613d505783851015613d55565b838511155b613d5f5782613d62565b60005b925073a3be4e1d4677b08e95f540f685249f2034561a22635473397e8985858c61010001516001600160781b03161015613daa578b61010001516001600160781b0316613dc4565b858c61010001516001600160781b0316613dc49190614e58565b856040518563ffffffff1660e01b8152600401613de49493929190615507565b602060405180830381865af4158015613e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e259190614dad565b5060408051808201825289516001600160a01b0390811682526020808c015163ffffffff9081169184019182529351630887497d60e21b815292519091166004830152519091166024820152600088136044820152309063221d25f490606401600060405180830381600087803b158015613e9f57600080fd5b505af1158015613eb3573d6000803e3d6000fd5b50505050505095945050505050565b60006001600160a01b038216158015906105725750613edf614023565b6001600160a01b0316826001600160a01b03161492915050565b6000613f036140e0565b6001015462010000900460ff16919050565b600080613f206140e0565b6001015461ffff1690508015613f365780613f3a565b6152085b91505090565b604051632e1a7d4d60e01b8152600481018390526001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b158015613f8257600080fd5b505af1158015613f96573d6000803e3d6000fd5b505050506000806000806000868887f190508015613fb45750613994565b846001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fef57600080fd5b505af1158015614003573d6000803e3d6000fd5b50505050506117a48585855b6114346001600160a01b03841683836140eb565b600061a4b1460361404757507382af49447d8a07e3bd95bd0d56f35241523fbab190565b6121054603614069575073420000000000000000000000000000000000000690565b618173460361408657506e0f7e000644657dc9417b185962645a90565b608946036140a75750730d500b1d8e8ef31e21c99d1db9a6444d3adf127090565b62066eee46036140ca575073980b62da83eff3d4576c647993b0c1d7faf17c7390565b617a6946036140da57506101a590565b50600090565b60008061028b610572565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261143492869291600091614190918516908490614223565b90508051600014806141b15750808060200190518101906141b1919061521e565b6114345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161065e565b60606109d6848460008585600080866001600160a01b0316858760405161424a9190615558565b60006040518083038185875af1925050503d8060008114614287576040519150601f19603f3d011682016040523d82523d6000602084013e61428c565b606091505b509150915061429d878383876142a8565b979650505050505050565b60608315614317578251600003614310576001600160a01b0385163b6143105760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161065e565b5081613820565b613820838381511561432c5781518083602001fd5b8060405162461bcd60e51b815260040161065e9190615574565b60008083601f84011261435857600080fd5b5081356001600160401b0381111561436f57600080fd5b6020830191508360208260051b850101111561438a57600080fd5b9250929050565b600080600080600080606087890312156143aa57600080fd5b86356001600160401b03808211156143c157600080fd5b6143cd8a838b01614346565b909850965060208901359150808211156143e657600080fd5b6143f28a838b01614346565b9096509450604089013591508082111561440b57600080fd5b5061441889828a01614346565b979a9699509497509295939492505050565b6040516101a081016001600160401b038111828210171561445b57634e487b7160e01b600052604160045260246000fd5b60405290565b60405161012081016001600160401b038111828210171561445b57634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461053b57600080fd5b63ffffffff8116811461053b57600080fd5b6000604082840312156144cb57600080fd5b604051604081018181106001600160401b03821117156144fb57634e487b7160e01b600052604160045260246000fd5b604052905080823561450c81614492565b8152602083013561451c816144a7565b6020919091015292915050565b6001600160401b038116811461053b57600080fd5b803561454981614529565b919050565b600060e0828403121561456057600080fd5b60405160c081018181106001600160401b038211171561459057634e487b7160e01b600052604160045260246000fd5b60405261459d84846144b9565b81526040830135602082015260608301356145b781614529565b604082015260808301356145ca81614529565b606082015260a08301356145dd81614529565b60808201526145ee60c0840161453e565b60a08201529392505050565b60ff8116811461053b57600080fd5b60006020828403121561461b57600080fd5b81356109d9816145fa565b60006020828403121561463857600080fd5b81356109d981614492565b600a811061053b57600080fd5b600080600080600060c0868803121561466857600080fd5b61467287876144b9565b9450604086013561468281614643565b9350606086013561469281614529565b925060808601356146a281614529565b915060a08601356146b281614529565b809150509295509295909350565b634e487b7160e01b600052602160045260246000fd5b600381106146e6576146e66146c0565b9052565b80516001600160a01b03168252602081015161470e602084018263ffffffff169052565b506040810151614724604084018261ffff169052565b50606081015161473b606084018262ffffff169052565b50608081015161474f608084018215159052565b5060a081015161476360a084018215159052565b5060c081015161477860c084018260ff169052565b5060e081015161478b60e08401826146d6565b50610100818101516001600160781b031690830152610120808201516001600160401b03908116918401919091526101408083015182169084015261016080830151909116908301526101808082015177ffffffffffffffffffffffffffffffffffffffffffffffff811682850152613994565b600d81106146e6576146e66146c0565b610300810161481e82866146ea565b61482c6101a08301856147ff565b82516101c083015260208301516101e083015260408301516102008301526060830151610220830152608083015161024083015260a0830151151561026083015260c083015161028083015260e08301516102a083015261010083015163ffffffff166102c0830152610120909201516102e09091015292915050565b80356004811061454957600080fd5b600080604083850312156148cb57600080fd5b82356148d681614492565b91506148e4602084016148a9565b90509250929050565b60008060006060848603121561490257600080fd5b833561490d81614492565b925061491b602085016148a9565b9150614929604085016148a9565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561495a57600080fd5b6109d9826148a9565b801515811461053b57600080fd5b60006020828403121561498357600080fd5b81356109d981614963565b6001600160a01b038416815260608101600484106149ae576149ae6146c0565b8360208301528215156040830152949350505050565b6003811061053b57600080fd5b8051614549816149c4565b6000602082840312156149ee57600080fd5b81516109d9816149c4565b81516001600160a01b0316815260208083015163ffffffff169082015260408101610572565b805161454981614492565b8051614549816144a7565b805161ffff8116811461454957600080fd5b805162ffffff8116811461454957600080fd5b805161454981614963565b8051614549816145fa565b80516001600160781b038116811461454957600080fd5b805161454981614529565b805177ffffffffffffffffffffffffffffffffffffffffffffffff8116811461454957600080fd5b60006101a08284031215614acd57600080fd5b614ad561442a565b9050614ae082614a1f565b8152614aee60208301614a2a565b6020820152614aff60408301614a35565b6040820152614b1060608301614a47565b6060820152614b2160808301614a5a565b6080820152614b3260a08301614a5a565b60a0820152614b4360c08301614a65565b60c0820152614b5460e083016149d1565b60e0820152610100614b67818401614a70565b90820152610120614b79838201614a87565b90820152610140614b8b838201614a87565b90820152610160614b9d838201614a87565b90820152610180614baf838201614a92565b9082015292915050565b805161454981614643565b60006102608284031215614bd757600080fd5b60405160e081018181106001600160401b0382111715614c0757634e487b7160e01b600052604160045260246000fd5b604052614c148484614aba565b8152614c236101a08401614a1f565b6020820152614c356101c08401614a2a565b6040820152614c476101e08401614a5a565b6060820152614c596102008401614bb9565b6080820152614c6b6102208401614a2a565b60a0820152614c7d6102408401614a35565b60c08201529392505050565b600a81106146e6576146e66146c0565b614cbd82825180516001600160a01b0316825260209081015163ffffffff16910152565b6020810151604083015260408101516001600160401b0380821660608501528060608401511660808501528060808401511660a08501528060a08401511660c085015250505050565b600061034082019050614d1a8285516146ea565b6001600160a01b036020850151166101a083015263ffffffff6040850151166101c0830152606084015115156101e08301526080840151614d5f610200840182614c89565b5060a084015163ffffffff1661022083015260c084015161ffff166102408301526109d9610260830184614c99565b6101c08101614d9d82856146ea565b8215156101a08301529392505050565b600060208284031215614dbf57600080fd5b5051919050565b8a516001600160a01b031681526020808c015163ffffffff16908201526102e08101614df5604083018c6146ea565b9815156101e08201526001600160401b03978816610200820152959096166102208601526102408501939093526102608401919091526102808301526102a08201526102c0015292915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561057257610572614e42565b82516001600160a01b0316815260208084015163ffffffff1690820152606081016109d960408301846147ff565b600060208284031215614eab57600080fd5b81516109d9816145fa565b600060ff821660ff8103614ecc57614ecc614e42565b60010192915050565b8c516001600160a01b031681526020808e015163ffffffff16908201526103208101614f04604083018e6146ea565b6001600160a01b038c166101e0830152614f2261020083018c614c89565b6102208201999099526001600160401b03979097166102408801526102608701959095526102808601939093526102a08501919091526102c08401526102e0830152151561030090910152949350505050565b83516001600160a01b0316815260208085015163ffffffff169082015260808101614fa36040830185614c89565b61382060608301846147ff565b614fbb8282516146ea565b60208101516101a083015260408101516101c0830152606001516101e090910152565b61020081016105728284614fb0565b60008060006060848603121561500257600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761057257610572614e42565b60008261504f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561057257610572614e42565b8a516001600160a01b031681526020808c015163ffffffff16908201526102e08101615096604083018c6146ea565b9815156101e08201526001600160401b03979097166102008801526102208701959095526102408601939093526102608501919091526102808401526102a08301526102c09091015292915050565b6001600160781b0382811682821603908082111561510557615105614e42565b5092915050565b8c516001600160a01b031681526020808e015163ffffffff1690820152610320810161513b604083018e6146ea565b6001600160a01b038c166101e083015261515961020083018c614c89565b6102208201999099526102408101979097526102608701959095526102808601939093526102a08501919091526102c08401526102e0830152151561030090910152949350505050565b80516002811061454957600080fd5b6000602082840312156151c457600080fd5b6109d9826151a3565b600281106146e6576146e66146c0565b61022081016151ec8285614fb0565b6109d96102008301846151cd565b6000806040838503121561520d57600080fd5b505080516020909101519092909150565b60006020828403121561523057600080fd5b81516109d981614963565b6101e0810161524a82866146ea565b836101a08301526138206101c0830184614c89565b6102c0810161526e82856146ea565b825163ffffffff9081166101a08401526020840151166101c083015260408301516152a26101e084018263ffffffff169052565b50606083015161ffff16610200830152608083015165ffffffffffff90811661022084015260a08401511661024083015260c08301516152e66102608401826151cd565b5060e083015163ffffffff166102808301526101009092015160ff166102a090910152919050565b60006101a0828403121561532157600080fd5b6109d98383614aba565b80516fffffffffffffffffffffffffffffffff8116811461454957600080fd5b600060a0828403121561535d57600080fd5b60405160a081018181106001600160401b038211171561538d57634e487b7160e01b600052604160045260246000fd5b604052825161539b81614492565b815260208301516153ab81614963565b602082015260408301516affffffffffffffffffffff811681146153ce57600080fd5b60408201526153df6060840161532b565b60608201526153f06080840161532b565b60808201529392505050565b805165ffffffffffff8116811461454957600080fd5b6000610120828403121561542557600080fd5b61542d614461565b61543683614a2a565b815261544460208401614a2a565b602082015261545560408401614a2a565b604082015261546660608401614a35565b6060820152615477608084016153fc565b608082015261548860a084016153fc565b60a082015261549960c084016151a3565b60c08201526154aa60e08401614a2a565b60e08201526101006154bd818501614a65565b908201529392505050565b61020081016154d782876146ea565b846101a0830152836101c08301526fffffffffffffffffffffffffffffffff83166101e083015295945050505050565b610200810161551682876146ea565b846101a0830152836101c0830152826101e083015295945050505050565b60005b8381101561554f578181015183820152602001615537565b50506000910152565b6000825161556a818460208701615534565b9190910192915050565b6020815260008251806020840152615593816040850160208701615534565b601f01601f1916919091016040019291505056fea26469706673582212206a01e96365b0de9b884221fd896cf3a7312f277131e3e9c9c5f7317bd8b597c564736f6c63430008170033