0 txs
1 call
constructor
constructor(address _router, address _roleStore, address _dataStore, address _eventEmitter, address _depositHandler, address _withdrawalHandler, address _shiftHandler, address _orderHandler, address _externalHandler, address _jitOrderHandler)
functions
dataStore
viewfunction dataStore() view returns (address)
depositHandler
viewfunction depositHandler() view returns (address)
eventEmitter
viewfunction eventEmitter() view returns (address)
externalHandler
viewfunction externalHandler() view returns (address)
jitOrderHandler
viewfunction jitOrderHandler() view returns (address)
orderHandler
viewfunction orderHandler() view returns (address)
roleStore
viewfunction roleStore() view returns (address)
router
viewfunction router() view returns (address)
shiftHandler
viewfunction shiftHandler() view returns (address)
withdrawalHandler
viewfunction withdrawalHandler() view returns (address)
cancelDeposit
payablefunction cancelDeposit(bytes32 key) payable
cancelOrder
payablefunction cancelOrder(bytes32 key) payable
cancelShift
payablefunction cancelShift(bytes32 key) payable
cancelWithdrawal
payablefunction cancelWithdrawal(bytes32 key) payable
claimAffiliateRewards
payablefunction claimAffiliateRewards(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
claimCollateral
payablefunction claimCollateral(address[] markets, address[] tokens, uint256[] timeKeys, address receiver) payable returns (uint256[])
claimFundingFees
payablefunction claimFundingFees(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
claimUiFees
payablefunction claimUiFees(address[] markets, address[] tokens, address receiver) payable returns (uint256[])
createDeposit
payablefunction createDeposit(tuple params) payable returns (bytes32)
createOrder
payablefunction createOrder(tuple params) payable returns (bytes32)
createShift
payablefunction createShift(tuple params) payable returns (bytes32)
createWithdrawal
payablefunction createWithdrawal(tuple params) payable returns (bytes32)
executeAtomicWithdrawal
payablefunction executeAtomicWithdrawal(tuple params, tuple oracleParams) payable
makeExternalCalls
payablefunction makeExternalCalls(address[] externalCallTargets, bytes[] externalCallDataList, address[] refundTokens, address[] refundReceivers) payable
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
sendNativeToken
payablefunction sendNativeToken(address receiver, uint256 amount) payable
sendTokens
payablefunction sendTokens(address token, address receiver, uint256 amount) payable
sendWnt
payablefunction sendWnt(address receiver, uint256 amount) payable
setSavedCallbackContract
payablefunction setSavedCallbackContract(address market, address callbackContract) payable
setUiFeeFactor
payablefunction setUiFeeFactor(uint256 uiFeeFactor) payable
simulateExecuteLatestDeposit
payablefunction simulateExecuteLatestDeposit(tuple simulatedOracleParams) payable
simulateExecuteLatestJitOrder
payablefunction simulateExecuteLatestJitOrder(tuple[] shiftParamsList, tuple simulatedOracleParams) payable
simulateExecuteLatestOrder
payablefunction simulateExecuteLatestOrder(tuple simulatedOracleParams) payable
simulateExecuteLatestShift
payablefunction simulateExecuteLatestShift(tuple simulatedOracleParams) payable
simulateExecuteLatestWithdrawal
payablefunction simulateExecuteLatestWithdrawal(tuple simulatedOracleParams, uint8 swapPricingType) payable
updateOrder
payablefunction updateOrder(bytes32 key, uint256 sizeDeltaUsd, uint256 acceptablePrice, uint256 triggerPrice, uint256 minOutputAmount, uint256 validFromTime, bool autoCancel) payable
events
TokenTransferReverted
event TokenTransferReverted(string reason, bytes returndata)
errors
CollateralAlreadyClaimed
error CollateralAlreadyClaimed(uint256 adjustedClaimableAmount, uint256 claimedAmount)
DisabledFeature
error DisabledFeature(bytes32 key)
DisabledMarket
error DisabledMarket(address market)
EmptyAddressInMarketTokenBalanceValidation
error EmptyAddressInMarketTokenBalanceValidation(address market, address token)
EmptyDeposit
error EmptyDeposit()
EmptyHoldingAddress
error EmptyHoldingAddress()
EmptyMarket
error EmptyMarket()
EmptyOrder
error EmptyOrder()
EmptyReceiver
error EmptyReceiver()
EmptyTokenTranferGasLimit
error EmptyTokenTranferGasLimit(address token)
InvalidClaimableFactor
error InvalidClaimableFactor(uint256 value)
InvalidClaimCollateralInput
error InvalidClaimCollateralInput(uint256 marketsLength, uint256 tokensLength, uint256 timeKeysLength)
InvalidMarketTokenBalance
error InvalidMarketTokenBalance(address market, address token, uint256 balance, uint256 expectedMinBalance)
InvalidMarketTokenBalanceForClaimableFunding
error InvalidMarketTokenBalanceForClaimableFunding(address market, address token, uint256 balance, uint256 claimableFundingFeeAmount)
InvalidMarketTokenBalanceForCollateralAmount
error InvalidMarketTokenBalanceForCollateralAmount(address market, address token, uint256 balance, uint256 collateralAmount)
InvalidUiFeeFactor
error InvalidUiFeeFactor(uint256 uiFeeFactor, uint256 maxUiFeeFactor)
TokenTransferError
error TokenTransferError(address token, address receiver, uint256 amount)
Unauthorized
error Unauthorized(address msgSender, string role)
creation bytecode
0x6101c060405234801561001157600080fd5b50604051616296380380616296833981016040819052610030916100a6565b60016000556001600160a01b0398891660805298881660a05295871660c05293861660e05291851661010052841661012052831661014052821661016052811661018052166101a05261017a565b6001600160a01b038116811461009357600080fd5b50565b80516100a18161007e565b919050565b6000806000806000806000806000806101408b8d0312156100c657600080fd5b8a516100d18161007e565b60208c0151909a506100e28161007e565b60408c01519099506100f38161007e565b60608c01519098506101048161007e565b60808c01519097506101158161007e565b60a08c01519096506101268161007e565b60c08c01519095506101378161007e565b60e08c01519094506101488161007e565b6101008c015190935061015a8161007e565b91506101696101208c01610096565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615f8961030d60003960008181610471015261122a015260008181610248015261147801526000818161043d01528181610e77015281816110920152818161161a01526118cf0152600081816105380152818161100e0152818161128601526116f30152600081816102070152818161070d01528181610cea0152818161142001526118030152600081816103a20152818161099701528181610b8a01526113c50152600081816103d60152818161063701528181610a6701528181610b0c01528181611372015261186e0152600081816102fc01528181610615015281816106cf015281816107a60152818161087401528181610a4501528181610aad01528181610aeb01528181610b4c01528181610bfb01528181610d5b01528181610ec401528181610f2401528181611054015281816111ec015281816113500152818161152f015281816116b5015261184d0152600081816105b80152611772015260006102a20152615f896000f3fe60806040526004361061019f5760003560e01c806301a9cbb2146101a4578063054d5174146101cd578063073fb09e146101e25780632c2f3c07146101f55780632e944bd614610236578063314044841461026a57806349287a221461027d5780634a4a7b041461029057806353ead2d3146102c45780635a03cd94146102d7578063660d0d67146102ea5780636adbfaf51461031e5780637213c5a0146103315780637489ec23146103445780637d39aaf11461035757806396be28981461036a578063983fa3921461037d5780639c8b2cfb146103905780639ff78c30146103c4578063ac9650d8146103f8578063b56182ec14610418578063b58483051461042b578063b79112391461045f578063bd434e0c14610493578063c41b1ab3146104b4578063c82aa41b146104c7578063cfcfb552146104da578063d59922b0146104ed578063dd5baad214610500578063e10f8aa614610513578063e65c9ae114610526578063e6d66ac81461055a578063e78dc2351461056d578063e9249b5714610580578063f59c48eb14610593578063f887ea40146105a6575b600080fd5b6101b76101b2366004613c2e565b6105da565b6040516101c49190613ca9565b60405180910390f35b6101e06101db366004613df3565b6106c0565b005b6101e06101f0366004613e48565b610787565b34801561020157600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6040516101c49190613e76565b34801561024257600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6101e0610278366004613e8a565b61083a565b6101b761028b366004613c2e565b610a0a565b34801561029c57600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6101e06102d2366004613ea3565b610a97565b6101e06102e5366004613e8a565b610add565b3480156102f657600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6101e061032c366004613ecf565b610b3d565b6101e061033f366004613e8a565b610bc1565b6101e0610352366004613e8a565b610d21565b6101e0610365366004613ea3565b610eae565b6101e0610378366004613e8a565b610eea565b6101e061038b366004613ecf565b611045565b34801561039c57600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d057600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b61040b610406366004613f03565b6110c9565b6040516101c49190614024565b6101e0610426366004614037565b6111dd565b34801561043757600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b34801561046b57600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6104a66104a1366004614156565b611263565b6040519081526020016101c4565b6101b76104c2366004613c2e565b611315565b6104a66104d5366004614191565b6113a2565b6101e06104e83660046141e3565b6113ff565b6101e06104fb36600461426d565b611459565b6101e061050e3660046143fe565b6114f5565b6101e0610521366004613ecf565b6116a6565b34801561053257600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b6101e061056836600461445e565b61172a565b6104a661057b36600461449f565b6117e0565b6101b761058e3660046144d3565b61183d565b6104a66105a13660046145cf565b6118ac565b3480156105b257600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b60606105e461190b565b6040516303972f1560e31b8152339073d0fb8fc12523f76f736005f22fca93811b65affd90631cb978a890610667907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a90899060040161465c565b600060405180830381865af4158015610684573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ac91908101906146c1565b9150506106b96001600055565b9392505050565b6106c861190b565b60006106f37f0000000000000000000000000000000000000000000000000000000000000000611964565b604051632f06430560e21b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc190c1490610746908490879087906004016147e7565b600060405180830381600087803b15801561076057600080fd5b505af1158015610774573d6000803e3d6000fd5b50505050506107836001600055565b5050565b61078f61190b565b60405163b3678d5b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015233602483015280841660448301528216606482015273de87e3ec75793b72d39030a00579abd4014ebe519063b3678d5b9060840160006040518083038186803b15801561081857600080fd5b505af415801561082c573d6000803e3d6000fd5b505050506107836001600055565b61084261190b565b60405163fdfc26f360e01b815260009073f40e193b6a51167fa9442dc8086ff0a1f1ac2ef79063fdfc26f39061089e907f0000000000000000000000000000000000000000000000000000000000000000908690600401614820565b600060405180830381865af41580156108bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108e391908101906149bb565b905060006108f082515190565b6001600160a01b031603610917576040516395b66fe960e01b815260040160405180910390fd5b3361092182515190565b6001600160a01b031614610981576040805163a35b150b60e01b8152336004820152602481019190915260196044820152781858d8dbdd5b9d08199bdc8818d85b98d95b11195c1bdcda5d603a1b60648201526084015b60405180910390fd5b604051630c50112160e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906331404484906024015b600060405180830381600087803b1580156109e457600080fd5b505af11580156109f8573d6000803e3d6000fd5b5050505050610a076001600055565b50565b6060610a1461190b565b60405163cc6997d760e01b8152339073feb3a35a89fa31437566c0dd7a299fc01decd9919063cc6997d790610667907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a90899060040161465c565b610a9f61190b565b610aa88261197e565b610ad37f000000000000000000000000000000000000000000000000000000000000000083836119a5565b6107836001600055565b610ae561190b565b33610b327f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008385611ab1565b50610a076001600055565b610b4561190b565b6000610b707f0000000000000000000000000000000000000000000000000000000000000000611964565b604051632a3db3eb60e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a3db3eb906109ca9084908690600401614b54565b610bc961190b565b60405163fdfc26f360e01b81526000907390656b128c5220e40ca2063e2252ef2b8a8a51569063fdfc26f390610c25907f0000000000000000000000000000000000000000000000000000000000000000908690600401614820565b600060405180830381865af4158015610c42573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6a9190810190614b6d565b905033610c7682515190565b6001600160a01b031614610cd4576040805163a35b150b60e01b81523360048201526024810191909152601c60448201527b1858d8dbdd5b9d08199bdc8818d85b98d95b15da5d1a191c985dd85b60221b6064820152608401610978565b6040516303909e2d60e51b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637213c5a0906024016109ca565b610d2961190b565b60405163fdfc26f360e01b815260009073c7911480a797941e54d7c70c65467a7c04989fcd9063fdfc26f390610d85907f0000000000000000000000000000000000000000000000000000000000000000908690600401614820565b600060405180830381865af4158015610da2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dca9190810190614dd6565b90506000610dd782515190565b6001600160a01b031603610dfe57604051631630779760e01b815260040160405180910390fd5b33610e0882515190565b6001600160a01b031614610e61576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b6064820152608401610978565b604051637489ec2360e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec23906024016109ca565b610eb661190b565b610ebf8261197e565b610ad37f00000000000000000000000000000000000000000000000000000000000000008383611c7f565b610ef261190b565b60405163fdfc26f360e01b815260009073acaa2e2a2f4ca2ccd775296791206c5b943478dc9063fdfc26f390610f4e907f0000000000000000000000000000000000000000000000000000000000000000908690600401614820565b600060405180830381865af4158015610f6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f939190810190614f81565b905033610f9f82515190565b6001600160a01b031614610ff8576040805163a35b150b60e01b8152336004820152602481019190915260176044820152761858d8dbdd5b9d08199bdc8818d85b98d95b14da1a599d604a1b6064820152608401610978565b6040516312d7c51360e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396be2898906024016109ca565b61104d61190b565b60006110787f0000000000000000000000000000000000000000000000000000000000000000611964565b6040516314e22bf560e31b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a7115fa8906109ca9084908690600401614b54565b6060816001600160401b038111156110e3576110e36139f4565b60405190808252806020026020018201604052801561111657816020015b60608152602001906001900390816111015790505b50905060005b828110156111d5576000803086868581811061113a5761113a615094565b905060200281019061114c91906150aa565b60405161115a9291906150f7565b600060405180830381855af49150503d8060008114611195576040519150601f19603f3d011682016040523d82523d6000602084013e61119a565b606091505b5091509150816111ad576111ad81611d02565b808484815181106111c0576111c0615094565b6020908102919091010152505060010161111c565b505b92915050565b6111e561190b565b60006112107f0000000000000000000000000000000000000000000000000000000000000000611964565b60405163f6c9a41360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f6c9a4139061074690869085908790600401615107565b600061126d61190b565b6040516308b7f3d360e21b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322dfcf4c906112c09084906000908890600401615220565b6020604051808303816000875af11580156112df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113039190615311565b9150506113106001600055565b919050565b606061131f61190b565b604051632572e9a360e21b8152339073d0fb8fc12523f76f736005f22fca93811b65affd906395cba68c90610667907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a90899060040161465c565b60006113ac61190b565b604051631c866fc960e21b815233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637219bf24906112c0908490600090889060040161536a565b61140761190b565b6040516366664c2d60e01b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366664c2d906107469084908790879060040161565c565b61146161190b565b604051630d59922b60e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d59922b0906114b3908790879087908790600401615781565b600060405180830381600087803b1580156114cd57600080fd5b505af11580156114e1573d6000803e3d6000fd5b505050506114ef6001600055565b50505050565b6114fd61190b565b60405163fdfc26f360e01b815260009073c7911480a797941e54d7c70c65467a7c04989fcd9063fdfc26f390611559907f0000000000000000000000000000000000000000000000000000000000000000908c90600401614820565b600060405180830381865af4158015611576573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261159e9190810190614dd6565b9050336115aa82515190565b6001600160a01b031614611603576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b6064820152608401610978565b60405163a9db59a760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9db59a790611660908b908b908b908b908b908b908b908b906000906004016158b2565b600060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050505061169d6001600055565b50505050505050565b6116ae61190b565b60006116d97f0000000000000000000000000000000000000000000000000000000000000000611964565b6040516349e5879960e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906349e58799906109ca9084908690600401614b54565b61173261190b565b61173b8261197e565b6040516303704f0f60e31b81526001600160a01b0384811660048301523360248301819052848216604484015260648301849052917f000000000000000000000000000000000000000000000000000000000000000090911690631b82787890608401600060405180830381600087803b1580156117b857600080fd5b505af11580156117cc573d6000803e3d6000fd5b50505050506117db6001600055565b505050565b60006117ea61190b565b6040516341e6fad960e01b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906341e6fad9906112c09084906000908890600401615a1b565b606061184761190b565b336118977f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008888888887611d3b565b9150506118a46001600055565b949350505050565b60006118b661190b565b60405163c6561b4560e01b815233906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c6561b45906112c090849060009088908290600401615b35565b60026000540361195d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610978565b6002600055565b60008061197083611e7f565b905060006118a48483611f2e565b6001600160a01b038116610a075760405163d551823d60e01b815260040160405180910390fd5b806000036119b257505050565b6119bb8261197e565b6000836001600160a01b031663bd02d0f5604051602001611a0d906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611a4191815260200190565b602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a829190615311565b90506000806000806000868887f190508015611a9f575050505050565b611aaa858585611c7f565b5050505050565b6000846001600160a01b031663bd02d0f5604051602001611af79060208082526011908201527026a0ac2faaa4afa322a2afa320a1aa27a960791b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611b2b91815260200190565b602060405180830381865afa158015611b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6c9190615311565b905080821115611b93578181604051638146813960e01b8152600401610978929190615c85565b846001600160a01b031663e2a4853a611bab85611f61565b846040518363ffffffff1660e01b8152600401611bc9929190615c85565b6020604051808303816000875af1158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190615311565b506040516311bfdfd160e21b81527382ee609881b36a1131d2444f2e941bd905f559e1906346ff7f4490611c4890879087908790600401615c93565b60006040518083038186803b158015611c6057600080fd5b505af4158015611c74573d6000803e3d6000fd5b505050505050505050565b80600003611c8c57505050565b611c958261197e565b6000611ca084611fde565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cdd57600080fd5b505af1158015611cf1573d6000803e3d6000fd5b50505050506114ef8482858561208b565b600080611d0e836122c1565b915091508015611d32578160405162461bcd60e51b81526004016109789190615cb7565b6117db83612351565b606084518651141580611d5057508351855114155b15611d855785518551855160405163216068f960e11b8152600481019390935260248301919091526044820152606401610978565b611d9788611d923061235a565b6123a7565b611da08361197e565b600086516001600160401b03811115611dbb57611dbb6139f4565b604051908082528060200260200182016040528015611de4578160200160208202803683370190505b50905060005b8751811015611e7257611e4d8a8a8a8481518110611e0a57611e0a615094565b60200260200101518a8581518110611e2457611e24615094565b60200260200101518a8681518110611e3e57611e3e615094565b6020026020010151898b6123d2565b828281518110611e5f57611e5f615094565b6020908102919091010152600101611dea565b5098975050505050505050565b6000816001600160a01b031663bd02d0f5604051602001611eb9906020808252600590820152644e4f4e434560d81b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611eed91815260200190565b602060405180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d79190615311565b60008282604051602001611f43929190614820565b60405160208183030381529060405280519060200120905092915050565b6000604051602001611f94906020808252600d908201526c2aa4afa322a2afa320a1aa27a960991b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b6000816001600160a01b03166321f8a7216040516020016120169060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161204a91815260200190565b602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d79190615cca565b80156114ef5761209a8261197e565b6000846001600160a01b031663bd02d0f56120b48661276c565b6040518263ffffffff1660e01b81526004016120d291815260200190565b602060405180830381865afa1580156120ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121139190615311565b9050806000036121385783604051634fe14bfd60e11b81526004016109789190613e76565b6000612146858585856127aa565b50905080156121565750506114ef565b6000866001600160a01b03166321f8a72160405160200161219a906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016121ce91815260200190565b602060405180830381865afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f9190615cca565b90506001600160a01b03811661223857604051633a6de2f560e21b815260040160405180910390fd5b600080612247888488886127aa565b91509150811561225b5750505050506114ef565b6000612266826122c1565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae818360405161229a929190615ce7565b60405180910390a188888860405163012f3b8f60e71b815260040161097893929190615c93565b606060006044835110156122e8575050604080516020810190915260008082529092909150565b60006122f5846020015190565b90506307b9e43360e51b6001600160e01b031982160161233457600484019350838060200190518101906123299190615d0c565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b6000604051602001611f949060208082526021908201527f434c41494d5f434f4c4c41544552414c5f464541545552455f44495341424c456040820152601160fa1b606082015260800190565b6123b18282612912565b156107835760405163dd70e0c960e01b815260048101829052602401610978565b600080886001600160a01b031663bd02d0f56123f08989898961297e565b6040518263ffffffff1660e01b815260040161240e91815260200190565b602060405180830381865afa15801561242b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244f9190615311565b905060006124608a898989896129f6565b905068327cb2734119d3b7a9601e1b81111561249257604051636c2738d360e01b815260048101829052602401610978565b60008a6001600160a01b031663bd02d0f56124af8b8b8b8b612d91565b6040518263ffffffff1660e01b81526004016124cd91815260200190565b602060405180830381865afa1580156124ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250e9190615311565b9050600061251c8484612dd0565b9050818111612542578082604051631d8db13960e31b8152600401610978929190615c85565b600061254e8383615d8f565b90508c6001600160a01b031663e2a4853a61256b8d8d8d8d612d91565b846040518363ffffffff1660e01b8152600401612589929190615c85565b6020604051808303816000875af11580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190615311565b5060008d6001600160a01b031663e98aabc16125e88e8e612de9565b846040518363ffffffff1660e01b8152600401612606929190615c85565b6020604051808303816000875af1158015612625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126499190615311565b60405163078d3b7960e01b81529091506001600160a01b038d169063078d3b799061267c908e908c908790600401615c93565b600060405180830381600087803b15801561269657600080fd5b505af11580156126aa573d6000803e3d6000fd5b505050506126b88e8d612e37565b6040516359e8c46f60e11b81526001600160a01b03808f166004830152808e166024830152808d166044830152606482018c9052808b166084830152891660a482015260c4810183905260e481018290527382ee609881b36a1131d2444f2e941bd905f559e19063b3d188de906101040160006040518083038186803b15801561274157600080fd5b505af4158015612755573d6000803e3d6000fd5b509398505050505050505050979650505050505050565b6000604051602001611f94906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b86866040516024016127cb929190614820565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b0316868460405161281c9190615da2565b60006040518083038160008787f1925050503d806000811461285a576040519150601f19603f3d011682016040523d82523d6000602084013e61285f565b606091505b509150915081156129005780516000036128bd576001600160a01b0389163b6128bd5760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050612909565b600081511180156128df5750808060200190518101906128dd9190615dbe565b155b156128f257600094509250612909915050565b600194509250612909915050565b60009450925050505b94509492505050565b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa15801561295a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b99190615dbe565b600060405160200161298f90615ddb565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380881691830191909152808616606083015260808201859052831660a082015260c001604051602081830303815290604052805190602001209050949350505050565b600080866001600160a01b031663bd02d0f5612a13888888612e4f565b6040518263ffffffff1660e01b8152600401612a3191815260200190565b602060405180830381865afa158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190615311565b90506000876001600160a01b031663bd02d0f5612a9189898989612ebf565b6040518263ffffffff1660e01b8152600401612aaf91815260200190565b602060405180830381865afa158015612acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af09190615311565b90506000818311612b015781612b03565b825b90506000896001600160a01b031663bd02d0f5604051602001612b619060208082526021908201527f434c41494d41424c455f434f4c4c41544552414c5f54494d455f44495649534f6040820152602960f91b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612b9591815260200190565b602060405180830381865afa158015612bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd69190615311565b905060008a6001600160a01b031663bd02d0f5612bf58c8c8c8c612ed0565b6040518263ffffffff1660e01b8152600401612c1391815260200190565b602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190615311565b90506000612c62838a615e10565b612c6c9042615d8f565b905060008c6001600160a01b031663bd02d0f5604051602001612cbd906020808252601a9082015279434c41494d41424c455f434f4c4c41544552414c5f44454c415960301b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612cf191815260200190565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615311565b905084158015612d40575082155b8015612d4b57508082115b15612d605768327cb2734119d3b7a9601e1b94505b82851115612d7957612d728386615d8f565b9450612d7e565b600094505b5092955050505050505b95945050505050565b600060405160200161298f9060208082526019908201527810d3105253515117d0d3d31310551154905317d05353d55395603a1b604082015260600190565b60006106b9838368327cb2734119d3b7a9601e1b612f21565b6000604051602001612dfa90615ddb565b60408051601f198184030181528282528051602091820120908301526001600160a01b038086169183019190915283166060820152608001611f43565b6000612e438383612f2e565b90506117db8382612fdb565b6000604051602001612e6090615e27565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380871691830191909152841660608201526080810183905260a0015b6040516020818303038152906040528051906020012090509392505050565b600060405160200161298f90615e27565b600060405160200161298f9060208082526025908201527f434c41494d41424c455f434f4c4c41544552414c5f524544554354494f4e5f4660408201526420a1aa27a960d91b606082015260800190565b60006118a484848461301e565b60408051608081018252600080825260208201819052918101829052606081019190915260405163a8d8fff560e01b815260009073441e058004487b364eda07145fb9c0245fc892d19063a8d8fff590612f8e9087908790600401615e5c565b608060405180830381865af4158015612fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcf9190615e76565b90506106b98482613108565b612fea828283604001516131d1565b80606001516001600160a01b031681604001516001600160a01b03160361300f575050565b610783828283606001516131d1565b60008080600019858709858702925082811083820303915050806000036130585783828161304e5761304e615edf565b04925050506106b9565b80841161309f5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610978565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b80516001600160a01b0316613130576040516302fde0d760e11b815260040160405180910390fd5b6000826001600160a01b0316637ae1cfca61314e84600001516133c6565b6040518263ffffffff1660e01b815260040161316c91815260200190565b602060405180830381865afa158015613189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ad9190615dbe565b905080156117db5781516040516309f8c93760e01b81526109789190600401613e76565b81516001600160a01b031615806131ef57506001600160a01b038116155b1561321257815160405163e474a42560e01b815261097891908390600401615e5c565b81516040516370a0823160e01b81526000916001600160a01b038416916370a082319161324191600401613e76565b602060405180830381865afa15801561325e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132829190615311565b905060006132918585856133fe565b9050808210156132bd5783516040516333a1ea6b60e01b81526109789190859085908590600401615ef5565b60006132d186866000015186600180613718565b90506132e68686600001518660006001613718565b6132f09082615f1e565b90508083101561331c57845160405163808c464f60e01b81526109789190869086908590600401615ef5565b6000866001600160a01b031663bd02d0f561333b8860000151886137a8565b6040518263ffffffff1660e01b815260040161335991815260200190565b602060405180830381865afa158015613376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339a9190615311565b90508084101561169d578551604051639dd026db60e01b81526109789190879087908590600401615ef5565b6000604051602001611f94906020808252601290820152711254d7d3505492d15517d11254d05093115160721b604082015260600190565b60006134396040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b031663bd02d0f56134568660000151866137e6565b6040518263ffffffff1660e01b815260040161347491815260200190565b602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b59190615311565b815283516134c590869085613817565b602082015283516001600160a01b0386169063bd02d0f5906134e79086612de9565b6040518263ffffffff1660e01b815260040161350591815260200190565b602060405180830381865afa158015613522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135469190615311565b604082015283516001600160a01b0386169063bd02d0f5906135689086613891565b6040518263ffffffff1660e01b815260040161358691815260200190565b602060405180830381865afa1580156135a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c79190615311565b606082015283516001600160a01b0386169063bd02d0f5906135e990866138cb565b6040518263ffffffff1660e01b815260040161360791815260200190565b602060405180830381865afa158015613624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136489190615311565b608082015283516001600160a01b0386169063bd02d0f59061366a9086613908565b6040518263ffffffff1660e01b815260040161368891815260200190565b602060405180830381865afa1580156136a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c99190615311565b60a08201819052608082015160608301516040840151602085015185516136f09190615f1e565b6136fa9190615f1e565b6137049190615f1e565b61370e9190615f1e565b612d889190615f1e565b600081866001600160a01b031663bd02d0f561373588888861393e565b6040518263ffffffff1660e01b815260040161375391815260200190565b602060405180830381865afa158015613770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137949190615311565b61379e9190615f31565b9695505050505050565b6000604051602001612dfa9060208082526018908201527710d31052535050931157d1955391125391d7d05353d5539560421b604082015260600190565b6000604051602001612dfa906020808252600b908201526a1413d3d317d05353d5539560aa1b604082015260600190565b6000836001600160a01b031663bd02d0f561383285856139b7565b6040518263ffffffff1660e01b815260040161385091815260200190565b602060405180830381865afa15801561386d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a49190615311565b6000604051602001612dfa9060208082526014908201527310d31052535050931157d1915157d05353d5539560621b604082015260600190565b6000604051602001612dfa9060208082526017908201527610d31052535050931157d55257d1915157d05353d55395604a1b604082015260600190565b6000604051602001612dfa9060208082526010908201526f10519192531250551157d49155d0549160821b604082015260600190565b6000604051602001613972906020808252600e908201526d434f4c4c41544552414c5f53554d60901b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915284166060820152821515608082015260a001612ea0565b6000604051602001612dfa9060208082526017908201527614d5d05417d253541050d517d413d3d317d05353d55395604a1b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405290565b604080519081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405160a081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405160e081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405161012081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405161018081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405161010081016001600160401b0381118282101715613a2c57613a2c6139f4565b60405160c081016001600160401b0381118282101715613a2c57613a2c6139f4565b604051606081016001600160401b0381118282101715613a2c57613a2c6139f4565b604051601f8201601f191681016001600160401b0381118282101715613b6d57613b6d6139f4565b604052919050565b60006001600160401b03821115613b8e57613b8e6139f4565b5060051b60200190565b6001600160a01b0381168114610a0757600080fd5b803561131081613b98565b600082601f830112613bc957600080fd5b8135613bdc613bd782613b75565b613b45565b8082825260208201915060208360051b860101925085831115613bfe57600080fd5b602085015b83811015613c24578035613c1681613b98565b835260209283019201613c03565b5095945050505050565b600080600060608486031215613c4357600080fd5b83356001600160401b03811115613c5957600080fd5b613c6586828701613bb8565b93505060208401356001600160401b03811115613c8157600080fd5b613c8d86828701613bb8565b9250506040840135613c9e81613b98565b809150509250925092565b602080825282518282018190526000918401906040840190835b81811015613ce1578351835260209384019390920191600101613cc3565b509095945050505050565b600060808284031215613cfe57600080fd5b613d06613a0a565b905081356001600160401b03811115613d1e57600080fd5b613d2a84828501613bb8565b82525060208201356001600160401b03811115613d4657600080fd5b8201601f81018413613d5757600080fd5b8035613d65613bd782613b75565b8082825260208201915060208360061b850101925086831115613d8757600080fd5b6020840193505b82841015613dcf5760408488031215613da657600080fd5b613dae613a32565b84358152602080860135818301529083526040909401939190910190613d8e565b60208501525050506040828101359082015260609182013591810191909152919050565b60008060408385031215613e0657600080fd5b82356001600160401b03811115613e1c57600080fd5b613e2885828601613cec565b925050602083013560068110613e3d57600080fd5b809150509250929050565b60008060408385031215613e5b57600080fd5b8235613e6681613b98565b91506020830135613e3d81613b98565b6001600160a01b0391909116815260200190565b600060208284031215613e9c57600080fd5b5035919050565b60008060408385031215613eb657600080fd5b8235613ec181613b98565b946020939093013593505050565b600060208284031215613ee157600080fd5b81356001600160401b03811115613ef757600080fd5b6118a484828501613cec565b60008060208385031215613f1657600080fd5b82356001600160401b03811115613f2c57600080fd5b8301601f81018513613f3d57600080fd5b80356001600160401b03811115613f5357600080fd5b8560208260051b8401011115613f6857600080fd5b6020919091019590945092505050565b60005b83811015613f93578181015183820152602001613f7b565b50506000910152565b60008151808452613fb4816020860160208601613f78565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561401857601f19858403018852614002838351613f9c565b6020988901989093509190910190600101613fe6565b50909695505050505050565b6020815260006106b96020830184613fc8565b6000806040838503121561404a57600080fd5b82356001600160401b0381111561406057600080fd5b8301601f8101851361407157600080fd5b803561407f613bd782613b75565b80828252602082019150602060a084028501019250878311156140a157600080fd5b6020840193505b828410156141225760a084890312156140c057600080fd5b6140c8613a54565b84356140d381613b98565b815260208501356140e381613b98565b602082015260408501356140f681613b98565b60408201526060858101359082015260808086013590820152825260a0909301926020909101906140a8565b945050505060208301356001600160401b0381111561414057600080fd5b61414c85828601613cec565b9150509250929050565b60006020828403121561416857600080fd5b81356001600160401b0381111561417e57600080fd5b820161012081850312156106b957600080fd5b6000602082840312156141a357600080fd5b81356001600160401b038111156141b957600080fd5b820160c081850312156106b957600080fd5b600060e082840312156141dd57600080fd5b50919050565b600080604083850312156141f657600080fd5b82356001600160401b0381111561420c57600080fd5b614218858286016141cb565b92505060208301356001600160401b0381111561423457600080fd5b830160608186031215613e3d57600080fd5b60006001600160401b0382111561425f5761425f6139f4565b50601f01601f191660200190565b6000806000806080858703121561428357600080fd5b84356001600160401b0381111561429957600080fd5b6142a587828801613bb8565b94505060208501356001600160401b038111156142c157600080fd5b8501601f810187136142d257600080fd5b80356142e0613bd782613b75565b8082825260208201915060208360051b85010192508983111561430257600080fd5b602084015b838110156143865780356001600160401b0381111561432557600080fd5b8501603f81018c1361433657600080fd5b6020810135614347613bd782614246565b8181526040838301018e101561435c57600080fd5b81604084016020830137600060208383010152808652505050602083019250602081019050614307565b50955050505060408501356001600160401b038111156143a557600080fd5b6143b187828801613bb8565b92505060608501356001600160401b038111156143cd57600080fd5b6143d987828801613bb8565b91505092959194509250565b8015158114610a0757600080fd5b8035611310816143e5565b600080600080600080600060e0888a03121561441957600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c088013561444e816143e5565b8091505092959891949750929550565b60008060006060848603121561447357600080fd5b833561447e81613b98565b9250602084013561448e81613b98565b929592945050506040919091013590565b6000602082840312156144b157600080fd5b81356001600160401b038111156144c757600080fd5b6118a4848285016141cb565b600080600080608085870312156144e957600080fd5b84356001600160401b038111156144ff57600080fd5b61450b87828801613bb8565b94505060208501356001600160401b0381111561452757600080fd5b61453387828801613bb8565b93505060408501356001600160401b0381111561454f57600080fd5b8501601f8101871361456057600080fd5b803561456e613bd782613b75565b8082825260208201915060208360051b85010192508983111561459057600080fd5b6020840193505b828410156145b2578335825260209384019390910190614597565b94506145c49250505060608601613bad565b905092959194509250565b6000602082840312156145e157600080fd5b81356001600160401b038111156145f757600080fd5b820161020081850312156106b957600080fd5b6001600160a01b03169052565b600081518084526020840193506020830160005b828110156146525781516001600160a01b031686526020958601959091019060010161462b565b5093949350505050565b6001600160a01b0387811682528616602082015260c06040820181905260009061468890830187614617565b828103606084015261469a8187614617565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b6000602082840312156146d357600080fd5b81516001600160401b038111156146e957600080fd5b8201601f810184136146fa57600080fd5b8051614708613bd782613b75565b8082825260208201915060208360051b85010192508683111561472a57600080fd5b6020840193505b8284101561379e578351825260209384019390910190614731565b60008151608084526147616080850182614617565b6020848101518683038783015280518084529082019350600092909101905b808310156147b0578351805183526020810151602084015250604082019150602084019350600183019250614780565b50604085015160408701526060850151606087015280935050505092915050565b634e487b7160e01b600052602160045260246000fd5b838152606060208201526000614800606083018561474c565b905060068310614812576148126147d1565b826040830152949350505050565b6001600160a01b03929092168252602082015260400190565b805161131081613b98565b600082601f83011261485557600080fd5b8151614863613bd782613b75565b8082825260208201915060208360051b86010192508583111561488557600080fd5b602085015b83811015613c2457805161489d81613b98565b83526020928301920161488a565b600060e082840312156148bd57600080fd5b6148c5613a76565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0928301519281019290925250919050565b60006020828403121561492057600080fd5b604051602081016001600160401b0381118282101715614942576149426139f4565b80604052508091508251614955816143e5565b905292915050565b600082601f83011261496e57600080fd5b815161497c613bd782613b75565b8082825260208201915060208360051b86010192508583111561499e57600080fd5b602085015b83811015613c245780518352602092830192016149a3565b6000602082840312156149cd57600080fd5b81516001600160401b038111156149e357600080fd5b820161014081850312156149f657600080fd5b6149fe613a0a565b81516001600160401b03811115614a1457600080fd5b82016101208187031215614a2757600080fd5b614a2f613a98565b614a3882614839565b8152614a4660208301614839565b6020820152614a5760408301614839565b6040820152614a6860608301614839565b6060820152614a7960808301614839565b6080820152614a8a60a08301614839565b60a0820152614a9b60c08301614839565b60c082015260e08201516001600160401b03811115614ab957600080fd5b614ac588828501614844565b60e0830152506101008201516001600160401b03811115614ae557600080fd5b614af188828501614844565b61010083015250825250614b0885602084016148ab565b6020820152614b1b85610100840161490e565b60408201526101208201516001600160401b03811115614b3a57600080fd5b614b468682850161495d565b606083015250949350505050565b8281526040602082015260006118a4604083018461474c565b600060208284031215614b7f57600080fd5b81516001600160401b03811115614b9557600080fd5b82016101408185031215614ba857600080fd5b614bb0613a0a565b81516001600160401b03811115614bc657600080fd5b820160e08187031215614bd857600080fd5b614be0613a76565b614be982614839565b8152614bf760208301614839565b6020820152614c0860408301614839565b6040820152614c1960608301614839565b6060820152614c2a60808301614839565b608082015260a08201516001600160401b03811115614c4857600080fd5b614c5488828501614844565b60a08301525060c08201516001600160401b03811115614c7357600080fd5b614c7f88828501614844565b60c083015250825250614b0885602084016148ab565b60098110610a0757600080fd5b805161131081614c95565b60038110610a0757600080fd5b805161131081614cad565b60006101808284031215614cd857600080fd5b614ce0613abb565b9050614ceb82614ca2565b8152614cf960208301614cba565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101609182015191810191909152919050565b600060808284031215614d8057600080fd5b614d88613a0a565b90508151614d95816143e5565b81526020820151614da5816143e5565b60208201526040820151614db8816143e5565b60408201526060820151614dcb816143e5565b606082015292915050565b600060208284031215614de857600080fd5b81516001600160401b03811115614dfe57600080fd5b82016102408185031215614e1157600080fd5b614e19613a0a565b81516001600160401b03811115614e2f57600080fd5b82016101008187031215614e4257600080fd5b614e4a613ade565b614e5382614839565b8152614e6160208301614839565b6020820152614e7260408301614839565b6040820152614e8360608301614839565b6060820152614e9460808301614839565b6080820152614ea560a08301614839565b60a0820152614eb660c08301614839565b60c082015260e08201516001600160401b03811115614ed457600080fd5b614ee088828501614844565b60e083015250825250614ef68560208401614cc5565b6020820152614f09856101a08401614d6e565b60408201526102208201516001600160401b03811115614b3a57600080fd5b600060c08284031215614f3a57600080fd5b614f42613b01565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b600060208284031215614f9357600080fd5b81516001600160401b03811115614fa957600080fd5b82018084036101a0811215614fbd57600080fd5b614fc5613b23565b60c0821215614fd357600080fd5b614fdb613b01565b91508251614fe881613b98565b82526020830151614ff881613b98565b6020830152604083015161500b81613b98565b6040830152606083015161501e81613b98565b6060830152608083015161503181613b98565b608083015260a083015161504481613b98565b60a08301528181526150598660c08501614f28565b602082015261018083015191506001600160401b0382111561507a57600080fd5b6150868683850161495d565b604082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126150c157600080fd5b8301803591506001600160401b038211156150db57600080fd5b6020019150368190038213156150f057600080fd5b9250929050565b8183823760009101908152919050565b6060808252845190820181905260009060208601906080840190835b8181101561518157835180516001600160a01b0390811685526020808301518216818701526040808401519092169186019190915260608083015190860152608091820151918501919091529093019260a090920191600101615123565b5050856020850152838103604085015261519b818661474c565b979650505050505050565b6000808335601e198436030181126151bd57600080fd5b83016020810192503590506001600160401b038111156151dc57600080fd5b8060051b36038213156150f057600080fd5b81835260006001600160fb1b0383111561520757600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038416815260208101839052606060408201526000823561524781613b98565b6001600160a01b03166060830152602083013561526381613b98565b6001600160a01b03166080830152604083013561527f81613b98565b6001600160a01b031660a0830152606083013561529b81613b98565b6001600160a01b031660c083015260808301356152b781613b98565b6001600160a01b031660e08381019190915260a08401356101008085019190915260c0850135610120850152908401356101408401526152f9908401846151a6565b61012061016085015261519b610180850182846151ee565b60006020828403121561532357600080fd5b5051919050565b81835260208301925060008160005b8481101561465257813561534c81613b98565b6001600160a01b031686526020958601959190910190600101615339565b6001600160a01b03841681526020810183905260606040820152600082353684900360fe1901811261539b57600080fd5b60c06060840152830180356153af81613b98565b6153bd61012085018261460a565b506153ca60208201613bad565b6153d861014085018261460a565b506153e560408201613bad565b6153f361016085018261460a565b5061540060608201613bad565b61540e61018085018261460a565b5061541b60808201613bad565b6154296101a085018261460a565b5061543660a08201613bad565b6154446101c085018261460a565b5061545260c08201826151a6565b6101006101e086015261546a6102208601828461532a565b91505061547a60e08301836151a6565b85830361011f1901610200870152925061549582848361532a565b6020870135608087015292506154b0915050604085016143f3565b80151560a085015250606084013560c0840152608084013560e08401526154da60a08501856151a6565b848303605f19016101008601526154f28382846151ee565b98975050505050505050565b6000813561550b81613b98565b6001600160a01b03168352602082013561552481613b98565b6001600160a01b03166020840152604082013561554081613b98565b6001600160a01b0316604084015261555a60608301613bad565b615567606085018261460a565b5061557560808301836151a6565b60c0608086015261558a60c08601828461532a565b91505061559a60a08401846151a6565b85830360a087015261379e83828461532a565b6000813560be198336030181126155c357600080fd5b60e084526155d660e085018483016154fe565b602084810135908601526040808501359086015290506155f8606084016143f3565b151560608501526080838101359085015260a0808401359085015261562060c08401846151a6565b85830360c087015261379e8382846151ee565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152606060208201819052600090615680908301856155ad565b828103604084015261569284856151a6565b606083526156a460608401828461532a565b9150506156b460208601866151a6565b83830360208501526156c783828461532a565b925050506156d860408601866151a6565b838303604085015282935080835260208301935060208160051b840101826000601e19853603015b8482101561577057868403601f19018852823581811261571f57600080fd5b86016020810190356001600160401b0381111561573b57600080fd5b80360382131561574a57600080fd5b615755868284615633565b95505050602083019250602088019750600182019150615700565b50919b9a5050505050505050505050565b6080815260006157946080830187614617565b82810360208401526157a68187613fc8565b905082810360408401526157ba8186614617565b9050828103606084015261519b8185614617565b600981106157de576157de6147d1565b9052565b600381106157de576157de6147d1565b6157fd8282516157ce565b602081015161580f60208401826157e2565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516101608301525050565b600081518084526020840193506020830160005b82811015614652578151865260209586019590910190600101615894565b8981528860208201528760408201528660608201528560808201528460a082015283151560c082015261012060e08201526000835161024061012084015260018060a01b0381511661036084015260018060a01b0360208201511661038084015260408101516159266103a085018261460a565b50606081015161593a6103c085018261460a565b50608081015161594e6103e085018261460a565b5060a081015161596261040085018261460a565b5060c081015161597661042085018261460a565b5060e00151610100610440840152615992610460840182614617565b905060208501516159a76101408501826157f2565b50604085810151805115156102c0860152602081015115156102e0860152908101511515610300850152606090810151151561032085015285015161011f19848303016103408501526159fa8282615880565b92505050615a0d61010083018415159052565b9a9950505050505050505050565b60018060a01b0384168152826020820152606060408201526000612d8860608301846155ad565b6000823560de19833603018112615a5857600080fd5b90910192915050565b60008135615a6e81613b98565b6001600160a01b031683526020820135615a8781613b98565b6001600160a01b03166020840152615aa160408301613bad565b615aae604085018261460a565b50615abb60608301613bad565b615ac8606085018261460a565b50615ad560808301613bad565b615ae2608085018261460a565b50615aef60a08301613bad565b615afc60a085018261460a565b50615b0a60c08301836151a6565b60e060c0860152612d8860e08601828461532a565b803561131081614c95565b803561131081614cad565b6001600160a01b038516815260208101849052608060408201526000615b5b8480615a42565b6102006080840152615b71610280840182615a61565b9050615bc960a0840160208701803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e090810135910152565b615bd66101208601615b1f565b615be46101a08501826157ce565b50615bf26101408601615b2a565b615c006101c08501826157e2565b50615c0e61016086016143f3565b15156101e0840152615c2361018086016143f3565b1515610200840152615c386101a086016143f3565b15156102208401526101c0850135610240840152615c5a6101e08601866151a6565b848303607f1901610260860152615c728382846151ee565b9350505050612d88606083018415159052565b918252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020815260006106b96020830184613f9c565b600060208284031215615cdc57600080fd5b81516106b981613b98565b604081526000615cfa6040830185613f9c565b8281036020840152612d888185613f9c565b600060208284031215615d1e57600080fd5b81516001600160401b03811115615d3457600080fd5b8201601f81018413615d4557600080fd5b8051615d53613bd782614246565b818152856020838501011115615d6857600080fd5b612d88826020830160208601613f78565b634e487b7160e01b600052601160045260246000fd5b818103818111156111d7576111d7615d79565b60008251615db4818460208701613f78565b9190910192915050565b600060208284031215615dd057600080fd5b81516106b9816143e5565b6020808252601b908201527a10d31052535050931157d0d3d31310551154905317d05353d55395602a1b604082015260600190565b80820281158282048414176111d7576111d7615d79565b6020808252601b908201527a21a620a4a6a0a12622afa1a7a62620aa22a920a62fa320a1aa27a960291b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b60006080828403128015615e8957600080fd5b50615e92613a0a565b8251615e9d81613b98565b81526020830151615ead81613b98565b60208201526040830151615ec081613b98565b60408201526060830151615ed381613b98565b60608201529392505050565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b808201808211156111d7576111d7615d79565b600082615f4e57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212202fa3c4edaee70cc88b426c506a940df0523bb4bcc4580a47483b829070ea41a564736f6c634300081d00330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb000000000000000000000000a811589ea8efb0bcd0aba1c3c610f582cd80c1c9000000000000000000000000384575078ffab77a8deea21ec38e522d27ecf9bb000000000000000000000000f967ddb18dc039d4f1d81672430500a08ed98e130000000000000000000000001b9f88ac01d5571d6795fcf91c672ce141679030000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a500000000000000000000000055d5c8eff1a91b3d12bed13922793133f2739cc2