0 txs
0 calls
constructor
constructor(address usdc_, address dsu_, address marketFactory_, address vaultFactory_, address batcher_, address reserve_, uint256 keepBufferBase_, uint256 keepBufferCalldata_)
functions
batcher
viewfunction batcher() view returns (address)
canExecuteOrder
viewfunction canExecuteOrder(address account, address market, uint256 nonce) view returns (bool)
claimable
viewfunction claimable(address) view returns (uint256)
DSU
viewfunction DSU() view returns (address)
ethTokenOracleFeed
viewfunction ethTokenOracleFeed() view returns (address)
keepBufferBase
viewfunction keepBufferBase() view returns (uint256)
keepBufferCalldata
viewfunction keepBufferCalldata() view returns (uint256)
keeperToken
viewfunction keeperToken() view returns (address)
latestNonce
viewfunction latestNonce() view returns (uint256)
marketFactory
viewfunction marketFactory() view returns (address)
operators
viewfunction operators(address, address) view returns (bool)
OPT_BASE_FEE_MULTIPLIER
viewfunction OPT_BASE_FEE_MULTIPLIER() view returns (uint256)
orders
viewfunction orders(address account, address market, uint256 nonce) view returns (tuple)
reserve
viewfunction reserve() view returns (address)
USDC
viewfunction USDC() view returns (address)
vaultFactory
viewfunction vaultFactory() view returns (address)
claim
nonpayablefunction claim(address account, bool unwrap)
initialize
nonpayablefunction initialize(address ethOracle_)
invoke
payablefunction invoke(tuple[] invocations) payable
invoke
payablefunction invoke(address account, tuple[] invocations) payable
updateOperator
nonpayablefunction updateOperator(address operator, bool newEnabled)
events
Initialized
event Initialized(uint256 version)
InterfaceFeeCharged
event InterfaceFeeCharged(address indexed account, address indexed market, (uint256 amount, address receiver) fee)
KeeperCall
event KeeperCall(address indexed sender, uint256 applicableGas, uint256 applicableValue, uint256 baseFee, uint256 calldataFee, uint256 keeperFee)
KeeperFeeCharged
event KeeperFeeCharged(address indexed account, address indexed market, address indexed to, uint256 fee)
OperatorUpdated
event OperatorUpdated(address indexed account, address indexed operator, bool newEnabled)
OrderCancelled
event OrderCancelled(address indexed account, address indexed market, uint256 nonce)
OrderExecuted
event OrderExecuted(address indexed account, address indexed market, uint256 nonce)
OrderPlaced
event OrderPlaced(address indexed account, address indexed market, uint256 indexed nonce, (uint8 side, int8 comparison, uint256 fee, int256 price, int256 delta, (uint256 amount, address receiver) interfaceFee1, (uint256 amount, address receiver) interfaceFee2) order)
errors
DivisionByZero
error DivisionByZero()
Fixed18OverflowError
error Fixed18OverflowError(uint256 value)
Fixed6OverflowError
error Fixed6OverflowError(uint256 value)
InitializableAlreadyInitializedError
error InitializableAlreadyInitializedError(uint256 version)
InitializableNotInitializingError
error InitializableNotInitializingError()
InitializableZeroVersionError
error InitializableZeroVersionError()
MultiInvokerCantExecuteError
error MultiInvokerCantExecuteError()
MultiInvokerInvalidInstanceError
error MultiInvokerInvalidInstanceError()
MultiInvokerInvalidOrderError
error MultiInvokerInvalidOrderError()
MultiInvokerMaxFeeExceededError
error MultiInvokerMaxFeeExceededError()
MultiInvokerOrderMustBeSingleSidedError
error MultiInvokerOrderMustBeSingleSidedError()
MultiInvokerUnauthorizedError
error MultiInvokerUnauthorizedError()
TriggerOrderStorageInvalidError
error TriggerOrderStorageInvalidError()
UFixed18UnderflowError
error UFixed18UnderflowError(int256 value)
UFixed6UnderflowError
error UFixed6UnderflowError(int256 value)
creation bytecode
0x6101803462000294576200624d38819003601f8101601f191683016001600160401b0381118482101762000298578392829160405283396101009283918101031262000294576200005081620002ac565b6200005e60208301620002ac565b916200006d60408201620002ac565b6200007b60608301620002ac565b60808301516001600160a01b03959092908684168403620002945760a08501519687168703620002945760e060c08601519501519560805260a05260c05260e052845261012092835261014090815261016091825260405192615f8b9485620002c2863960805185818161286c01528181614b41015281816152e20152818161542d0152818161583901526159a1015260a05185818161037b0152818161046c015281816109120152818161191101528181611a24015281816120920152818161218c015281816121b3015281816122cb0152818161279c01528181612ac001528181612ba301528181612ff8015281816130b601528181613eed01528181614000015281816145ff015281816146e4015281816147eb01528181614a9a0152818161547c0152818161595f01526159d4015260c05185818161033c015281816106cb01528181610b38015281816118d2015281816122870152818161243301528181612a8101528181612dc00152818161321101528181613eae015281816147a30152818161493a0152614ce3015260e0518581816108d4015281816123130152818161269c01528181612fb6015261482501525184818161281a01528181614d24015281816152b101526158680152518381816126fb0152818161284301528181615310015261589901525182818161111d015281816125f20152613766015251818181611149015281816125b801526137920152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620002945756fe6080806040526004361015610012575f80fd5b5f3560e01c908163025a3a2914614d075750806306ae709514614cc45780632637588e14614c6e57806332878cc914614c29578063402914f514614bf15780636d44a3b214614b6557806389a3027114614b2257806392fd2daf14614abe578063a2060bcf14614a7b578063b20caf4514614a36578063bdec4a2714612934578063c4d66de81461271f578063cd3293de146126dc578063cf542a4d146126c0578063d8a06f731461267d578063db90490214612662578063dd02df1614612638578063df80522a14612615578063f331efef146125db578063f3a8f356146125a15763f5ad712614610103575f80fd5b60406003193601126104e557610117614d48565b60243567ffffffffffffffff81116104e557610137903690600401614d8d565b90336001600160a01b038416141580612577575b61254d575f5b82811061022657478047106101e2575f80808093335af161017061576e565b501561017857005b608460405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b8060051b820135603e19833603018112156104e55782016040813603126104e5576040519061025482614e79565b8035600b8110156104e5578252602081013567ffffffffffffffff81116104e55736601f8284010112156104e557610294913691018035906020016154bc565b60208201528051600b8110156125395760010361056d5760200151908151820161014083602083019203126104e5576102cf602084016154f2565b9260408101519360608201519460808301519260a08101519161030f6102f760c0840161511c565b966101206103088260e08701615569565b9401615569565b9460405163032bb44360e01b81526001600160a01b03861660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91610533575b5015610509576103a461039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b615a16565b938c8860016103b284615a70565b146104ef575b505060208401516001600160a01b0316806104e957506001600160a01b03602088015116915b6001600160a01b0387163b156104e5576001600160a01b039a8b948f60046040519e8f9263977b1f5f60e01b84521691015260248d015260448c015260648b015260848a01525f60a48a01521660c48801525f8760e481836001600160a01b0388165af19485156104da5764e8d4a510006104956104a69460019a6104ac996104cb575b5061049061039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b615a8c565b0590816104b2575b5050828a615aa4565b87615aa4565b01610151565b6104be6104c492615de6565b8c61545d565b5f8061049d565b6104d490614e95565b5f610462565b6040513d5f823e3d90fd5b5f80fd5b916103de565b610502916104fc84615de6565b9061598f565b8c886103b8565b60046040517f47b7c1b0000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011610565575b8161054e60209383614f36565b810103126104e55761055f9061511c565b5f61036c565b3d9150610541565b8051600b8110156125395760090361084f57602001519081518201916101c0818403126104e5576105a0602082016154f2565b92610180601f1983830301126104e557604051916105bd83614ee2565b6040810151835260608101516020840152608081015160408401526105e460a082016154f2565b60608401526105f560c082016154f2565b608084015260e081015160a084015260c060df1982840301126104e55760405161061e81614efe565b61062b61010083016154f2565b815261063a61012083016154f2565b602082015261064c61014083016154f2565b6040820152610160820151606082015261018082015160808201526101a082015160a082015260c08401526101c08101519167ffffffffffffffff83116104e55761069e926020809201920101615527565b9060405163032bb44360e01b81526001600160a01b03851660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91610815575b5015610509576001600160a01b0384163b156104e55760c0936001600160a01b035f818a6107ec839760a06040519b8c998a9889967f736a01df0000000000000000000000000000000000000000000000000000000088521660048701528051602487015260208101516044870152604081015160648701528660608201511660848701528660808201511660a48701528281015160c487015201518581511660e486015285602082015116610104860152856040820151166101248601526060810151610144860152608081015161016486015201516101848401526101c06101a48401526101c4830190615749565b0393165af19182156104da57600192610806575b506104ac565b61080f90614e95565b5f610800565b90506020813d602011610847575b8161083060209383614f36565b810103126104e5576108419061511c565b5f6106fb565b3d9150610823565b8051600b81101561253957600203610a5257602001519081805160a0938491810103126104e5576020810151926001600160a01b03841684036104e5576040820151936108a76060840151926080850151940161511c565b9260405163032bb44360e01b81526001600160a01b03831660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91610a18575b50156105095785610a08575b7f00000000000000000000000000000000000000000000000000000000000000009161093c308461579d565b936001600160a01b0382163b156104e55760848b5f6001600160a01b03819581956040519d8e9788967fd2c3aaf200000000000000000000000000000000000000000000000000000000885216600487015260248601526044850152876064850152165af19586156104da576001966109f9575b506109d85750505f905b816109c7575b50506104ac565b6109d1918761545d565b5f806109c0565b64e8d4a51000916109ed6109f292309061579d565b615821565b04906109ba565b610a0290614e95565b5f6109b0565b610a1384878b61598f565b610910565b90506020813d602011610a4a575b81610a3360209383614f36565b810103126104e557610a449061511c565b5f610904565b3d9150610a26565b8051600b81101561253957600303610fec5760200151805181018181039061014082126104e557610120601f19610a8b602086016154f2565b9301126104e55760405192610a9f84614ee2565b604081015160ff811681036104e5578452606081015191825f0b83036104e557602061012091610b0794828801526080840151604088015260a0840151606088015260c08401516080880152610afa82820160e08601615569565b60a0880152019101615569565b60c083015260405163032bb44360e01b81526001600160a01b03821660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91610fb2575b501561050957604082015115610f405760208201515f0b5f198114159081610fa6575b50610f405760ff82511660038111908115610f6a575b50610f40576001600160a01b0386165f52600160205260405f206001600160a01b0382165f5260205260405f205f545f198114610f2c57600101805f555f5260205260405f2060ff8084511611610f0257607f60208401515f0b13610f0257607f1960208401515f0b12610f02576002610c1e6040850151615c32565b14610f02576002610c326060850151615ec2565b14610f0257610c446060840151615e77565b15610f02576002610c586080850151615ec2565b14610f0257610c6a6080840151615e77565b15610f02576002610c7f60a085015151615c58565b14610f02576002610c9460c085015151615c58565b14610f0257825160ff166020840151604085015191606086015193608087015160a08801519560208701516001600160a01b0316965165ffffffffffff169560c08a01519460208601516001600160a01b0316955165ffffffffffff1696604051610cfe81614ec5565b828152815f0b602082015267ffffffffffffffff841660408201528460070b60608201528560070b608082015260a081015f90528a60c08201528960e082015261010081015f90528761012082015288610140820152610160015f905260081b61ff0016179060101b69ffffffffffffffff000016179060501b71ffffffffffffffff0000000000000000000016179060901b79ffffffffffffffff0000000000000000000000000000000000001617815560018101937fffffffffffffffffffffffff00000000000000000000000000000000000000009586865416178555610e2e9085907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff79ffffffffffff000000000000000000000000000000000000000083549260a01b169116179055565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff9384815416905560020193845416178355610eaa9083907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff79ffffffffffff000000000000000000000000000000000000000083549260a01b169116179055565b81541690555f5491604051916001600160a01b031691806001600160a01b03891692610ed69082614df3565b037fb32ded07b7d673202a5f35a959c39fc092a3d213bff00dadc295545acedf22d391a46001906104ac565b60046040517ff3469aa7000000000000000000000000000000000000000000000000000000008152fd5b634e487b7160e01b5f52601160045260245ffd5b60046040517fb6befb58000000000000000000000000000000000000000000000000000000008152fd5b600391501480610f7b575b5f610ba1565b50610f896080830151615eaa565b60028114908115610f9b575b50610f75565b60019150145f610f95565b6001915014155f610b8b565b90506020813d602011610fe4575b81610fcd60209383614f36565b810103126104e557610fde9061511c565b5f610b68565b3d9150610fc0565b8051600b8110156125395760040361109e5760200151906040828051810103126104e5578160406110216020600195016154f2565b9101516001600160a01b0387165f52836020526001600160a01b0360405f20921691825f5260205260405f20815f526020525f600260408220828155828782015501556040519081527fd23ac4476ccf3eeb78c76d4b7bb113597bcd16c15d47656627ea6221d685ad7360206001600160a01b03891692a36104ac565b8051600b81101561253957600503611f985760200151906060828051810103126104e5576110ce602083016154f2565b60606110dc604085016154f2565b9301516110f381856001600160a01b038516615129565b15611f6e5761110c81856001600160a01b038516614fb8565b60405161111881614ea9565b5f81527f000000000000000000000000000000000000000000000000000000000000000060208201525f60408201527f000000000000000000000000000000000000000000000000000000000000000060608201526040820151604051906001600160a01b03861660208301526001600160a01b03881660408301526060820152606081526111a681614ea9565b604051916111b383614f1a565b5f83525f6020840152670de0b6b3a76400006111f282516111ed836111dc6020870151936156b7565b046111e7489361569a565b90615cbd565b6156c5565b049261123e60206060604085015194015192604051809381927fde26c4a10000000000000000000000000000000000000000000000000000000083528460048401526024830190615749565b038173420000000000000000000000000000000000000f5afa9081156104da575f91611f3c575b506040517fc598591800000000000000000000000000000000000000000000000000000000815260208160048173420000000000000000000000000000000000000f5afa9081156104da575f91611f0a575b507f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610f2c57604051907f519b4bd300000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9081156104da575f91611ed4575b611340925060041b6156c5565b604051907f68d5dca600000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9182156104da575f92611ea0575b506040517ff820614000000000000000000000000000000000000000000000000000000000815260208160048173420000000000000000000000000000000000000f5afa9081156104da575f91611e6c575b506111e7906113f2936156c5565b91604051907f313ce56700000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9182156104da575f92611e38575b50604d8211610f2c577f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82600a0a1682600a0a03610f2c576111e7670de0b6b3a76400006114ae81976111ed6114a86114b5996111ed98600a0a60041b906159f8565b9761569a565b049161569a565b04906114c18284615cbd565b600460a06001600160a01b037f2b50211693ec91bcfe327771928b74a8f475c508d53e86fca4153bcf0f0e87765416604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa9081156104da575f91611deb575b5080670de0b6b3a7640000810205670de0b6b3a76400001481151715610f2c575f6305f5e100670de0b6b3a764000083020512611daa57670de0b6b3a7640000916305f5e1008361157d930205906156c5565b046060828051810103126104e557611597602083016154f2565b9060606115a6604085016154f2565b9301519080611d6f57506001600160a01b03916115dd936115d8925f905b80821015611d6557509384925b1690615df5565b6156d8565b9061160a82337f5b5cbfa852c5bd03e540eba853f8faf28a604a4d82bee1091096bfaea14d08c3546156f2565b604051925f84525f60208501526040840152606083015260808201527ffa0333956d06e335c550bd5fc4ac9c003c6545e371331b1071fa4d5d8519d6c160a03392a26001600160a01b0385163b156104e5576040517f6a256b290000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201525f81602481836001600160a01b038b165af180156104da57611d56575b506040517f6e1936800000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152610180816024816001600160a01b038a165afa9081156104da575f91611c9f575b50604051917f55f575100000000000000000000000000000000000000000000000000000000083526001600160a01b03851660048401526080836024816001600160a01b038b165afa9283156104da575f93611c3e575b508151835261176e6020840151615ce1565b61179161177e6060850151615ce1565b61178b6080860151615ce1565b90615a8c565b80808301125f8312908015821691151617610f2c576117b09101615d3c565b916117be6040850151615ce1565b6117db6117ce60a0840151615ce1565b61178b60c0850151615ce1565b80808301125f8312908015821691151617610f2c576117fa9101615d3c565b9061182761180b6060870151615ce1565b9161178b61010061181f60e0840151615ce1565b920151615ce1565b80808301125f8312908015821691151617610f2c576118469101615d3c565b606085015260408401528160208401525f9160ff82511615611bf2575b50600160ff82511614611ba8575b600260ff82511614611b5e575b600360ff82511614611b19575b6020830151606060408501519401519360c060a08401519301519460405163032bb44360e01b81526001600160a01b038b1660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91611adf575b50156105095761193561039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b94600161194182615a70565b14611abf575b60208501516001600160a01b031680611ab957506001600160a01b03602088015116915b6001600160a01b038c163b156104e5576001600160a01b03936040519563977b1f5f60e01b8752858c16600488015260248701526044860152606485015260848401525f60a48401521660c48201525f8160e481836001600160a01b038d165af19788156104da57611a627f889f0643d669fbac53cbc7d1826992b9bce1fab5e9644034cffb9c0137fe9dd195611a596001600160a01b039564e8d4a51000611a4860209960019f988a996104cb575061049061039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b0580611a9f575b5084868c16615aa4565b82848a16615aa4565b8187165f5288845260405f208282165f52845260405f20865f5284525f600260408220828155828c820155015560405195865216941692a36104ac565b611aab611ab391615de6565b878d1661529a565b5f611a4f565b9161196b565b611ada611acb82615de6565b6001600160a01b038b1661582e565b611947565b90506020813d602011611b11575b81611afa60209383614f36565b810103126104e557611b0b9061511c565b5f611902565b3d9150611aed565b905060808101516001611b2b82615e77565b03611b5957507f80000000000000000000000000000000000000000000000000000000000000005b9061188b565b611b53565b608081018051611b7557505f5b606084015261187e565b611b826060850151615ce1565b905180808301125f8312908015821691151617610f2c57611ba39101615d3c565b611b6b565b608081018051611bbf57505f5b6040840152611871565b611bcc6040850151615ce1565b905180808301125f8312908015821691151617610f2c57611bed9101615d3c565b611bb5565b60808201908151155f14611c0f5750505f5b60208401525f611863565b611c1890615ce1565b905180808301125f8312908015821691151617610f2c57611c399101615d3c565b611c04565b9092506080813d608011611c97575b81611c5a60809383614f36565b810103126104e557606060405191611c7183614ea9565b80518352602081015160208401526040810151604084015201516060820152915f61175c565b3d9150611c4d565b9050610180813d61018011611d4e575b81611cbd6101809383614f36565b810103126104e55760405190611cd282614ec5565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c0808201519083015260e081015160e083015261010080820151908301526101208082015190830152610140808201519083015261016080910151908201525f611705565b3d9150611caf565b611d5f90614e95565b5f6116ae565b90509384926115d1565b5f198193929301908111610f2c5764e8d4a51000900490600182018211610f2c576115dd936001600160a01b039360016115d89401906115c4565b6024906305f5e100670de0b6b3a7640000604051927f501f289e00000000000000000000000000000000000000000000000000000000845202056004820152fd5b905060a0813d60a011611e30575b81611e0660a09383614f36565b810103126104e557611e1781615cca565b50611e29608060208301519201615cca565b505f61152a565b3d9150611df9565b9091506020813d602011611e64575b81611e5460209383614f36565b810103126104e55751905f611445565b3d9150611e47565b90506020813d602011611e98575b81611e8760209383614f36565b810103126104e557516113f26113e4565b3d9150611e7a565b9091506020813d602011611ecc575b81611ebc60209383614f36565b810103126104e55751905f611392565b3d9150611eaf565b90506020823d602011611f02575b81611eef60209383614f36565b810103126104e557611340915190611333565b3d9150611ee2565b90506020813d602011611f34575b81611f2560209383614f36565b810103126104e557515f6112b7565b3d9150611f18565b90506020813d602011611f66575b81611f5760209383614f36565b810103126104e557515f611265565b3d9150611f4a565b60046040517f6f462962000000000000000000000000000000000000000000000000000000008152fd5b8051600b8110156125395760060361222b57602001518051810160c0828203126104e557611fc8602083016154f2565b60408301519060608401519167ffffffffffffffff83116104e55760208401603f8487010112156104e557602083860101519267ffffffffffffffff8411612217578360051b90604051946120206020840187614f36565b855260208501809260208801604082858c010101116104e5576040838a0101915b604082858c0101018310612207575050505060808601519460a087015167ffffffffffffffff81116104e55761208460c09160208061208b9501918b0101615527565b970161511c565b956120b6307f000000000000000000000000000000000000000000000000000000000000000061579d565b956001600160a01b0385163b156104e5576040517f1e298b9000000000000000000000000000000000000000000000000000000000815260606004820152955160648701819052869493608486019392915f905b8082106121eb575050508461213d81945f9896946001600160a01b03946024850152600319848303016044850152615749565b0393165af190816121dc575b5061217a575061215761576e565b9061216557506001906104ac565b6040519061217282614f1a565b5f8252615c82565b60019291506121b06121d7916109ed307f000000000000000000000000000000000000000000000000000000000000000061579d565b337f00000000000000000000000000000000000000000000000000000000000000006156f2565b6104ac565b6121e590614e95565b5f612149565b825186528997506020958601959092019160019091019061210a565b8251815260209283019201612041565b634e487b7160e01b5f52604160045260245ffd5b8051600b811015612539576008036123be57602001516020818051810103126104e55761226260206001600160a01b0392016154f2565b169060405163032bb44360e01b81528260048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91612384575b5015806122ef575b610509576121d76001927f0000000000000000000000000000000000000000000000000000000000000000615598565b5060405163032bb44360e01b81528260048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f9161234a575b50156122bf565b90506020813d60201161237c575b8161236560209383614f36565b810103126104e5576123769061511c565b5f612343565b3d9150612358565b90506020813d6020116123b6575b8161239f60209383614f36565b810103126104e5576123b09061511c565b5f6122b7565b3d9150612392565b8051600b81101561253957600a146123da575b506001906104ac565b60200151906040828051810103126104e55761240460406123fd602085016154f2565b930161511c565b916001600160a01b036040519163032bb44360e01b835216908160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f916124ff575b50156105095760205f916024604051809481937f6ebc51e10000000000000000000000000000000000000000000000000000000083526001600160a01b038c1660048401525af19081156104da575f916124cc575b506001926124c6918761545d565b906123d1565b90506020813d6020116124f7575b816124e760209383614f36565b810103126104e5575160016124b8565b3d91506124da565b90506020813d602011612531575b8161251a60209383614f36565b810103126104e55761252b9061511c565b5f612463565b3d915061250d565b634e487b7160e01b5f52602160045260245ffd5b60046040517f42ecdedb000000000000000000000000000000000000000000000000000000008152fd5b506001600160a01b0383165f52600260205260405f20335f5260205260ff60405f2054161561014b565b346104e5575f6003193601126104e55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346104e5575f6003193601126104e55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346104e557602061262e61262836614dbe565b91615129565b6040519015158152f35b346104e55761265e61265261264c36614dbe565b91614fb8565b60405191829182614df3565b0390f35b346104e5575f6003193601126104e557602060405160108152f35b346104e5575f6003193601126104e55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104e5575f6003193601126104e55760205f54604051908152f35b346104e5575f6003193601126104e55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104e55760206003193601126104e5576004356001600160a01b038082168092036104e5577f6fee9688c285c5c5c97d6a1a29adced674e6b2ad0888b8ad2116b58a8b3ea24860028154101561290357600290557f2801b00eb06461cf9fcb9758b5fafd884ff06a86177386f73b6c49f0bf5a5af090600182557f0000000000000000000000000000000000000000000000000000000000000000303b1515806128fc575b6128d25761286a612890925f957f2b50211693ec91bcfe327771928b74a8f475c508d53e86fca4153bcf0f0e877655827f5b5cbfa852c5bd03e540eba853f8faf28a604a4d82bee1091096bfaea14d08c355807f000000000000000000000000000000000000000000000000000000000000000016806128be575b507f0000000000000000000000000000000000000000000000000000000000000000168092615598565b7f0000000000000000000000000000000000000000000000000000000000000000615598565b557fbe9b076dc5b65990cca9dd9d7366682482e7817a6f6bc7f4faf4dc32af497f32602060405160028152a1005b8061286a6128cc9286615598565b86612840565b60046040517fb9a621e1000000000000000000000000000000000000000000000000000000008152fd5b505f6127c5565b60246040517f3db738da00000000000000000000000000000000000000000000000000000000815260026004820152fd5b60206003193601126104e55760043567ffffffffffffffff81116104e557612960903690600401614d8d565b905f5b82811061298257478047106101e2575f80808093335af161017061576e565b8060051b820135603e19833603018112156104e55782016040813603126104e557604051906129b082614e79565b600b908035828110156104e557835260208101359067ffffffffffffffff82116104e5570136601f820112156104e5576129f19036906020813591016154bc565b916020810192835280518281101561253957600103612c6457505051908151820161014083602083019203126104e557612a2d602084016154f2565b92604081015193606082015160808301519260a081015191612a546102f760c0840161511c565b9460405163032bb44360e01b81526001600160a01b03861660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91612c2a575b501561050957612ae461039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b936001612af082615a70565b14612c12575b60208401516001600160a01b031680612c0c57506001600160a01b03602088015116915b6001600160a01b0387163b156104e5576001600160a01b03936040519b63977b1f5f60e01b8d528c60043391015260248d015260448c015260648b015260848a01525f60a48a01521660c48801525f8760e481836001600160a01b0388165af19485156104da5764e8d4a51000612bc7612bd89460019a612bde99612bfd575061049061039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b059081612be4575b50508233615aa4565b33615aa4565b01612963565b612bf0612bf692615de6565b3361545d565b8980612bcf565b612c0690614e95565b8d610462565b91612b1a565b612c2588612c1f83615de6565b3361598f565b612af6565b90506020813d602011612c5c575b81612c4560209383614f36565b810103126104e557612c569061511c565b8c612ab1565b3d9150612c38565b80518281101561253957600903612f40575050519081518201916101c0818403126104e557612c95602082016154f2565b92610180601f1983830301126104e55760405190612cb282614ee2565b604083015182526060830151602083015260808301516040830152612cd960a084016154f2565b606083015260c092612cec8482016154f2565b608084015260e081015160a08401528360df1982840301126104e557604051612d1481614efe565b612d2161010083016154f2565b8152612d3061012083016154f2565b6020820152612d4261014083016154f2565b6040820152610160820151606082015261018082015160808201526101a082015160a0820152848401526101c08101519167ffffffffffffffff83116104e557612d93926020809201920101615527565b9360405163032bb44360e01b81526001600160a01b03821660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91612f06575b5015610509576001600160a01b0381163b156104e5575f92836001600160a01b0360a094612edd604051998a97889687947f736a01df0000000000000000000000000000000000000000000000000000000086523360048701528051602487015260208101516044870152604081015160648701528660608201511660848701528660808201511660a48701528281015160c487015201518581511660e486015285602082015116610104860152856040820151166101248601526060810151610144860152608081015161016486015201516101848401526101c06101a48401526101c4830190615749565b0393165af19182156104da57600192612ef7575b50612bde565b612f0090614e95565b84612ef1565b90506020813d602011612f38575b81612f2160209383614f36565b810103126104e557612f329061511c565b88612df0565b3d9150612f14565b8051828110156125395760020361313a575050519081805160a0918291810103126104e5576020830151926001600160a01b039081851685036104e5576040810151612f976060830151946080840151930161511c565b9360405163032bb44360e01b81528488166004820152602081602481887f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91613100575b501561050957816130f0575b61301c307f000000000000000000000000000000000000000000000000000000000000000061579d565b938088163b156104e5575f92836084926040519a8b9586947fd2c3aaf200000000000000000000000000000000000000000000000000000000865233600487015260248601526044850152876064850152165af19485156104da576001956130e1575b506130a657505f905b81613095575b5050612bde565b61309f913361545d565b848061308e565b6130da64e8d4a51000916109ed307f000000000000000000000000000000000000000000000000000000000000000061579d565b0490613088565b6130ea90614e95565b8761307f565b6130fb85833361598f565b612ff2565b90506020813d602011613132575b8161311b60209383614f36565b810103126104e55761312c9061511c565b8a612fe6565b3d915061310e565b8051828110156125395760030361364b57505051805181018181039061014082126104e557610120601f19613171602086016154f2565b9301126104e5576040519261318584614ee2565b604081015160ff811681036104e5578452606081015191825f0b83036104e5576020610120916131e094828801526080840151604088015260a0840151606088015260c08401516080880152610afa82820160e08601615569565b60c083015260405163032bb44360e01b81526001600160a01b03821660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91613611575b501561050957604082015115610f405760208201515f0b5f198114159081613605575b50610f405760ff825116600381119081156135c9575b50610f4057335f52600160205260405f206001600160a01b0382165f5260205260405f205f545f198114610f2c57600101805f555f5260205260405f2060ff8084511611610f0257607f60208401515f0b13610f0257607f1960208401515f0b12610f025760026132ee6040850151615c32565b14610f025760026133026060850151615ec2565b14610f02576133146060840151615e77565b15610f025760026133286080850151615ec2565b14610f025761333a6080840151615e77565b15610f0257600261334f60a085015151615c58565b14610f0257600261336460c085015151615c58565b14610f0257825160ff166020840151604085015191606086015193608087015160a08801519560208701516001600160a01b0316965165ffffffffffff169560c08a01519460208601516001600160a01b0316955165ffffffffffff16966040516133ce81614ec5565b828152815f0b602082015267ffffffffffffffff841660408201528460070b60608201528560070b608082015260a081015f90528a60c08201528960e082015261010081015f90528761012082015288610140820152610160015f905260081b61ff0016179060101b69ffffffffffffffff000016179060501b71ffffffffffffffff0000000000000000000016179060901b79ffffffffffffffff0000000000000000000000000000000000001617815560018101937fffffffffffffffffffffffff000000000000000000000000000000000000000095868654161785556134fe9085907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff79ffffffffffff000000000000000000000000000000000000000083549260a01b169116179055565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff938481541690556002019384541617835561357a9083907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff79ffffffffffff000000000000000000000000000000000000000083549260a01b169116179055565b81541690555f5491604051916001600160a01b03169180339261359d9082614df3565b037fb32ded07b7d673202a5f35a959c39fc092a3d213bff00dadc295545acedf22d391a4600190612bde565b6003915014806135da575b8661327a565b506135e86080830151615eaa565b600281149081156135fa575b506135d4565b6001915014866135f4565b60019150141586613264565b90506020813d602011613643575b8161362c60209383614f36565b810103126104e55761363d9061511c565b86613241565b3d915061361f565b805182811015612539576004036136e957505051906040828051810103126104e55781604061367e6020600195016154f2565b910151335f52836020526001600160a01b0360405f20921691825f5260205260405f20815f526020525f600260408220828155828782015501556040519081527fd23ac4476ccf3eeb78c76d4b7bb113597bcd16c15d47656627ea6221d685ad7360203392a3612bde565b8051828110156125395760050361450e57505051906060828051810103126104e557613717602083016154f2565b6060613725604085016154f2565b93015161373c81856001600160a01b038516615129565b15611f6e5761375581856001600160a01b038516614fb8565b60405161376181614ea9565b5f81527f000000000000000000000000000000000000000000000000000000000000000060208201525f60408201527f000000000000000000000000000000000000000000000000000000000000000060608201526040820151604051906001600160a01b03861660208301526001600160a01b03881660408301526060820152606081526137ef81614ea9565b604051916137fc83614f1a565b5f83525f6020840152670de0b6b3a764000061382582516111ed836111dc6020870151936156b7565b049261387160206060604085015194015192604051809381927fde26c4a10000000000000000000000000000000000000000000000000000000083528460048401526024830190615749565b038173420000000000000000000000000000000000000f5afa9081156104da575f916144dc575b506040517fc598591800000000000000000000000000000000000000000000000000000000815260208160048173420000000000000000000000000000000000000f5afa9081156104da575f916144aa575b507f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103610f2c57604051907f519b4bd300000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9081156104da575f91614474575b613973925060041b6156c5565b604051907f68d5dca600000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9182156104da575f92614440575b506040517ff820614000000000000000000000000000000000000000000000000000000000815260208160048173420000000000000000000000000000000000000f5afa9081156104da575f9161440c575b506111e790613a25936156c5565b91604051907f313ce56700000000000000000000000000000000000000000000000000000000825260208260048173420000000000000000000000000000000000000f5afa9182156104da575f926143d8575b50604d8211610f2c577f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82600a0a1682600a0a03610f2c576111e7670de0b6b3a76400006114ae81976111ed6114a8613adb996111ed98600a0a60041b906159f8565b0490613ae78284615cbd565b600460a06001600160a01b037f2b50211693ec91bcfe327771928b74a8f475c508d53e86fca4153bcf0f0e87765416604051928380927ffeaf968c0000000000000000000000000000000000000000000000000000000082525afa9081156104da575f9161438b575b50670de0b6b3a7640000810290808205670de0b6b3a76400001490151715610f2c575f6305f5e10082051261435457670de0b6b3a7640000916305f5e100613b999205906156c5565b046060828051810103126104e557613bb3602083016154f2565b906060613bc2604085016154f2565b930151908061431957506001600160a01b0391613bf2936115d8925f9080821015611d6557509384921690615df5565b90613c1f82337f5b5cbfa852c5bd03e540eba853f8faf28a604a4d82bee1091096bfaea14d08c3546156f2565b604051925f84525f60208501526040840152606083015260808201527ffa0333956d06e335c550bd5fc4ac9c003c6545e371331b1071fa4d5d8519d6c160a03392a26001600160a01b0385163b156104e5576040517f6a256b290000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201525f81602481836001600160a01b038b165af180156104da5761430a575b506040517f6e1936800000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526101809081816024816001600160a01b038b165afa9182156104da575f9261425a575b5050604051917f55f575100000000000000000000000000000000000000000000000000000000083526001600160a01b03851660048401526080836024816001600160a01b038b165afa9283156104da575f936141f9575b5081518352613d866020840151615ce1565b613d9661177e6060850151615ce1565b80808301125f8312908015821691151617610f2c57613db59101615d3c565b91613dc36040850151615ce1565b613dd36117ce60a0840151615ce1565b80808301125f8312908015821691151617610f2c57613df29101615d3c565b90613e0361180b6060870151615ce1565b80808301125f8312908015821691151617610f2c57613e229101615d3c565b606085015260408401528160208401525f9160ff825116156141ad575b50600160ff82511614614163575b600260ff82511614614119575b600360ff825116146140d4575b6020830151606060408501519401519360c060a08401519301519460405163032bb44360e01b81526001600160a01b038b1660048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f9161409a575b501561050957613f1161039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b946001613f1d82615a70565b14614089575b60208501516001600160a01b03168061408357506001600160a01b03602088015116915b6001600160a01b038c163b156104e5576001600160a01b03936040519563977b1f5f60e01b8752858c16600488015260248701526044860152606485015260848401525f60a48401521660c48201525f8160e481836001600160a01b038d165af19788156104da576140347f889f0643d669fbac53cbc7d1826992b9bce1fab5e9644034cffb9c0137fe9dd195611a596001600160a01b039564e8d4a5100061402460209960019f988a996104cb575061049061039f307f000000000000000000000000000000000000000000000000000000000000000061579d565b0580614071575084868c16615aa4565b8187165f5288845260405f208282165f52845260405f20865f5284525f600260408220828155828c820155015560405195865216941692a3612bde565b611aab61407d91615de6565b8f611a4f565b91613f47565b614095611acb82615de6565b613f23565b90506020813d6020116140cc575b816140b560209383614f36565b810103126104e5576140c69061511c565b8d613ede565b3d91506140a8565b9050608081015160016140e682615e77565b0361411457507f80000000000000000000000000000000000000000000000000000000000000005b90613e67565b61410e565b60808101805161413057505f5b6060840152613e5a565b61413d6060850151615ce1565b905180808301125f8312908015821691151617610f2c5761415e9101615d3c565b614126565b60808101805161417a57505f5b6040840152613e4d565b6141876040850151615ce1565b905180808301125f8312908015821691151617610f2c576141a89101615d3c565b614170565b60808201908151155f146141ca5750505f5b602084015289613e3f565b6141d390615ce1565b905180808301125f8312908015821691151617610f2c576141f49101615d3c565b6141bf565b9092506080813d608011614252575b8161421560809383614f36565b810103126104e55760606040519161422c83614ea9565b805183526020810151602084015260408101516040840152015160608201529189613d74565b3d9150614208565b90809250813d8311614303575b6142718183614f36565b810103126104e5576040519061428682614ec5565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c0808201519083015260e081015160e083015261010080820151908301526101208082015190830152610140808201519083015261016080910151908201528880613d1c565b503d614267565b61431390614e95565b87613cc3565b5f198193929301908111610f2c5764e8d4a51000900490600182018211610f2c57613bf2936001600160a01b039360016115d89401906115c4565b6024906305f5e100604051917f501f289e000000000000000000000000000000000000000000000000000000008352056004820152fd5b905060a0813d60a0116143d0575b816143a660a09383614f36565b810103126104e5576143b781615cca565b506143c9608060208301519201615cca565b508c613b50565b3d9150614399565b9091506020813d602011614404575b816143f460209383614f36565b810103126104e55751908e613a78565b3d91506143e7565b90506020813d602011614438575b8161442760209383614f36565b810103126104e55751613a25613a17565b3d915061441a565b9091506020813d60201161446c575b8161445c60209383614f36565b810103126104e55751908e6139c5565b3d915061444f565b90506020823d6020116144a2575b8161448f60209383614f36565b810103126104e557613973915190613966565b3d9150614482565b90506020813d6020116144d4575b816144c560209383614f36565b810103126104e557518d6138ea565b3d91506144b8565b90506020813d602011614506575b816144f760209383614f36565b810103126104e557518c613898565b3d91506144ea565b80518281101561253957600603614748575050518051810160c0828203126104e55761453c602083016154f2565b60408301519060608401519167ffffffffffffffff83116104e55760208401603f8487010112156104e557602083860101519267ffffffffffffffff8411612217578360051b90604051946145946020840187614f36565b855260208501809260208801604082858c010101116104e5576040838a0101915b604082858c0101018310614738575050505060808601519460a087015167ffffffffffffffff81116104e55761208460c0916020806145f89501918b0101615527565b95614623307f000000000000000000000000000000000000000000000000000000000000000061579d565b956001600160a01b0385163b156104e5576040517f1e298b9000000000000000000000000000000000000000000000000000000000815260606004820152955160648701819052869493608486019392915f905b80821061471c57505050846146aa81945f9896946001600160a01b03946024850152600319848303016044850152615749565b0393165af1908161470d575b506146d257506146c461576e565b906121655750600190612bde565b60019291506121b0614708916109ed307f000000000000000000000000000000000000000000000000000000000000000061579d565b612bde565b61471690614e95565b866146b6565b8251865289975060209586019590920191600190910190614677565b82518152602092830192016145b5565b805182811015612539576008036148d357505051906020828051810103126104e5576020916147816001600160a01b03938492016154f2565b16916040519063032bb44360e01b8083528460048401526024926020818581867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f91614899575b5015928361480f575b505050610509576147086001927f0000000000000000000000000000000000000000000000000000000000000000615598565b60209293506040518094819382528760048301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f9161485f575b50158580806147dc565b90506020813d602011614891575b8161487a60209383614f36565b810103126104e55761488b9061511c565b85614855565b3d915061486d565b90506020813d6020116148cb575b816148b460209383614f36565b810103126104e5576148c59061511c565b886147d3565b3d91506148a7565b519081101561253957600a146148ed575b50600190612bde565b51906040828051810103126104e55761490d60406123fd602085016154f2565b916001600160a01b03809160206040518093819363032bb44360e01b8352169485600483015260249485917f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104da575f916149fc575b5015610509575f91602091604051809481937f6ebc51e10000000000000000000000000000000000000000000000000000000083523360048401525af19081156104da575f916149c9575b506001926149c3913361545d565b906148e4565b90506020813d6020116149f4575b816149e460209383614f36565b810103126104e5575160016149b5565b3d91506149d7565b90506020813d602011614a2e575b81614a1760209383614f36565b810103126104e557614a289061511c565b8761496a565b3d9150614a0a565b346104e5575f6003193601126104e55760206001600160a01b037f2b50211693ec91bcfe327771928b74a8f475c508d53e86fca4153bcf0f0e87765416604051908152f35b346104e5575f6003193601126104e55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104e5576001600160a01b03614ad436614d5e565b9116903382141580614b01575b61254d57614aff915f52600360205260405f205f815491553361545d565b005b50815f52600260205260405f20335f5260205260ff60405f20541615614ae1565b346104e5575f6003193601126104e55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104e557614b7336614d5e565b335f5260026020526001600160a01b0360405f20921691825f5260205260405f20901515907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff83161790556040519081527f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a60203392a3005b346104e55760206003193601126104e5576001600160a01b03614c12614d48565b165f526003602052602060405f2054604051908152f35b346104e5575f6003193601126104e55760207f5b5cbfa852c5bd03e540eba853f8faf28a604a4d82bee1091096bfaea14d08c3546001600160a01b0360405191168152f35b346104e55760406003193601126104e557614c87614d48565b602435906001600160a01b03908183168093036104e557165f52600260205260405f20905f52602052602060ff60405f2054166040519015158152f35b346104e5575f6003193601126104e55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104e5575f6003193601126104e5576020906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b600435906001600160a01b03821682036104e557565b60031960409101126104e5576004356001600160a01b03811681036104e5579060243580151581036104e55790565b9181601f840112156104e55782359167ffffffffffffffff83116104e5576020808501948460051b0101116104e557565b60031960609101126104e5576001600160a01b039060043582811681036104e5579160243590811681036104e5579060443590565b614e779092919260e060c061012083019560ff815116845260208101515f0b6020850152604081015160408501526060810151606085015260808101516080850152614e5a60a082015160a08601906001600160a01b036020809280518552015116910152565b01519101906001600160a01b036020809280518552015116910152565b565b6040810190811067ffffffffffffffff82111761221757604052565b67ffffffffffffffff811161221757604052565b6080810190811067ffffffffffffffff82111761221757604052565b610180810190811067ffffffffffffffff82111761221757604052565b60e0810190811067ffffffffffffffff82111761221757604052565b60c0810190811067ffffffffffffffff82111761221757604052565b6020810190811067ffffffffffffffff82111761221757604052565b90601f601f19910116810190811067ffffffffffffffff82111761221757604052565b60405190614f6682614ee2565b815f81525f60208201525f60408201525f60608201525f6080820152604051614f8e81614e79565b5f81525f602082015260a082015260c060405191614fab83614e79565b5f83525f60208401520152565b919091614fc3614f59565b506001600160a01b038091165f526020916001835260409382855f2091165f528352835f20905f528252825f20614ff8614f59565b5083519161500583614ec5565b81549360ff8516958685528560081c5f0b808387015267ffffffffffffffff8760101c169283838801528760501c60070b948560608901528860901c60070b968760808a01527fffffffffffff0000000000000000000000000000000000000000000000000000809a1660a08a015260018101549889916002848416918260c08501528d65ffffffffffff809660a01c169d8e60e08701521661010085015201549161016061012082019d8e8786169052610140830194868160a01c1686521691015286519a6150d48c614e79565b8b52848b015251169851168351986150eb8a614e79565b8952818901528251986150fd8a614ee2565b89528801528601526060850152608084015260a083015260c082015290565b519081151582036104e557565b91816151359293614fb8565b6040908181015115615293576001600160a01b0380938351907f7dc0d1d0000000000000000000000000000000000000000000000000000000008252816004816020958694165afa8015615289575f90615252575b6060915060048551809781937f52bfe789000000000000000000000000000000000000000000000000000000008352165afa928315615249575f936151d9575b50506151d69250615623565b90565b909192506060843d606011615241575b816151f660609383614f36565b810103126104e5578051916060830183811067ffffffffffffffff8211176122175782528451835280850151908301526151d69361523590820161511c565b90820152905f806151ca565b3d91506151e9565b513d5f823e3d90fd5b508181813d8311615282575b6152688183614f36565b810103126104e5575184811681036104e55760609061518a565b503d61525e565b84513d5f823e3d90fd5b5050505f90565b906152a4906156d8565b906001600160a01b0390817f0000000000000000000000000000000000000000000000000000000000000000168015801561541e575b156153b057507f00000000000000000000000000000000000000000000000000000000000000009161530c308461579d565b93817f00000000000000000000000000000000000000000000000000000000000000001690813b156104e5575f916024839260405194859384927fdb006a7500000000000000000000000000000000000000000000000000000000845260048401525af180156104da576153a1575b50309082160361538a57505050565b61539b614e77936109ed308561579d565b916156f2565b6153aa90614e95565b5f61537b565b809392503b156104e5576040517f7647691d00000000000000000000000000000000000000000000000000000000815260048101929092526001600160a01b03166024820152905f908290818381604481015b03925af180156104da57615415575b50565b614e7790614e95565b5060026154576154516115d8847f000000000000000000000000000000000000000000000000000000000000000061579d565b86615c71565b146152da565b911561546c576152a4906156d8565b90615479614e77926156d8565b907f00000000000000000000000000000000000000000000000000000000000000006156f2565b67ffffffffffffffff811161221757601f01601f191660200190565b9291926154c8826154a0565b916154d66040519384614f36565b8294818452818301116104e5578281602093845f960137010152565b51906001600160a01b03821682036104e557565b5f5b8381106155175750505f910152565b8181015183820152602001615508565b81601f820112156104e557805161553d816154a0565b9261554b6040519485614f36565b818452602082840101116104e5576151d69160208085019101615506565b91908260409103126104e55760405161558181614e79565b602061559381839580518552016154f2565b910152565b9060209060446001600160a01b03915f8360405196879586947f095ea7b30000000000000000000000000000000000000000000000000000000086521660048501525f196024850152165af180156104da576155f15750565b6020813d60201161561b575b8161560a60209383614f36565b810103126104e5576154129061511c565b3d91506155fd565b6040820151156156945760208101515f0b60018114615671575f19146156495750505f90565b6060602061565c93015191015190615edd565b8015908115615669575090565b600191501490565b506060602061568593015191015190615edd565b60028114908115615669575090565b50505f90565b90670de0b6b3a764000091828102928184041490151715610f2c57565b905f911560011715610f2c57565b81810292918115918404141715610f2c57565b64e8d4a5100090818102918183041490151715610f2c5790565b91614e77926001600160a01b039182604051947fa9059cbb00000000000000000000000000000000000000000000000000000000602087015216602485015260448401526044835261574383614ea9565b16615b41565b90601f19601f60209361576781518092818752878088019101615506565b0116010190565b3d15615798573d9061577f826154a0565b9161578d6040519384614f36565b82523d5f602084013e565b606090565b9060209060246001600160a01b03918260405195869485937f70a08231000000000000000000000000000000000000000000000000000000008552166004840152165afa9081156104da575f916157f2575090565b90506020813d602011615819575b8161580d60209383614f36565b810103126104e5575190565b3d9150615800565b91908203918211610f2c57565b906115d88161585d937f0000000000000000000000000000000000000000000000000000000000000000615d77565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001680158015615953575b1561590657507f00000000000000000000000000000000000000000000000000000000000000001690813b156104e5575f916024839260405194859384927fa0712d6800000000000000000000000000000000000000000000000000000000845260048401525af180156104da576154155750565b8091503b156104e5576040517f13bac82000000000000000000000000000000000000000000000000000000000815260048101929092523060248301525f90829081838160448101615403565b506002615989615983837f000000000000000000000000000000000000000000000000000000000000000061579d565b85615c71565b14615891565b9091156159c557906115d88161585d937f0000000000000000000000000000000000000000000000000000000000000000615d77565b6159d1614e77926156d8565b907f0000000000000000000000000000000000000000000000000000000000000000615d77565b8115615a02570490565b634e487b7160e01b5f52601260045260245ffd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111615a405790565b602490604051907ea07eb50000000000000000000000000000000000000000000000000000000082526004820152fd5b5f8113615a86575f13615a81575f90565b5f1990565b50600190565b81810392915f138015828513169184121617610f2c57565b919081518015615b3b5781615add604092867f037af8589fe92360e800c649b0515b0b2bf77b577766ff952b17630c4ad25f4795615df5565b602084016001600160a01b03918183809351165f52600360205282615b07865f2054895190615cbd565b9151165f526003602052845f2055615b34845180976001600160a01b036020809280518552015116910152565b16941692a3565b50505050565b604051615b9e916001600160a01b0316615b5a82614e79565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1615b9861576e565b91615eee565b805180615baa57505050565b818391810103126104e55781615bc0910161511c565b15615bc85750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b67ffffffffffffffff90818111615c515710615c4d57600190565b5f90565b5050600290565b65ffffffffffff90818111615c515710615c4d57600190565b818111615c515710615c4d57600190565b805190919015615c955750805190602001fd5b615cb99060405191829162461bcd60e51b8352602060048401526024830190615749565b0390fd5b91908201809211610f2c57565b519069ffffffffffffffffffff821682036104e557565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111615d0b5790565b602490604051907feecaa25d0000000000000000000000000000000000000000000000000000000082526004820152fd5b5f8112615d465790565b602490604051907fb02ef0870000000000000000000000000000000000000000000000000000000082526004820152fd5b916001600160a01b039081604051937f23b872dd00000000000000000000000000000000000000000000000000000000602086015216602484015230604484015260648301526064825260a082019282841067ffffffffffffffff85111761221757614e779360405216615b41565b5f8112615df05790565b5f0390565b615e096001600160a01b0380921693615ce1565b92803b156104e5575f928360c49260405196879586947f91eece280000000000000000000000000000000000000000000000000000000086521660048501525f198060248601528060448601526064850152820360848401528160a48401525af180156104da576154155750565b7fffffffffffffffffffffffffffffffffffffffffffffffff800000000000000090818113615c515712615c4d57600190565b5f8113615ebc575f13615c4d57600190565b50600290565b677fffffffffffffff90818113615c515712615c4d57600190565b818113615c515712615c4d57600190565b91929015615f4f5750815115615f02575090565b3b15615f0b5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82615c8256fea264697066735822122072dd4a5a369ac005fd5f77baeacc5e09cfc28057d22c15baf162d70bb173151164736f6c63430008180033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000007b4adf64b0d60ff97d672e473420203d52562a84000000000000000000000000d92c026c7eb0f1d7d7bbc23441d852e1c712d2ff000000000000000000000000c084289433305121e6e997877dac4f8ee5f2565600000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fa881826ad000d010977645450292701bc2f56d000000000000000000000000000000000000000000000000000000000016e36000000000000000000000000000000000000000000000000000000000000052d0