0 txs
1 call
constructor
constructor(address _router, address _roleStore, address _dataStore, address _eventEmitter, address _depositHandler, address _withdrawalHandler, address _shiftHandler, address _orderHandler, address _externalHandler)
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)
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
simulateExecuteDeposit
payablefunction simulateExecuteDeposit(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteLatestDeposit
payablefunction simulateExecuteLatestDeposit(tuple simulatedOracleParams) payable
simulateExecuteLatestOrder
payablefunction simulateExecuteLatestOrder(tuple simulatedOracleParams) payable
simulateExecuteLatestShift
payablefunction simulateExecuteLatestShift(tuple simulatedOracleParams) payable
simulateExecuteLatestWithdrawal
payablefunction simulateExecuteLatestWithdrawal(tuple simulatedOracleParams, uint8 swapPricingType) payable
simulateExecuteOrder
payablefunction simulateExecuteOrder(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteShift
payablefunction simulateExecuteShift(bytes32 key, tuple simulatedOracleParams) payable
simulateExecuteWithdrawal
payablefunction simulateExecuteWithdrawal(bytes32 key, 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
0x6101a060405234801561001157600080fd5b506040516162a53803806162a583398101604081905261003091610090565b60016000556001600160a01b0397881660805297871660a05294861660c05292851660e052908416610100528316610120528216610140528116610160521661018052610154565b6001600160a01b038116811461008d57600080fd5b50565b60008060008060008060008060006101208a8c0312156100af57600080fd5b89516100ba81610078565b60208b01519099506100cb81610078565b60408b01519098506100dc81610078565b60608b01519097506100ed81610078565b60808b01519096506100fe81610078565b60a08b015190955061010f81610078565b60c08b015190945061012081610078565b60e08b015190935061013181610078565b6101008b015190925061014381610078565b809150509295985092959850929598565b60805160a05160c05160e0516101005161012051610140516101605161018051615fbb6102ea6000396000818161027101526115d601526000818161047901528181610f6c01528181611187015281816111dd015281816117780152611a2801526000818161055301528181610b5501528181611103015281816113e401526118510152600081816102300152818161072801528181610ddf015281816113470152818161157e015261195c0152600081816103de0152818161087401528181610a3601528181610c7f01526115230152600081816104120152818161065201528181610b0601528181610c01015281816114d001526119c701526000818161033801528181610630015281816106ea015281816107c10152818161091301528181610ae401528181610ba201528181610be001528181610c4101528181610cf001528181610e5001528181610fb90152818161101901528181611149015281816114ae0152818161168d0152818161181301526119a60152600081816105d301526118d0015260006102de0152615fbb6000f3fe6080604052600436106101b55760003560e01c806301a9cbb2146101ba578063054d5174146101e3578063073fb09e146101f85780632a3db3eb1461020b5780632c2f3c071461021e5780632e944bd61461025f578063314044841461029357806349287a22146102a657806349e58799146102b95780634a4a7b04146102cc57806353ead2d3146103005780635a03cd9414610313578063660d0d67146103265780636adbfaf51461035a5780637213c5a01461036d5780637489ec23146103805780637d39aaf11461039357806396be2898146103a6578063983fa392146103b95780639c8b2cfb146103cc5780639ff78c3014610400578063a7115fa814610434578063ac9650d814610447578063b584830514610467578063bc190c141461049b578063bd434e0c146104ae578063c41b1ab3146104cf578063c82aa41b146104e2578063cfcfb552146104f5578063d59922b014610508578063dd5baad21461051b578063e10f8aa61461052e578063e65c9ae114610541578063e6d66ac814610575578063e78dc23514610588578063e9249b571461059b578063f59c48eb146105ae578063f887ea40146105c1575b600080fd5b6101cd6101c8366004613d65565b6105f5565b6040516101da9190613de0565b60405180910390f35b6101f66101f1366004613f39565b6106db565b005b6101f6610206366004613f86565b6107a2565b6101f6610219366004613fbf565b610855565b34801561022a57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6040516101da9190614005565b34801561026b57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66102a1366004614019565b6108d9565b6101cd6102b4366004613d65565b610aa9565b6101f66102c7366004613fbf565b610b36565b3480156102d857600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f661030e366004614032565b610b8c565b6101f6610321366004614019565b610bd2565b34801561033257600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f661036836600461405e565b610c32565b6101f661037b366004614019565b610cb6565b6101f661038e366004614019565b610e16565b6101f66103a1366004614032565b610fa3565b6101f66103b4366004614019565b610fdf565b6101f66103c736600461405e565b61113a565b3480156103d857600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561040c57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f6610442366004613fbf565b6111be565b61045a610455366004614092565b611214565b6040516101da91906141b3565b34801561047357600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f66104a93660046141c6565b611328565b6104c16104bc36600461421c565b6113c1565b6040519081526020016101da565b6101cd6104dd366004613d65565b611473565b6104c16104f0366004614257565b611500565b6101f66105033660046142a9565b61155d565b6101f6610516366004614333565b6115b7565b6101f66105293660046144c4565b611653565b6101f661053c36600461405e565b611804565b34801561054d57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6101f6610583366004614524565b611888565b6104c1610596366004614565565b611939565b6101cd6105a9366004614599565b611996565b6104c16105bc366004614695565b611a05565b3480156105cd57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b60606105ff611a64565b6040516303972f1560e31b8152339073e7ab34574296cf6a8d3f4cd7bf45311146d225f790631cb978a890610682907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908990600401614722565b600060405180830381865af415801561069f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c79190810190614787565b9150506106d46001600055565b9392505050565b6106e3611a64565b600061070e7f0000000000000000000000000000000000000000000000000000000000000000611abd565b604051632f06430560e21b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc190c1490610761908490879087906004016148ad565b600060405180830381600087803b15801561077b57600080fd5b505af115801561078f573d6000803e3d6000fd5b505050505061079e6001600055565b5050565b6107aa611a64565b60405163b3678d5b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015233602483015280841660448301528216606482015273ba682243c478ebd7d7cd67d2ea7d25928a8c16f99063b3678d5b9060840160006040518083038186803b15801561083357600080fd5b505af4158015610847573d6000803e3d6000fd5b5050505061079e6001600055565b61085d611a64565b604051632a3db3eb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a3db3eb906108ab90859085906004016148e6565b600060405180830381600087803b1580156108c557600080fd5b505af1158015610847573d6000803e3d6000fd5b6108e1611a64565b60405163fdfc26f360e01b8152600090732c4f39fe8f558d84811e875aaf0903ba86bebb1b9063fdfc26f39061093d907f00000000000000000000000000000000000000000000000000000000000000009086906004016148ff565b600060405180830381865af415801561095a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109829190810190614a9a565b9050600061098f82515190565b6001600160a01b0316036109b6576040516395b66fe960e01b815260040160405180910390fd5b336109c082515190565b6001600160a01b031614610a20576040805163a35b150b60e01b8152336004820152602481019190915260196044820152781858d8dbdd5b9d08199bdc8818d85b98d95b11195c1bdcda5d603a1b60648201526084015b60405180910390fd5b604051630c50112160e21b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906331404484906024015b600060405180830381600087803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b5050505050610aa66001600055565b50565b6060610ab3611a64565b60405163cc6997d760e01b8152339073cb25512d99f99dcf55d5ffaf300fb9ab0a70268a9063cc6997d790610682907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908990600401614722565b610b3e611a64565b6040516349e5879960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906349e58799906108ab90859085906004016148e6565b610b94611a64565b610b9d82611ad7565b610bc87f00000000000000000000000000000000000000000000000000000000000000008383611afe565b61079e6001600055565b610bda611a64565b33610c277f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008385611c0a565b50610aa66001600055565b610c3a611a64565b6000610c657f0000000000000000000000000000000000000000000000000000000000000000611abd565b604051632a3db3eb60e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a3db3eb90610a6990849086906004016148e6565b610cbe611a64565b60405163fdfc26f360e01b815260009073c7cc50ba99b7c07c09beefa1ccdb9259b342c66d9063fdfc26f390610d1a907f00000000000000000000000000000000000000000000000000000000000000009086906004016148ff565b600060405180830381865af4158015610d37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5f9190810190614c33565b905033610d6b82515190565b6001600160a01b031614610dc9576040805163a35b150b60e01b81523360048201526024810191909152601c60448201527b1858d8dbdd5b9d08199bdc8818d85b98d95b15da5d1a191c985dd85b60221b6064820152608401610a17565b6040516303909e2d60e51b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637213c5a090602401610a69565b610e1e611a64565b60405163fdfc26f360e01b81526000907329b7cf4831288932de48c929cb09649d1c6ca69d9063fdfc26f390610e7a907f00000000000000000000000000000000000000000000000000000000000000009086906004016148ff565b600060405180830381865af4158015610e97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ebf9190810190614e9c565b90506000610ecc82515190565b6001600160a01b031603610ef357604051631630779760e01b815260040160405180910390fd5b33610efd82515190565b6001600160a01b031614610f56576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b91031b0b731b2b627b93232b960491b6064820152608401610a17565b604051637489ec2360e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637489ec2390602401610a69565b610fab611a64565b610fb482611ad7565b610bc87f00000000000000000000000000000000000000000000000000000000000000008383611dd8565b610fe7611a64565b60405163fdfc26f360e01b8152600090737ea79eac0009f7888b6f8dcfffa1ea9aa8c30f7d9063fdfc26f390611043907f00000000000000000000000000000000000000000000000000000000000000009086906004016148ff565b600060405180830381865af4158015611060573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110889190810190615047565b90503361109482515190565b6001600160a01b0316146110ed576040805163a35b150b60e01b8152336004820152602481019190915260176044820152761858d8dbdd5b9d08199bdc8818d85b98d95b14da1a599d604a1b6064820152608401610a17565b6040516312d7c51360e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906396be289890602401610a69565b611142611a64565b600061116d7f0000000000000000000000000000000000000000000000000000000000000000611abd565b6040516314e22bf560e31b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a7115fa890610a6990849086906004016148e6565b6111c6611a64565b6040516314e22bf560e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a7115fa8906108ab90859085906004016148e6565b6060816001600160401b0381111561122e5761122e613b4d565b60405190808252806020026020018201604052801561126157816020015b606081526020019060019003908161124c5790505b50905060005b8281101561132057600080308686858181106112855761128561515a565b90506020028101906112979190615170565b6040516112a59291906151bd565b600060405180830381855af49150503d80600081146112e0576040519150601f19603f3d011682016040523d82523d6000602084013e6112e5565b606091505b5091509150816112f8576112f881611e5b565b8084848151811061130b5761130b61515a565b60209081029190910101525050600101611267565b505b92915050565b611330611a64565b604051632f06430560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc190c1490611380908690869086906004016148ad565b600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b505050506113bc6001600055565b505050565b60006113cb611a64565b6040516308b7f3d360e21b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322dfcf4c9061141e9084906000908890600401615247565b6020604051808303816000875af115801561143d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114619190615343565b91505061146e6001600055565b919050565b606061147d611a64565b604051632572e9a360e21b8152339073e7ab34574296cf6a8d3f4cd7bf45311146d225f7906395cba68c90610682907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908990600401614722565b600061150a611a64565b604051631c866fc960e21b815233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637219bf249061141e908490600090889060040161539c565b611565611a64565b6040516366664c2d60e01b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366664c2d906107619084908790879060040161568e565b6115bf611a64565b604051630d59922b60e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d59922b0906116119087908790879087906004016157b3565b600060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b5050505061164d6001600055565b50505050565b61165b611a64565b60405163fdfc26f360e01b81526000907329b7cf4831288932de48c929cb09649d1c6ca69d9063fdfc26f3906116b7907f0000000000000000000000000000000000000000000000000000000000000000908c906004016148ff565b600060405180830381865af41580156116d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116fc9190810190614e9c565b90503361170882515190565b6001600160a01b031614611761576040805163a35b150b60e01b81523360048201526024810191909152601760448201527630b1b1b7bab73a103337b9103ab83230ba32a7b93232b960491b6064820152608401610a17565b60405163a9db59a760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9db59a7906117be908b908b908b908b908b908b908b908b906000906004016158e4565b600060405180830381600087803b1580156117d857600080fd5b505af11580156117ec573d6000803e3d6000fd5b50505050506117fb6001600055565b50505050505050565b61180c611a64565b60006118377f0000000000000000000000000000000000000000000000000000000000000000611abd565b6040516349e5879960e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906349e5879990610a6990849086906004016148e6565b611890611a64565b61189982611ad7565b6040516303704f0f60e31b81526001600160a01b0384811660048301523360248301819052848216604484015260648301849052917f000000000000000000000000000000000000000000000000000000000000000090911690631b82787890608401600060405180830381600087803b15801561191657600080fd5b505af115801561192a573d6000803e3d6000fd5b50505050506113bc6001600055565b6000611943611a64565b6040516341e6fad960e01b815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906341e6fad99061141e9084906000908890600401615a4d565b60606119a0611a64565b336119f07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008888888887611e94565b9150506119fd6001600055565b949350505050565b6000611a0f611a64565b60405163c6561b4560e01b815233906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c6561b459061141e90849060009088908290600401615b67565b600260005403611ab65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a17565b6002600055565b600080611ac983611fd8565b905060006119fd8483612087565b6001600160a01b038116610aa65760405163d551823d60e01b815260040160405180910390fd5b80600003611b0b57505050565b611b1482611ad7565b6000836001600160a01b031663bd02d0f5604051602001611b66906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611b9a91815260200190565b602060405180830381865afa158015611bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdb9190615343565b90506000806000806000868887f190508015611bf8575050505050565b611c03858585611dd8565b5050505050565b6000846001600160a01b031663bd02d0f5604051602001611c509060208082526011908201527026a0ac2faaa4afa322a2afa320a1aa27a960791b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611c8491815260200190565b602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615343565b905080821115611cec578181604051638146813960e01b8152600401610a17929190615cb7565b846001600160a01b031663e2a4853a611d04856120ba565b846040518363ffffffff1660e01b8152600401611d22929190615cb7565b6020604051808303816000875af1158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190615343565b506040516311bfdfd160e21b815273c1bd1ad41cda5c5c5953766cba5c375c85407cc8906346ff7f4490611da190879087908790600401615cc5565b60006040518083038186803b158015611db957600080fd5b505af4158015611dcd573d6000803e3d6000fd5b505050505050505050565b80600003611de557505050565b611dee82611ad7565b6000611df984612137565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e3657600080fd5b505af1158015611e4a573d6000803e3d6000fd5b505050505061164d848285856121e4565b600080611e678361241a565b915091508015611e8b578160405162461bcd60e51b8152600401610a179190615ce9565b6113bc836124aa565b606084518651141580611ea957508351855114155b15611ede5785518551855160405163216068f960e11b8152600481019390935260248301919091526044820152606401610a17565b611ef088611eeb306124b3565b612500565b611ef983611ad7565b600086516001600160401b03811115611f1457611f14613b4d565b604051908082528060200260200182016040528015611f3d578160200160208202803683370190505b50905060005b8751811015611fcb57611fa68a8a8a8481518110611f6357611f6361515a565b60200260200101518a8581518110611f7d57611f7d61515a565b60200260200101518a8681518110611f9757611f9761515a565b6020026020010151898b61252b565b828281518110611fb857611fb861515a565b6020908102919091010152600101611f43565b5098975050505050505050565b6000816001600160a01b031663bd02d0f5604051602001612012906020808252600590820152644e4f4e434560d81b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161204691815260200190565b602060405180830381865afa158015612063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190615343565b6000828260405160200161209c9291906148ff565b60405160208183030381529060405280519060200120905092915050565b60006040516020016120ed906020808252600d908201526c2aa4afa322a2afa320a1aa27a960991b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b6000816001600160a01b03166321f8a72160405160200161216f9060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016121a391815260200190565b602060405180830381865afa1580156121c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190615cfc565b801561164d576121f382611ad7565b6000846001600160a01b031663bd02d0f561220d866128c5565b6040518263ffffffff1660e01b815260040161222b91815260200190565b602060405180830381865afa158015612248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226c9190615343565b9050806000036122915783604051634fe14bfd60e11b8152600401610a179190614005565b600061229f85858585612903565b50905080156122af57505061164d565b6000866001600160a01b03166321f8a7216040516020016122f3906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161232791815260200190565b602060405180830381865afa158015612344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123689190615cfc565b90506001600160a01b03811661239157604051633a6de2f560e21b815260040160405180910390fd5b6000806123a088848888612903565b9150915081156123b457505050505061164d565b60006123bf8261241a565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae81836040516123f3929190615d19565b60405180910390a188888860405163012f3b8f60e71b8152600401610a1793929190615cc5565b60606000604483511015612441575050604080516020810190915260008082529092909150565b600061244e846020015190565b90506307b9e43360e51b6001600160e01b031982160161248d57600484019350838060200190518101906124829190615d3e565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b60006040516020016120ed9060208082526021908201527f434c41494d5f434f4c4c41544552414c5f464541545552455f44495341424c456040820152601160fa1b606082015260800190565b61250a8282612a6b565b1561079e5760405163dd70e0c960e01b815260048101829052602401610a17565b600080886001600160a01b031663bd02d0f561254989898989612ad7565b6040518263ffffffff1660e01b815260040161256791815260200190565b602060405180830381865afa158015612584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a89190615343565b905060006125b98a89898989612b4f565b905068327cb2734119d3b7a9601e1b8111156125eb57604051636c2738d360e01b815260048101829052602401610a17565b60008a6001600160a01b031663bd02d0f56126088b8b8b8b612eea565b6040518263ffffffff1660e01b815260040161262691815260200190565b602060405180830381865afa158015612643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126679190615343565b905060006126758484612f29565b905081811161269b578082604051631d8db13960e31b8152600401610a17929190615cb7565b60006126a78383615dc1565b90508c6001600160a01b031663e2a4853a6126c48d8d8d8d612eea565b846040518363ffffffff1660e01b81526004016126e2929190615cb7565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615343565b5060008d6001600160a01b031663e98aabc16127418e8e612f42565b846040518363ffffffff1660e01b815260040161275f929190615cb7565b6020604051808303816000875af115801561277e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a29190615343565b60405163078d3b7960e01b81529091506001600160a01b038d169063078d3b79906127d5908e908c908790600401615cc5565b600060405180830381600087803b1580156127ef57600080fd5b505af1158015612803573d6000803e3d6000fd5b505050506128118e8d612f90565b6040516359e8c46f60e11b81526001600160a01b03808f166004830152808e166024830152808d166044830152606482018c9052808b166084830152891660a482015260c4810183905260e4810182905273c1bd1ad41cda5c5c5953766cba5c375c85407cc89063b3d188de906101040160006040518083038186803b15801561289a57600080fd5b505af41580156128ae573d6000803e3d6000fd5b509398505050505050505050979650505050505050565b60006040516020016120ed906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b86866040516024016129249291906148ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b031686846040516129759190615dd4565b60006040518083038160008787f1925050503d80600081146129b3576040519150601f19603f3d011682016040523d82523d6000602084013e6129b8565b606091505b50915091508115612a59578051600003612a16576001600160a01b0389163b612a165760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050612a62565b60008151118015612a38575080806020019051810190612a369190615df0565b155b15612a4b57600094509250612a62915050565b600194509250612a62915050565b60009450925050505b94509492505050565b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d49190615df0565b6000604051602001612ae890615e0d565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380881691830191909152808616606083015260808201859052831660a082015260c001604051602081830303815290604052805190602001209050949350505050565b600080866001600160a01b031663bd02d0f5612b6c888888612fa8565b6040518263ffffffff1660e01b8152600401612b8a91815260200190565b602060405180830381865afa158015612ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcb9190615343565b90506000876001600160a01b031663bd02d0f5612bea89898989613018565b6040518263ffffffff1660e01b8152600401612c0891815260200190565b602060405180830381865afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190615343565b90506000818311612c5a5781612c5c565b825b90506000896001600160a01b031663bd02d0f5604051602001612cba9060208082526021908201527f434c41494d41424c455f434f4c4c41544552414c5f54494d455f44495649534f6040820152602960f91b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612cee91815260200190565b602060405180830381865afa158015612d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2f9190615343565b905060008a6001600160a01b031663bd02d0f5612d4e8c8c8c8c613029565b6040518263ffffffff1660e01b8152600401612d6c91815260200190565b602060405180830381865afa158015612d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dad9190615343565b90506000612dbb838a615e42565b612dc59042615dc1565b905060008c6001600160a01b031663bd02d0f5604051602001612e16906020808252601a9082015279434c41494d41424c455f434f4c4c41544552414c5f44454c415960301b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612e4a91815260200190565b602060405180830381865afa158015612e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8b9190615343565b905084158015612e99575082155b8015612ea457508082115b15612eb95768327cb2734119d3b7a9601e1b94505b82851115612ed257612ecb8386615dc1565b9450612ed7565b600094505b5092955050505050505b95945050505050565b6000604051602001612ae89060208082526019908201527810d3105253515117d0d3d31310551154905317d05353d55395603a1b604082015260600190565b60006106d4838368327cb2734119d3b7a9601e1b61307a565b6000604051602001612f5390615e0d565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808616918301919091528316606082015260800161209c565b6000612f9c8383613087565b90506113bc8382613134565b6000604051602001612fb990615e59565b60408051601f198184030181528282528051602091820120908301526001600160a01b0380871691830191909152841660608201526080810183905260a0015b6040516020818303038152906040528051906020012090509392505050565b6000604051602001612ae890615e59565b6000604051602001612ae89060208082526025908201527f434c41494d41424c455f434f4c4c41544552414c5f524544554354494f4e5f4660408201526420a1aa27a960d91b606082015260800190565b60006119fd848484613177565b60408051608081018252600080825260208201819052918101829052606081019190915260405163a8d8fff560e01b815260009073d727120ac811e9136d4a5d5c6219aee37e2757859063a8d8fff5906130e79087908790600401615e8e565b608060405180830381865af4158015613104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131289190615ea8565b90506106d48482613261565b6131438282836040015161332a565b80606001516001600160a01b031681604001516001600160a01b031603613168575050565b61079e8282836060015161332a565b60008080600019858709858702925082811083820303915050806000036131b1578382816131a7576131a7615f11565b04925050506106d4565b8084116131f85760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610a17565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b80516001600160a01b0316613289576040516302fde0d760e11b815260040160405180910390fd5b6000826001600160a01b0316637ae1cfca6132a7846000015161351f565b6040518263ffffffff1660e01b81526004016132c591815260200190565b602060405180830381865afa1580156132e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133069190615df0565b905080156113bc5781516040516309f8c93760e01b8152610a179190600401614005565b81516001600160a01b0316158061334857506001600160a01b038116155b1561336b57815160405163e474a42560e01b8152610a1791908390600401615e8e565b81516040516370a0823160e01b81526000916001600160a01b038416916370a082319161339a91600401614005565b602060405180830381865afa1580156133b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133db9190615343565b905060006133ea858585613557565b9050808210156134165783516040516333a1ea6b60e01b8152610a179190859085908590600401615f27565b600061342a86866000015186600180613871565b905061343f8686600001518660006001613871565b6134499082615f50565b90508083101561347557845160405163808c464f60e01b8152610a179190869086908590600401615f27565b6000866001600160a01b031663bd02d0f5613494886000015188613901565b6040518263ffffffff1660e01b81526004016134b291815260200190565b602060405180830381865afa1580156134cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f39190615343565b9050808410156117fb578551604051639dd026db60e01b8152610a179190879087908590600401615f27565b60006040516020016120ed906020808252601290820152711254d7d3505492d15517d11254d05093115160721b604082015260600190565b60006135926040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b031663bd02d0f56135af86600001518661393f565b6040518263ffffffff1660e01b81526004016135cd91815260200190565b602060405180830381865afa1580156135ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360e9190615343565b8152835161361e90869085613970565b602082015283516001600160a01b0386169063bd02d0f5906136409086612f42565b6040518263ffffffff1660e01b815260040161365e91815260200190565b602060405180830381865afa15801561367b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369f9190615343565b604082015283516001600160a01b0386169063bd02d0f5906136c190866139ea565b6040518263ffffffff1660e01b81526004016136df91815260200190565b602060405180830381865afa1580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137209190615343565b606082015283516001600160a01b0386169063bd02d0f5906137429086613a24565b6040518263ffffffff1660e01b815260040161376091815260200190565b602060405180830381865afa15801561377d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a19190615343565b608082015283516001600160a01b0386169063bd02d0f5906137c39086613a61565b6040518263ffffffff1660e01b81526004016137e191815260200190565b602060405180830381865afa1580156137fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138229190615343565b60a08201819052608082015160608301516040840151602085015185516138499190615f50565b6138539190615f50565b61385d9190615f50565b6138679190615f50565b612ee19190615f50565b600081866001600160a01b031663bd02d0f561388e888888613a97565b6040518263ffffffff1660e01b81526004016138ac91815260200190565b602060405180830381865afa1580156138c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ed9190615343565b6138f79190615f63565b9695505050505050565b6000604051602001612f539060208082526018908201527710d31052535050931157d1955391125391d7d05353d5539560421b604082015260600190565b6000604051602001612f53906020808252600b908201526a1413d3d317d05353d5539560aa1b604082015260600190565b6000836001600160a01b031663bd02d0f561398b8585613b10565b6040518263ffffffff1660e01b81526004016139a991815260200190565b602060405180830381865afa1580156139c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190615343565b6000604051602001612f539060208082526014908201527310d31052535050931157d1915157d05353d5539560621b604082015260600190565b6000604051602001612f539060208082526017908201527610d31052535050931157d55257d1915157d05353d55395604a1b604082015260600190565b6000604051602001612f539060208082526010908201526f10519192531250551157d49155d0549160821b604082015260600190565b6000604051602001613acb906020808252600e908201526d434f4c4c41544552414c5f53554d60901b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915284166060820152821515608082015260a001612ff9565b6000604051602001612f539060208082526017908201527614d5d05417d253541050d517d413d3d317d05353d55395604a1b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613b8557613b85613b4d565b60405290565b604080519081016001600160401b0381118282101715613b8557613b85613b4d565b60405160e081016001600160401b0381118282101715613b8557613b85613b4d565b60405161012081016001600160401b0381118282101715613b8557613b85613b4d565b60405161018081016001600160401b0381118282101715613b8557613b85613b4d565b60405161010081016001600160401b0381118282101715613b8557613b85613b4d565b60405160c081016001600160401b0381118282101715613b8557613b85613b4d565b604051606081016001600160401b0381118282101715613b8557613b85613b4d565b604051601f8201601f191681016001600160401b0381118282101715613ca457613ca4613b4d565b604052919050565b60006001600160401b03821115613cc557613cc5613b4d565b5060051b60200190565b6001600160a01b0381168114610aa657600080fd5b803561146e81613ccf565b600082601f830112613d0057600080fd5b8135613d13613d0e82613cac565b613c7c565b8082825260208201915060208360051b860101925085831115613d3557600080fd5b602085015b83811015613d5b578035613d4d81613ccf565b835260209283019201613d3a565b5095945050505050565b600080600060608486031215613d7a57600080fd5b83356001600160401b03811115613d9057600080fd5b613d9c86828701613cef565b93505060208401356001600160401b03811115613db857600080fd5b613dc486828701613cef565b9250506040840135613dd581613ccf565b809150509250925092565b602080825282518282018190526000918401906040840190835b81811015613e18578351835260209384019390920191600101613dfa565b509095945050505050565b600060808284031215613e3557600080fd5b613e3d613b63565b905081356001600160401b03811115613e5557600080fd5b613e6184828501613cef565b82525060208201356001600160401b03811115613e7d57600080fd5b8201601f81018413613e8e57600080fd5b8035613e9c613d0e82613cac565b8082825260208201915060208360061b850101925086831115613ebe57600080fd5b6020840193505b82841015613f065760408488031215613edd57600080fd5b613ee5613b8b565b84358152602080860135818301529083526040909401939190910190613ec5565b60208501525050506040828101359082015260609182013591810191909152919050565b80356006811061146e57600080fd5b60008060408385031215613f4c57600080fd5b82356001600160401b03811115613f6257600080fd5b613f6e85828601613e23565b925050613f7d60208401613f2a565b90509250929050565b60008060408385031215613f9957600080fd5b8235613fa481613ccf565b91506020830135613fb481613ccf565b809150509250929050565b60008060408385031215613fd257600080fd5b8235915060208301356001600160401b03811115613fef57600080fd5b613ffb85828601613e23565b9150509250929050565b6001600160a01b0391909116815260200190565b60006020828403121561402b57600080fd5b5035919050565b6000806040838503121561404557600080fd5b823561405081613ccf565b946020939093013593505050565b60006020828403121561407057600080fd5b81356001600160401b0381111561408657600080fd5b6119fd84828501613e23565b600080602083850312156140a557600080fd5b82356001600160401b038111156140bb57600080fd5b8301601f810185136140cc57600080fd5b80356001600160401b038111156140e257600080fd5b8560208260051b84010111156140f757600080fd5b6020919091019590945092505050565b60005b8381101561412257818101518382015260200161410a565b50506000910152565b60008151808452614143816020860160208601614107565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b838110156141a757601f1985840301885261419183835161412b565b6020988901989093509190910190600101614175565b50909695505050505050565b6020815260006106d46020830184614157565b6000806000606084860312156141db57600080fd5b8335925060208401356001600160401b038111156141f857600080fd5b61420486828701613e23565b92505061421360408501613f2a565b90509250925092565b60006020828403121561422e57600080fd5b81356001600160401b0381111561424457600080fd5b820161012081850312156106d457600080fd5b60006020828403121561426957600080fd5b81356001600160401b0381111561427f57600080fd5b820160c081850312156106d457600080fd5b600060e082840312156142a357600080fd5b50919050565b600080604083850312156142bc57600080fd5b82356001600160401b038111156142d257600080fd5b6142de85828601614291565b92505060208301356001600160401b038111156142fa57600080fd5b830160608186031215613fb457600080fd5b60006001600160401b0382111561432557614325613b4d565b50601f01601f191660200190565b6000806000806080858703121561434957600080fd5b84356001600160401b0381111561435f57600080fd5b61436b87828801613cef565b94505060208501356001600160401b0381111561438757600080fd5b8501601f8101871361439857600080fd5b80356143a6613d0e82613cac565b8082825260208201915060208360051b8501019250898311156143c857600080fd5b602084015b8381101561444c5780356001600160401b038111156143eb57600080fd5b8501603f81018c136143fc57600080fd5b602081013561440d613d0e8261430c565b8181526040838301018e101561442257600080fd5b816040840160208301376000602083830101528086525050506020830192506020810190506143cd565b50955050505060408501356001600160401b0381111561446b57600080fd5b61447787828801613cef565b92505060608501356001600160401b0381111561449357600080fd5b61449f87828801613cef565b91505092959194509250565b8015158114610aa657600080fd5b803561146e816144ab565b600080600080600080600060e0888a0312156144df57600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135614514816144ab565b8091505092959891949750929550565b60008060006060848603121561453957600080fd5b833561454481613ccf565b9250602084013561455481613ccf565b929592945050506040919091013590565b60006020828403121561457757600080fd5b81356001600160401b0381111561458d57600080fd5b6119fd84828501614291565b600080600080608085870312156145af57600080fd5b84356001600160401b038111156145c557600080fd5b6145d187828801613cef565b94505060208501356001600160401b038111156145ed57600080fd5b6145f987828801613cef565b93505060408501356001600160401b0381111561461557600080fd5b8501601f8101871361462657600080fd5b8035614634613d0e82613cac565b8082825260208201915060208360051b85010192508983111561465657600080fd5b6020840193505b8284101561467857833582526020938401939091019061465d565b945061468a9250505060608601613ce4565b905092959194509250565b6000602082840312156146a757600080fd5b81356001600160401b038111156146bd57600080fd5b820161020081850312156106d457600080fd5b6001600160a01b03169052565b600081518084526020840193506020830160005b828110156147185781516001600160a01b03168652602095860195909101906001016146f1565b5093949350505050565b6001600160a01b0387811682528616602082015260c06040820181905260009061474e908301876146dd565b828103606084015261476081876146dd565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b60006020828403121561479957600080fd5b81516001600160401b038111156147af57600080fd5b8201601f810184136147c057600080fd5b80516147ce613d0e82613cac565b8082825260208201915060208360051b8501019250868311156147f057600080fd5b6020840193505b828410156138f75783518252602093840193909101906147f7565b600081516080845261482760808501826146dd565b6020848101518683038783015280518084529082019350600092909101905b80831015614876578351805183526020810151602084015250604082019150602084019350600183019250614846565b50604085015160408701526060850151606087015280935050505092915050565b634e487b7160e01b600052602160045260246000fd5b8381526060602082015260006148c66060830185614812565b9050600683106148d8576148d8614897565b826040830152949350505050565b8281526040602082015260006119fd6040830184614812565b6001600160a01b03929092168252602082015260400190565b805161146e81613ccf565b600082601f83011261493457600080fd5b8151614942613d0e82613cac565b8082825260208201915060208360051b86010192508583111561496457600080fd5b602085015b83811015613d5b57805161497c81613ccf565b835260209283019201614969565b600060e0828403121561499c57600080fd5b6149a4613bad565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0928301519281019290925250919050565b6000602082840312156149ff57600080fd5b604051602081016001600160401b0381118282101715614a2157614a21613b4d565b80604052508091508251614a34816144ab565b905292915050565b600082601f830112614a4d57600080fd5b8151614a5b613d0e82613cac565b8082825260208201915060208360051b860101925085831115614a7d57600080fd5b602085015b83811015613d5b578051835260209283019201614a82565b600060208284031215614aac57600080fd5b81516001600160401b03811115614ac257600080fd5b82016101408185031215614ad557600080fd5b614add613b63565b81516001600160401b03811115614af357600080fd5b82016101208187031215614b0657600080fd5b614b0e613bcf565b614b1782614918565b8152614b2560208301614918565b6020820152614b3660408301614918565b6040820152614b4760608301614918565b6060820152614b5860808301614918565b6080820152614b6960a08301614918565b60a0820152614b7a60c08301614918565b60c082015260e08201516001600160401b03811115614b9857600080fd5b614ba488828501614923565b60e0830152506101008201516001600160401b03811115614bc457600080fd5b614bd088828501614923565b61010083015250825250614be7856020840161498a565b6020820152614bfa8561010084016149ed565b60408201526101208201516001600160401b03811115614c1957600080fd5b614c2586828501614a3c565b606083015250949350505050565b600060208284031215614c4557600080fd5b81516001600160401b03811115614c5b57600080fd5b82016101408185031215614c6e57600080fd5b614c76613b63565b81516001600160401b03811115614c8c57600080fd5b820160e08187031215614c9e57600080fd5b614ca6613bad565b614caf82614918565b8152614cbd60208301614918565b6020820152614cce60408301614918565b6040820152614cdf60608301614918565b6060820152614cf060808301614918565b608082015260a08201516001600160401b03811115614d0e57600080fd5b614d1a88828501614923565b60a08301525060c08201516001600160401b03811115614d3957600080fd5b614d4588828501614923565b60c083015250825250614be7856020840161498a565b60098110610aa657600080fd5b805161146e81614d5b565b60038110610aa657600080fd5b805161146e81614d73565b60006101808284031215614d9e57600080fd5b614da6613bf2565b9050614db182614d68565b8152614dbf60208301614d80565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101609182015191810191909152919050565b600060808284031215614e4657600080fd5b614e4e613b63565b90508151614e5b816144ab565b81526020820151614e6b816144ab565b60208201526040820151614e7e816144ab565b60408201526060820151614e91816144ab565b606082015292915050565b600060208284031215614eae57600080fd5b81516001600160401b03811115614ec457600080fd5b82016102408185031215614ed757600080fd5b614edf613b63565b81516001600160401b03811115614ef557600080fd5b82016101008187031215614f0857600080fd5b614f10613c15565b614f1982614918565b8152614f2760208301614918565b6020820152614f3860408301614918565b6040820152614f4960608301614918565b6060820152614f5a60808301614918565b6080820152614f6b60a08301614918565b60a0820152614f7c60c08301614918565b60c082015260e08201516001600160401b03811115614f9a57600080fd5b614fa688828501614923565b60e083015250825250614fbc8560208401614d8b565b6020820152614fcf856101a08401614e34565b60408201526102208201516001600160401b03811115614c1957600080fd5b600060c0828403121561500057600080fd5b615008613c38565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b60006020828403121561505957600080fd5b81516001600160401b0381111561506f57600080fd5b82018084036101a081121561508357600080fd5b61508b613c5a565b60c082121561509957600080fd5b6150a1613c38565b915082516150ae81613ccf565b825260208301516150be81613ccf565b602083015260408301516150d181613ccf565b604083015260608301516150e481613ccf565b606083015260808301516150f781613ccf565b608083015260a083015161510a81613ccf565b60a083015281815261511f8660c08501614fee565b602082015261018083015191506001600160401b0382111561514057600080fd5b61514c86838501614a3c565b604082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261518757600080fd5b8301803591506001600160401b038211156151a157600080fd5b6020019150368190038213156151b657600080fd5b9250929050565b8183823760009101908152919050565b6000808335601e198436030181126151e457600080fd5b83016020810192503590506001600160401b0381111561520357600080fd5b8060051b36038213156151b657600080fd5b81835260006001600160fb1b0383111561522e57600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038416815260208101839052606060408201526000823561526e81613ccf565b6001600160a01b03166060830152602083013561528a81613ccf565b6001600160a01b0316608083015260408301356152a681613ccf565b6001600160a01b031660a083015260608301356152c281613ccf565b6001600160a01b031660c083015260808301356152de81613ccf565b6001600160a01b031660e08381019190915260a08401356101008085019190915260c085013561012085015290840135610140840152615320908401846151cd565b61012061016085015261533861018085018284615215565b979650505050505050565b60006020828403121561535557600080fd5b5051919050565b81835260208301925060008160005b8481101561471857813561537e81613ccf565b6001600160a01b03168652602095860195919091019060010161536b565b6001600160a01b03841681526020810183905260606040820152600082353684900360fe190181126153cd57600080fd5b60c06060840152830180356153e181613ccf565b6153ef6101208501826146d0565b506153fc60208201613ce4565b61540a6101408501826146d0565b5061541760408201613ce4565b6154256101608501826146d0565b5061543260608201613ce4565b6154406101808501826146d0565b5061544d60808201613ce4565b61545b6101a08501826146d0565b5061546860a08201613ce4565b6154766101c08501826146d0565b5061548460c08201826151cd565b6101006101e086015261549c6102208601828461535c565b9150506154ac60e08301836151cd565b85830361011f190161020087015292506154c782848361535c565b6020870135608087015292506154e2915050604085016144b9565b80151560a085015250606084013560c0840152608084013560e084015261550c60a08501856151cd565b848303605f1901610100860152615524838284615215565b98975050505050505050565b6000813561553d81613ccf565b6001600160a01b03168352602082013561555681613ccf565b6001600160a01b03166020840152604082013561557281613ccf565b6001600160a01b0316604084015261558c60608301613ce4565b61559960608501826146d0565b506155a760808301836151cd565b60c060808601526155bc60c08601828461535c565b9150506155cc60a08401846151cd565b85830360a08701526138f783828461535c565b6000813560be198336030181126155f557600080fd5b60e0845261560860e08501848301615530565b6020848101359086015260408085013590860152905061562a606084016144b9565b151560608501526080838101359085015260a0808401359085015261565260c08401846151cd565b85830360c08701526138f7838284615215565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526060602082018190526000906156b2908301856155df565b82810360408401526156c484856151cd565b606083526156d660608401828461535c565b9150506156e660208601866151cd565b83830360208501526156f983828461535c565b9250505061570a60408601866151cd565b838303604085015282935080835260208301935060208160051b840101826000601e19853603015b848210156157a257868403601f19018852823581811261575157600080fd5b86016020810190356001600160401b0381111561576d57600080fd5b80360382131561577c57600080fd5b615787868284615665565b95505050602083019250602088019750600182019150615732565b50919b9a5050505050505050505050565b6080815260006157c660808301876146dd565b82810360208401526157d88187614157565b905082810360408401526157ec81866146dd565b9050828103606084015261533881856146dd565b6009811061581057615810614897565b9052565b6003811061581057615810614897565b61582f828251615800565b60208101516158416020840182615814565b5060408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516101608301525050565b600081518084526020840193506020830160005b828110156147185781518652602095860195909101906001016158c6565b8981528860208201528760408201528660608201528560808201528460a082015283151560c082015261012060e08201526000835161024061012084015260018060a01b0381511661036084015260018060a01b0360208201511661038084015260408101516159586103a08501826146d0565b50606081015161596c6103c08501826146d0565b5060808101516159806103e08501826146d0565b5060a08101516159946104008501826146d0565b5060c08101516159a86104208501826146d0565b5060e001516101006104408401526159c46104608401826146dd565b905060208501516159d9610140850182615824565b50604085810151805115156102c0860152602081015115156102e0860152908101511515610300850152606090810151151561032085015285015161011f1984830301610340850152615a2c82826158b2565b92505050615a3f61010083018415159052565b9a9950505050505050505050565b60018060a01b0384168152826020820152606060408201526000612ee160608301846155df565b6000823560de19833603018112615a8a57600080fd5b90910192915050565b60008135615aa081613ccf565b6001600160a01b031683526020820135615ab981613ccf565b6001600160a01b03166020840152615ad360408301613ce4565b615ae060408501826146d0565b50615aed60608301613ce4565b615afa60608501826146d0565b50615b0760808301613ce4565b615b1460808501826146d0565b50615b2160a08301613ce4565b615b2e60a08501826146d0565b50615b3c60c08301836151cd565b60e060c0860152612ee160e08601828461535c565b803561146e81614d5b565b803561146e81614d73565b6001600160a01b038516815260208101849052608060408201526000615b8d8480615a74565b6102006080840152615ba3610280840182615a93565b9050615bfb60a0840160208701803582526020808201359083015260408082013590830152606080820135908301526080808201359083015260a0808201359083015260c0808201359083015260e090810135910152565b615c086101208601615b51565b615c166101a0850182615800565b50615c246101408601615b5c565b615c326101c0850182615814565b50615c4061016086016144b9565b15156101e0840152615c5561018086016144b9565b1515610200840152615c6a6101a086016144b9565b15156102208401526101c0850135610240840152615c8c6101e08601866151cd565b848303607f1901610260860152615ca4838284615215565b9350505050612ee1606083018415159052565b918252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020815260006106d4602083018461412b565b600060208284031215615d0e57600080fd5b81516106d481613ccf565b604081526000615d2c604083018561412b565b8281036020840152612ee1818561412b565b600060208284031215615d5057600080fd5b81516001600160401b03811115615d6657600080fd5b8201601f81018413615d7757600080fd5b8051615d85613d0e8261430c565b818152856020838501011115615d9a57600080fd5b612ee1826020830160208601614107565b634e487b7160e01b600052601160045260246000fd5b8181038181111561132257611322615dab565b60008251615de6818460208701614107565b9190910192915050565b600060208284031215615e0257600080fd5b81516106d4816144ab565b6020808252601b908201527a10d31052535050931157d0d3d31310551154905317d05353d55395602a1b604082015260600190565b808202811582820484141761132257611322615dab565b6020808252601b908201527a21a620a4a6a0a12622afa1a7a62620aa22a920a62fa320a1aa27a960291b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b60006080828403128015615ebb57600080fd5b50615ec4613b63565b8251615ecf81613ccf565b81526020830151615edf81613ccf565b60208201526040830151615ef281613ccf565b60408201526060830151615f0581613ccf565b60608201529392505050565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b8082018082111561132257611322615dab565b600082615f8057634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122023e834ca42f34b363ec0ea15f4bac2dbdc2bb7aeaa7acb6b136e8949e6770e2864736f6c634300081d00330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb0000000000000000000000002571197bbea0547477edde419cf910802dfc583f000000000000000000000000a82b86ea8db3e60287d674cc800d9616082450890000000000000000000000008b28a7a084d809bbfe6b49addb1890afbbae6e510000000000000000000000006ccd77f770e7213c584ff8bfbf47c7a0bda30665000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5