0 txs
0 calls
constructor
constructor(address _curveRouter, (address pendleMarket, uint8 slippage, int32 curveDxAdjustPtToToken, int32 curveDxAdjustTokenToPt, address[11] curveRoute, uint256[5][5] curveSwapParams, address[5] curvePools)[] routes)
functions
curveRouter
viewfunction curveRouter() view returns (address)
getRouteData
viewfunction getRouteData(address, address) view returns (address pendleMarket, address sy, address pt, address yt, uint8 slippage, int32 curveDxAdjust, address ib)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addPairs
nonpayablefunction addPairs(tuple[] routes)
redeemDust
nonpayablefunction redeemDust(address token, address recipient)
renounceOwnership
nonpayablefunction renounceOwnership()
swapCallback
nonpayablefunction swapCallback(int256 ptToAccount, int256 syToAccount, bytes _data)
swapExactInput
nonpayablefunction swapExactInput(address recipient, address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut, bytes data) returns (uint256 amountOut)
swapExactOutput
nonpayablefunction swapExactOutput(address recipient, address tokenIn, address tokenOut, uint256 maxAmountIn, uint256 amountOut, bytes data) returns (uint256 amountIn)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
NewPair
event NewPair(address indexed ptToken, address indexed quoteToken, address pendleMarket, uint8 slippage)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
errors
ApproxFail
error ApproxFail()
ApproximationFailed
error ApproximationFailed()
ApproxParamsInvalid
error ApproxParamsInvalid(uint256 guessMin, uint256 guessMax, uint256 eps)
InsufficientAmount
error InsufficientAmount()
MarketExchangeRateBelowOne
error MarketExchangeRateBelowOne(int256 exchangeRate)
MarketExpired
error MarketExpired()
MarketProportionMustNotEqualOne
error MarketProportionMustNotEqualOne()
MarketProportionTooHigh
error MarketProportionTooHigh(int256 proportion, int256 maxProportion)
MarketRateScalarBelowZero
error MarketRateScalarBelowZero(int256 rateScalar)
MarketZeroTotalPtOrTotalAsset
error MarketZeroTotalPtOrTotalAsset(int256 totalPt, int256 totalAsset)
NotSupported
error NotSupported()
TooMuchRequested
error TooMuchRequested()
UnknownPair
error UnknownPair()
WrongInput
error WrongInput()
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080806040523462000a4257620061b9803803809162000020828562000d05565b8339604082828101031262000a42576200003a8262000d29565b60208301519091906001600160401b039081811162000a42578401828501601f8201121562000a4257805191821162000c7d57604051946200008360208460051b018762000d05565b828652602086019184820160206105a086028301011162000a425760208101925b60206105a08602830101841062000aaa57600180546001600160a01b03199081169091556000805433928116831782556040518b9390928b926001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b031690811562000a9b5750600280546001600160a01b0319169190911790556040516200013f8162000c93565b60008152600060208201526000604082015260006060820152604051620001668162000ccc565b61016036823760808201526200017b62000d4d565b60a082015260c060405191620001918362000ce9565b60a0368437015280516000915b818310620001b6576040516153a0908162000e198239f35b805183101562000a8557600583901b81016020015180519093906001600160a01b0316156200095457670de0b6b3a764000060ff60208601511610156200095457620f4240806200020e604087015160030b62000e06565b1015620009545762000227606086015160030b62000e06565b1015620009545760018060a01b036080850151511693604051926200024c8462000ccc565b610160368537600a9060005b60808401516001600160a01b03906200027390859062000d94565b51161562000a7957620002ac9060018060a01b036200029785608088015162000d94565b5116620002a5828962000d94565b5262000dca565b918015620002c657620002bf9062000da6565b9162000258565b508451909593946001600160a01b03909116939150620002e562000d4d565b9160405190620002f58262000ce9565b60a036833760049060005b620003108360a089015162000dda565b5151158062000a5c575b62000a505762000405906020620003368560a08b015162000dda565b51015162000345828962000dda565b5152620003578460a08a015162000dda565b5151602062000367838a62000dda565b51015260406200037c8560a08b015162000dda565b51015160406200038d838a62000dda565b5101526060620003a28560a08b015162000dda565b5101516060620003b3838a62000dda565b5101526080620003c88560a08b015162000dda565b5101516080620003d9838a62000dda565b51015260c08801516001600160a01b0390620003f790869062000dda565b5116620002a5828762000dda565b9180156200041f57620004189062000da6565b9162000300565b508551604051630b2339af60e21b81529a919998979695919392506060908b9060049082906001600160a01b03165afa9384156200099c5760009360009b600096620009cc575b50604051637d2d278360e11b8152600481018290526020816024816001600160a01b038a165afa9081156200099c57600091620009a8575b50156200095457604051633c21b3eb60e11b8152600481018290526020816024816001600160a01b038a165afa9081156200099c5760009162000966575b5015620009545760018060a01b03875116948c60ff60208a01511660408a015160030b60808b01519060a08c01519260c08d0151946040519b620005208d62000caf565b8c5260018060a01b03871660208d015260018060a01b031660408c015260018060a01b038c1660608c015260808b015260a08a01528460c08a015260e08901526101008801526101208701528c60018060a01b038951169760ff60208b0151169160608b015160030b936040519a620005998c62000caf565b8b5260018060a01b031660208b015260018060a01b031660408a015260018060a01b03166060890152608088015260a087015260c086015260e085015261010084015261012083015260018060a01b038816600052600360205260406000208460005260205260406000209060018060a01b0381511660018060a01b03198354161782556001820160018060a01b0360208301511660018060a01b03198254161790556002820160018060a01b0360408301511660018060a01b031982541617905560018060a01b0360608201511660038301549060ff60a01b608084015160a01b169060a084015160a81b63ffffffff60a81b169260018060c81b03191617171760038301556004820160018060a01b0360c08301511660018060a01b031982541617905560e081015160005b600b811062000933575050610100810151601083016000915b60058310620008fa57505050610120015160005b60058110620008d957505060036020818152604060008181206001600160a01b038d81168352908452828220875181549083166001600160a01b0319918216178255948801516001820180549184169187169190911790559287015160028401805491831691861691909117905560608701519483018054608089015160a0808b015160a81b63ffffffff60a81b1660ff60a01b9290911b919091169784166001600160c81b031990921691909117969096179590951790945560c08601516004830180549190951693169290921790925560e0840151919392505b600b8110620008b8575050610100810151601083016000915b600583106200087f57505050610120015160005b600581106200085e575050507fe546beeeab60a56b73c1b949bb268220b489f63cd1a9b947e6e8a34013d082436040600195969760ff6020888060a01b038651169501511682519485526020850152868060a01b031692a30191906200019e565b81516001600160a01b031660298285010155602090910190600101620007fd565b805160005b60058110620008a35750506005602060019201920192019190620007e9565b60019060208351930192818601550162000884565b81516001600160a01b031660058286010155602090910190600101620007d0565b81516001600160a01b031660298285010155602090910190600101620006f4565b805160005b600581106200091e5750506005602060019201920192019190620006e0565b600190602083519301928186015501620008ff565b81516001600160a01b031660058286010155602090910190600101620006c7565b60405163f50b9e3d60e01b8152600490fd5b6200098d915060203d60201162000994575b62000984818362000d05565b81019062000dec565b8d620004dc565b503d62000978565b6040513d6000823e3d90fd5b620009c5915060203d602011620009945762000984818362000d05565b8d6200049e565b9450945099506060833d60601162000a47575b81620009ee6060938362000d05565b8101031262000a42578251996001600160a01b038b168b0362000a42576020840151936001600160a01b038516850362000a4257604001519a6001600160a01b038c168c0362000a4257939a948c62000466565b600080fd5b3d9150620009df565b91620004189062000da6565b50602062000a6f8460a08a015162000dda565b510151156200031a565b91620002bf9062000da6565b634e487b7160e01b600052603260045260246000fd5b63d92e233d60e01b8152600490fd5b6105a084878501031262000a425760405162000ac68162000c93565b62000ad18562000d29565b8152602085015160ff8116810362000a4257602082015262000af66040860162000d3e565b6040820152606062000b0a81870162000d3e565b90820152868401609f8601121562000a425760405162000b2a8162000ccc565b806101e0870191898701831162000a4257608090818901905b84821062000c625750508301528785016101ff8701121562000a42576040519062000b6e8262000ce9565b819089870161050089011162000a4257905b6105008801821062000c0557505060a082015286840161051f8601121562000a425760405162000bb08162000ce9565b806105a08701898701811162000a42576105008801915b81831062000bea5750505060c082015281526105a09390930192602001620000a4565b6020809162000bf98562000d29565b81520192019162000bc7565b898701601f8301121562000a425760405162000c218162000ce9565b808b890160a085011162000a425783905b60a08501821062000c515750508160209160a093520191019062000b80565b815181526020918201910162000c32565b6020809162000c718462000d29565b81520191019062000b43565b634e487b7160e01b600052604160045260246000fd5b60e081019081106001600160401b0382111762000c7d57604052565b61014081019081106001600160401b0382111762000c7d57604052565b61016081019081106001600160401b0382111762000c7d57604052565b60a081019081106001600160401b0382111762000c7d57604052565b601f909101601f19168101906001600160401b0382119082101762000c7d57604052565b51906001600160a01b038216820362000a4257565b51908160030b820362000a4257565b604080519162000d5d8362000ce9565b829160005b60a08082101562000d8c5782516020929162000d7e8262000ce9565b368237818701520162000d62565b505050909150565b90600b81101562000a855760051b0190565b801562000db4576000190190565b634e487b7160e01b600052601160045260246000fd5b600019811462000db45760010190565b90600581101562000a855760051b0190565b9081602091031262000a425751801515810362000a425790565b600080821262000e14575090565b039056fe60e080604052600436101561001357600080fd5b600090813560e01c90816321629ed014612a93575080632f1ccfbe146121ce578063715018a61461212957806379ba509714611ffa5780637d4f036a146116f45780638da5cb5b146116a3578063b7e04e9614610818578063c93475cb1461072f578063cda90b88146106dd578063e30c39781461068b578063f2fde38b146105de5763fa483e72146100a557600080fd5b3461028d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d578060043567ffffffffffffffff6024356044358281116105da576100fc903690600401612bbe565b85851380156105d1575b156105c5578101906020818303126105c5578035908482116105ae57019060a0828203126105c5576040519361013b85612d65565b61014483612b9d565b855261015260208401612b9d565b906020860191825261016660408501612b9d565b604087015260608401359384151585036105cd576060870194855260808101359182116105cd570182601f820112156105c9576101d3928160206101ac9335910161314c565b608086015273ffffffffffffffffffffffffffffffffffffffff8086511691511690613596565b9173ffffffffffffffffffffffffffffffffffffffff83511633036105c557858113156102a057505050608061022373ffffffffffffffffffffffffffffffffffffffff60408401511693613183565b910151823b1561029b5761026a928492836040518096819582947f1b9d082d000000000000000000000000000000000000000000000000000000008452336004850161335e565b03925af180156102905761027d57505080f35b61028690612d81565b61028d5780f35b80fd5b6040513d84823e3d90fd5b505050fd5b9093506102ae919450613183565b9151610370575b50602090608473ffffffffffffffffffffffffffffffffffffffff8060c08601956102ec8587848a511693019284845116906133ef565b51169451168560405195869485937f20e8c565000000000000000000000000000000000000000000000000000000008552336004860152602485015280604485015260648401525af1801561029057610343575080f35b602090813d8311610369575b6103598183612db2565b810103126103645780f35b600080fd5b503d61034f565b73ffffffffffffffffffffffffffffffffffffffff6002541660e0840151918360206101008701516101208801956103d7875160405195869485947fc07b5353000000000000000000000000000000000000000000000000000000008652600486016132ae565b0381865afa9081156105ba578791610582575b50610409620f42409161040360a089015160030b6132e3565b90613312565b0490816004558673ffffffffffffffffffffffffffffffffffffffff6040830151166080830151813b1561057e578291610474916040519485809481937f1b9d082d0000000000000000000000000000000000000000000000000000000083528a306004850161335e565b03925af180156105735761053b575b5091816104ab86938373ffffffffffffffffffffffffffffffffffffffff60209751166133ef565b8760e0880151956104f66101008a0151915197604051988997889687957fc872a3c5000000000000000000000000000000000000000000000000000000008752309460048801613393565b03925af1801561053057156102b557602090813d8311610529575b61051b8183612db2565b8101031261036457386102b5565b503d610511565b6040513d86823e3d90fd5b916104ab818573ffffffffffffffffffffffffffffffffffffffff602097959b6105658b98612d81565b9b9550509550935050610483565b6040513d8a823e3d90fd5b8280fd5b90506020813d6020116105b2575b8161059d60209383612db2565b810103126105ae57516104096103ea565b8680fd5b3d9150610590565b6040513d89823e3d90fd5b8580fd5b8780fd5b8880fd5b50858313610106565b8480fd5b503461028d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d57610616612b57565b61061e612c7e565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b503461028d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461028d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b503461028d5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d57610767612b57565b73ffffffffffffffffffffffffffffffffffffffff610784612b7a565b9161078d612c7e565b16604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481855afa9182156105305784926107df575b6107dc9350612e01565b80f35b91506020833d8211610810575b816107f960209383612db2565b8101031261080c576107dc9251916107d2565b8380fd5b3d91506107ec565b503461028d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d576004359067ffffffffffffffff80831161169f573660238401121561169f57826004013590811161169f573660246105a083028501011161169f5761088b612c7e565b6040519261089f60208360051b0185612db2565b8184526024810190602085015b60246105a0850283010183106115015784866040516108ca81612cfd565b8281528260208201528260408201528260608201526040516108eb81612d95565b61016036823760808201526108fe613555565b60a082015260c06040519161091283612d65565b60a03684370152805160a052815b60a0518110156114fd5781518110156114d05760208160051b830101519073ffffffffffffffffffffffffffffffffffffffff8251161561137e57670de0b6b3a764000060ff602084015116101561137e57620f424080610987604085015160030b615359565b101561137e5761099d606084015160030b615359565b101561137e5773ffffffffffffffffffffffffffffffffffffffff6080830151511693604051926109cd84612d95565b610160368537600a825b73ffffffffffffffffffffffffffffffffffffffff6109fa8360808601516152dd565b5116156114c657610a3a9073ffffffffffffffffffffffffffffffffffffffff610a288460808701516152dd565b5116610a3482896152dd565b52613ab3565b908015610a5057610a4a9061531d565b906109d7565b50509092919273ffffffffffffffffffffffffffffffffffffffff83511692610a77613555565b60405190610a8482612d65565b60a03683376004845b610a9b8260a0890151615348565b515115806114ac575b6114a257610b7f906020610abc8460a08b0151615348565b510151610ac98286615348565b5152610ad98360a08a0151615348565b51516020610ae78387615348565b5101526040610afa8460a08b0151615348565b5101516040610b098387615348565b5101526060610b1c8460a08b0151615348565b5101516060610b2b8387615348565b5101526080610b3e8460a08b0151615348565b5101516080610b4d8387615348565b51015273ffffffffffffffffffffffffffffffffffffffff610b738460c08b0151615348565b5116610a348287615348565b908015610b9557610b8f9061531d565b90610a8d565b5050600498929695949396606073ffffffffffffffffffffffffffffffffffffffff8651166040519b8c80927f2c8ce6bc0000000000000000000000000000000000000000000000000000000082525afa9384156105735788608052889a8995611401575b506040517ffa5a4f0600000000000000000000000000000000000000000000000000000000815281600482015260208160248173ffffffffffffffffffffffffffffffffffffffff608051165afa9081156113d7578a916113e2575b501561137e576040517f784367d600000000000000000000000000000000000000000000000000000000815281600482015260208160248173ffffffffffffffffffffffffffffffffffffffff608051165afa9081156113d7578a916113a8575b501561137e57610d1c9473ffffffffffffffffffffffffffffffffffffffff875116878d60ff602083015116604083015160030b9073ffffffffffffffffffffffffffffffffffffffff60808501519360c060a0870151960151966040519d8e612d48565b8d528c602083608051169101521660408c015273ffffffffffffffffffffffffffffffffffffffff861660608c015260808b015260a08a01528460c08a015260e08901526101008801526101208701528b73ffffffffffffffffffffffffffffffffffffffff80895116928160ff60208c0151169360608c015160030b95610da96040518060c052612d48565b60c051528160805116602060c051015216604060c051015216606060c0510152608060c051015260a060c051015260c08051015260e060c051015261010060c051015261012060c051015273ffffffffffffffffffffffffffffffffffffffff87168552600360205260408520838652602052604085209073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556001820173ffffffffffffffffffffffffffffffffffffffff6020830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556002820173ffffffffffffffffffffffffffffffffffffffff6040830151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905573ffffffffffffffffffffffffffffffffffffffff60608201511660038301549074ff0000000000000000000000000000000000000000608084015160a01b16907fffffffffffffff0000000000000000000000000000000000000000000000000060a085015160a81b78ffffffff00000000000000000000000000000000000000000016931617171760038301556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0810151865b600b81106113515750506101008101516010830187915b6005831061131c575050506101200151855b600581106112ef5750505060036020526040842073ffffffffffffffffffffffffffffffffffffffff871685526020526040842060c05173ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556001820173ffffffffffffffffffffffffffffffffffffffff6020830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556002820173ffffffffffffffffffffffffffffffffffffffff6040830151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556003820173ffffffffffffffffffffffffffffffffffffffff60608301511681549074ff0000000000000000000000000000000000000000608085015160a01b16907fffffffffffffff0000000000000000000000000000000000000000000000000060a086015160a81b78ffffffff00000000000000000000000000000000000000000016931617171790556004820173ffffffffffffffffffffffffffffffffffffffff60c0830151167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560e0810151865b600b81106112c25750506101008101516010830187915b6005831061128d575050506101200151855b60058110611260575050507fe546beeeab60a56b73c1b949bb268220b489f63cd1a9b947e6e8a34013d08243604073ffffffffffffffffffffffffffffffffffffffff600196979860ff60208387511696015116835195865260208601521692a301919091610920565b600190602073ffffffffffffffffffffffffffffffffffffffff84511693019260298286010155016111f6565b8051895b600581106112ae57505060056020600192019201920191906111e4565b600190602083519301928186015501611291565b600190602073ffffffffffffffffffffffffffffffffffffffff84511693019260058287010155016111cd565b600190602073ffffffffffffffffffffffffffffffffffffffff8451169301926029828601015501610ff1565b8051895b6005811061133d5750506005602060019201920192019190610fdf565b600190602083519301928186015501611320565b600190602073ffffffffffffffffffffffffffffffffffffffff8451169301926005828701015501610fc8565b60046040517ff50b9e3d000000000000000000000000000000000000000000000000000000008152fd5b6113ca915060203d6020116113d0575b6113c28183612db2565b810190612ea4565b8c610cb7565b503d6113b8565b6040513d8c823e3d90fd5b6113fb915060203d6020116113d0576113c28183612db2565b8c610c56565b9a50935060608a3d60601161149a575b8161141e60609383612db2565b810103126105c95789519973ffffffffffffffffffffffffffffffffffffffff8b168b036105cd5760208101519073ffffffffffffffffffffffffffffffffffffffff8216820361149657604001519a73ffffffffffffffffffffffffffffffffffffffff8c168c036114965760805299938b610bfa565b8980fd5b3d9150611411565b90610b8f9061531d565b5060206114bd8360a08a0151615348565b51015115610aa4565b90610a4a9061531d565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b8280f35b6105a0833603126105da5760405161151881612cfd565b61152184612b9d565b8152602084013560ff811681036105ae57602082015261154360408501612df3565b60408201526060611555818601612df3565b9082015236609f850112156105c55760405161157081612d95565b806101e08601913683116105cd57608090818801905b848210611687575050830152366101ff860112156105ae57604051906115ab82612d65565b8190366105008801116105cd57905b6105008701821061163157505060a08201523661051f850112156105c5576040516115e481612d65565b806105a086013681116105cd576105008701915b8183106116195750505060c082015281526105a092909201916020016108ac565b6020809161162685612b9d565b8152019201916115f8565b36601f830112156105cd5760405161164881612d65565b803660a08501116116835783905b60a0850182106116735750508160209160a09352019101906115ba565b8135815260209182019101611656565b8a80fd5b6020809161169484612b9d565b815201910190611586565b5080fd5b503461028d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461028d5761170336612bec565b9392909487969297506117168482613596565b936004602073ffffffffffffffffffffffffffffffffffffffff604088015116604051928380927f2f13b60c0000000000000000000000000000000000000000000000000000000082525afa908115611f49578991611fdb575b5015611926575073ffffffffffffffffffffffffffffffffffffffff806040860151169116146000146118fc576117d76020946117de926117cf8a9873ffffffffffffffffffffffffffffffffffffffff60608901511693369161314c565b9133906151d4565b3084615134565b918573ffffffffffffffffffffffffffffffffffffffff600254169261181f858573ffffffffffffffffffffffffffffffffffffffff60c0870151166133ef565b61186a60e084015191610120610100860151950151604051998a98899788967fc872a3c500000000000000000000000000000000000000000000000000000000885260048801613393565b03925af19182156118f05780926118bb575b5050905b811061189157602090604051908152f35b60046040517f5945ea56000000000000000000000000000000000000000000000000000000008152fd5b9091506020823d6020116118e8575b816118d760209383612db2565b8101031261028d575051388061187c565b3d91506118ca565b604051903d90823e3d90fd5b60046040517fa0387940000000000000000000000000000000000000000000000000000000008152fd5b94879691979493945060025495879873ffffffffffffffffffffffffffffffffffffffff60408701511673ffffffffffffffffffffffffffffffffffffffff821614600014611bd357505073ffffffffffffffffffffffffffffffffffffffff84511690333b156105cd5788916119cc859260405195869485947f1b9d082d000000000000000000000000000000000000000000000000000000008652600486016137a7565b038183335af180156105ba57908791611bbf575b505073ffffffffffffffffffffffffffffffffffffffff825116604051916020830183811067ffffffffffffffff821117611b925791611a59939160409384528983528984518096819582947f29910b11000000000000000000000000000000000000000000000000000000008452306004850161335e565b03925af1908115611b8757918673ffffffffffffffffffffffffffffffffffffffff611a95602096948b9998968491611b57575b503085615134565b941692611abd858573ffffffffffffffffffffffffffffffffffffffff60c0870151166133ef565b611b0860e0840151916101206101008601519501516040519a8b98899788967fc872a3c500000000000000000000000000000000000000000000000000000000885260048801613393565b03925af19283156118f05792611b22575b50505b90611880565b9091506020823d602011611b4f575b81611b3e60209383612db2565b8101031261028d5750513880611b19565b3d9150611b31565b611b79915060403d604011611b80575b611b718183612db2565b81019061386b565b5038611a8d565b503d611b67565b6040513d88823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b611bc890612d81565b6105c55785386119e0565b92919097999895949396333b15611683576040517f1b9d082d0000000000000000000000000000000000000000000000000000000081528b8180611c1d86888e30600486016137a7565b038183335af18015611fd057611fbd575b508690611c558973ffffffffffffffffffffffffffffffffffffffff8084169088166133ef565b60e08601519061010087015199610120880151906040519b8c947fc872a3c500000000000000000000000000000000000000000000000000000000865260048601611c9f916131df565b6101648501611cad9161321d565b610484840152836104a48401526104c48301611cc891613270565b3061056483015273ffffffffffffffffffffffffffffffffffffffff16815a9361058492602095f1968715611b87578697611f81575b50611d8d9291611d4d9173ffffffffffffffffffffffffffffffffffffffff611d6198999a8160405196611d3188612d65565b168652166020850152336040850152886060850152369161314c565b60808201526040519485916020830161380f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612db2565b60ff60808201511660640180606411611f5457611dac60649188613312565b0460405190611dba82612d65565b8782526020820152846040820152600a606082015266038d7ea4c680006080820152602461012073ffffffffffffffffffffffffffffffffffffffff845116604051928380927f794052f30000000000000000000000000000000000000000000000000000000082523060048301525afa908115611f49579286611e78611eb4979482979460409773ffffffffffffffffffffffffffffffffffffffff9d9e9b91611f18575b508b611e718e606088015116613a1d565b4292613b0d565b50998a925116928551978895869485937f5b709f170000000000000000000000000000000000000000000000000000000085526004850161335e565b03925af19283156118f0575091611ef8575b501115611b1c575b60046040517fd8d149ce000000000000000000000000000000000000000000000000000000008152fd5b611f11915060403d604011611b8057611b718183612db2565b5038611ec6565b611f3c91506101203d61012011611f42575b611f348183612db2565b81019061397e565b38611e60565b503d611f2a565b6040513d8b823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9092919596506020813d602011611fb5575b81611fa060209383612db2565b81010312611496575195949091611d8d611cfe565b3d9150611f93565b611fc8919750612d81565b899538611c2e565b6040513d8e823e3d90fd5b611ff4915060203d6020116113d0576113c28183612db2565b38611770565b503461028d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d5760015473ffffffffffffffffffffffffffffffffffffffff33818316036120a5577fffffffffffffffffffffffff0000000000000000000000000000000000000000809216600155825491339083161783553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152fd5b503461028d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028d57612160612c7e565b8073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461028d576121dd36612bec565b8792959196949397506121f08483613596565b916004602073ffffffffffffffffffffffffffffffffffffffff606086015116604051928380927f2f13b60c0000000000000000000000000000000000000000000000000000000082525afa908115612585578591612a74575b50156125905773ffffffffffffffffffffffffffffffffffffffff806040850151169116146000146118fc5773ffffffffffffffffffffffffffffffffffffffff6002541686602060e0850151610100860151906122db61012088015160405195869485947fc07b5353000000000000000000000000000000000000000000000000000000008652600486016132ae565b0381855afa908115612585578591612551575b50612307620f42409161040360a087015160030b6132e3565b049184602073ffffffffffffffffffffffffffffffffffffffff6060870151166004604051809481937f1d52edc40000000000000000000000000000000000000000000000000000000083525af1908115611b875790899392918791612510575b508061237d670de0b6b3a7640000928761388e565b95096124cb575b6123b66123bd91856117cf6020979d73ffffffffffffffffffffffffffffffffffffffff60608b01511693369161314c565b3086615134565b6123e2818373ffffffffffffffffffffffffffffffffffffffff60c0890151166133ef565b8560e08601519561243161012061010083015192015197604051988997889687957fc872a3c5000000000000000000000000000000000000000000000000000000008752309460048801613393565b03925af18015610290576124a0575b50509073ffffffffffffffffffffffffffffffffffffffff612463939216612e01565b905b811161247657602090604051908152f35b60046040517f24df576f000000000000000000000000000000000000000000000000000000008152fd5b602090813d83116124c4575b6124b68183612db2565b8101031261028d5780612440565b503d6124ac565b9150916001810181116124e357600101918791612384565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b91929350506020813d602011612549575b8161252e60209383612db2565b810103126105c5575188929190670de0b6b3a7640000612368565b3d9150612521565b90506020813d60201161257d575b8161256c60209383612db2565b810103126105da57516123076122ee565b3d915061255f565b6040513d87823e3d90fd5b966125ec9073ffffffffffffffffffffffffffffffffffffffff604051996125b78b612d65565b1692838a5273ffffffffffffffffffffffffffffffffffffffff871660208b01523360408b0152600160608b0152369161314c565b608088015273ffffffffffffffffffffffffffffffffffffffff600254169073ffffffffffffffffffffffffffffffffffffffff6040840151161460001461299e5785602060e08401516101008501519061267a61012087015160405195869485947fc07b5353000000000000000000000000000000000000000000000000000000008652600486016132ae565b0381855afa90811561053057849161296a575b506126e9620f42406126ac6126bd9361040360a088015160030b6132e3565b04986040519283916020830161380f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612db2565b60ff608084015116606403606481116124e3576127086064918b613312565b046040519061271682612d65565b8152896020820152846040820152600a606082015266038d7ea4c680006080820152602461012073ffffffffffffffffffffffffffffffffffffffff865116604051928380927f794052f30000000000000000000000000000000000000000000000000000000082523060048301525afa908115611b8757906127c792918791612949575b508a6127c073ffffffffffffffffffffffffffffffffffffffff606089015116613a1d565b4292614ee6565b505090898211611ece576040612827869273ffffffffffffffffffffffffffffffffffffffff8751169083519485809481937f29910b1100000000000000000000000000000000000000000000000000000000835289306004850161335e565b03925af1908115612585579089918691612929575b5010611ece576020916128528892993086615134565b612877818373ffffffffffffffffffffffffffffffffffffffff60c0890151166133ef565b8560e0860151956128c661012061010083015192015197604051988997889687957fc872a3c5000000000000000000000000000000000000000000000000000000008752309460048801613393565b03925af18015610290576128fe575b50509073ffffffffffffffffffffffffffffffffffffffff6128f8939216612e01565b90612465565b602090813d8311612922575b6129148183612db2565b8101031261028d57806128d5565b503d61290a565b612942915060403d604011611b8057611b718183612db2565b503861283c565b61296491506101203d61012011611f4257611f348183612db2565b3861279b565b90506020813d602011612996575b8161298560209383612db2565b8101031261080c57516126e961268d565b3d9150612978565b506129d992509381604094612a0573ffffffffffffffffffffffffffffffffffffffff612a3a9899959951169487519687916020830161380f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286612db2565b8551968795869485937f5b709f170000000000000000000000000000000000000000000000000000000085526004850161335e565b03925af1801561029057612a56575b50600454906004556128f8565b612a6e9060403d604011611b8057611b718183612db2565b50612a49565b612a8d915060203d6020116113d0576113c28183612db2565b3861224a565b90503461169f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261169f5760e0916040612ad1612b57565b91612ada612b7a565b73ffffffffffffffffffffffffffffffffffffffff809416825260036020528383832091168252602052208181541691806001830154168160028401541690826004600386015495015416948652602086015260408501528116606084015260ff8160a01c16608084015260a81c60030b60a083015260c0820152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361036457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361036457565b359073ffffffffffffffffffffffffffffffffffffffff8216820361036457565b9181601f840112156103645782359167ffffffffffffffff8311610364576020838186019501011161036457565b60c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103645773ffffffffffffffffffffffffffffffffffffffff90600435828116810361036457926024358381168103610364579260443590811681036103645791606435916084359160a4359067ffffffffffffffff821161036457612c7a91600401612bbe565b9091565b73ffffffffffffffffffffffffffffffffffffffff600054163303612c9f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b60e0810190811067ffffffffffffffff821117612d1957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff821117612d1957604052565b60a0810190811067ffffffffffffffff821117612d1957604052565b67ffffffffffffffff8111612d1957604052565b610160810190811067ffffffffffffffff821117612d1957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612d1957604052565b35908160030b820361036457565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152612e6891612e63606483612db2565b612ebc565b565b67ffffffffffffffff8111612d1957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90816020910312610364575180151581036103645790565b73ffffffffffffffffffffffffffffffffffffffff16604051604081019181831067ffffffffffffffff841117612d1957612f39926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1612f33612fee565b9161301e565b805190828215928315612fd6575b50505015612f525750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b612fe69350820181019101612ea4565b388281612f47565b3d15613019573d90612fff82612e6a565b9161300d6040519384612db2565b82523d6000602084013e565b606090565b919290156130995750815115613032575090565b3b1561303b5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156130ac5750805190602001fd5b6130ea906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906130ee565b0390fd5b919082519283825260005b8481106131385750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016130f9565b92919261315882612e6a565b916131666040519384612db2565b829481845281830111610364578281602093846000960137010152565b7f800000000000000000000000000000000000000000000000000000000000000081146131b05760000390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000915b600b83106131f057505050565b60019073ffffffffffffffffffffffffffffffffffffffff835116815260208091019201920191906131e3565b9060009182915b6005808410156132695782518590835b8383106132525750505050602060a060019201920192019190613224565b600190825181526020809101920192019190613234565b5050505050565b6000915b6005831061328157505050565b60019073ffffffffffffffffffffffffffffffffffffffff83511681526020809101920192019190613274565b612e68936132d66104a0939796946132cb8461054081019a6131df565b61016084019061321d565b6104808201520190613270565b9081620f4240019182126001166131b057565b919091600083820193841291129080158216911516176131b057565b818102929181159184041417156131b057565b811561332f570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b613390939273ffffffffffffffffffffffffffffffffffffffff606093168252602082015281604082015201906130ee565b90565b946105609473ffffffffffffffffffffffffffffffffffffffff946133d26133e9949a99956133c78a61058081019d6131df565b6101608a019061321d565b6104808801526104a08701526104c0860190613270565b16910152565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820181815273ffffffffffffffffffffffffffffffffffffffff8516602484015260448084019690965294825294939092613451606485612db2565b73ffffffffffffffffffffffffffffffffffffffff90818416600080809588519082855af19061347f612fee565b82613523575b5081613518575b501561349c575b50505050509050565b60405196602088015216602486015280604486015260448552608085019085821067ffffffffffffffff8311176134eb57506134e09394612e639160405282612ebc565b803880808080613493565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526041600452fd5b90503b15153861348c565b8051919250811591821561353b575b50509038613485565b61354e9250602080918301019101612ea4565b3880613532565b604080519161356383612d65565b829160005b60a08082101561358e5782516020929161358182612d65565b3682378187015201613568565b505050909150565b91909160409081516135a781612d48565b6000908181526020828183015282858301528260608301528260808301528260a08301528260c083015284516135dc81612d95565b61016036823760e08301526135ef613555565b966101009788840152855161360381612d65565b60a03682376101208094015273ffffffffffffffffffffffffffffffffffffffff809516845260038252848685209116845281528483209685519761364789612d48565b858154168952600192868483015416818b015286600283015416888b0152600382015487811660608c015260ff8160a01c1660808c015260a81c60030b60a08b01528660048301541660c08b0152875192836005948585019089905b8b600b831061379357505050506136b981612d95565b60e08c01528851906136ca82612d65565b6010840188835b878210613749575050508b015287519591602901865b848410613734575050505050506136fd82612d65565b8501528351161561370b5750565b600490517ffee00694000000000000000000000000000000000000000000000000000000008152fd5b815489168152928501929085019082016136e7565b87868a928f9d999d5180878c915b86831061377b5750505061376a81612d65565b8152019301910190919995996136d1565b815481528f978f97508d969381019392019101613757565b8354168152918801919088019085016136a3565b9293806080957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09473ffffffffffffffffffffffffffffffffffffffff601f951687526020870152606060408701528160608701528686013760008582860101520116010190565b60c06080613390936020845273ffffffffffffffffffffffffffffffffffffffff8082511660208601528060208301511660408601526040820151166060850152606081015115158285015201519160a08082015201906130ee565b9190826040910312610364576020825192015190565b919082018092116131b057565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183098183029182808310920391808303921461396d57670de0b6b3a7640000908282111561390f577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669940990828211900360ee1b910360121c170290565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152fd5b5050670de0b6b3a764000091500490565b809161012092839103126103645760405191820182811067ffffffffffffffff821117612d1957604052805182526020810151602083015260408101516040830152606081015173ffffffffffffffffffffffffffffffffffffffff811681036103645760608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100809101519082015290565b602073ffffffffffffffffffffffffffffffffffffffff600460009360405194859384927f1d52edc4000000000000000000000000000000000000000000000000000000008452165af1908115613aa757600091613a79575090565b906020823d8211613a9f575b81613a9260209383612db2565b8101031261028d57505190565b3d9150613a85565b6040513d6000823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146131b05760010190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116131b057565b9490939192613b1f6000918688613d13565b93604084015115613c51575b815b6060850151811015613c2757613b438186614e0c565b613b5a613b52828a8a8d614a6b565b509190613183565b84811180159190613bbf57608089015182613b95575b5050613b8757508552613b8290613ab3565b613b2d565b985095505050509250509190565b909150670de0b6b3a7640000908103818111611f5457613bb59087613312565b0411153880613b70565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111613bfa576020860152613b8290613ab3565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60046040517ffa711db2000000000000000000000000000000000000000000000000000000008152fd5b6020840180518851613c86613c8c613c7260608b015160408c01519061401f565b670de0b6b3a76400009283918c51906140db565b056141f8565b81810190828212888212908015821691151617611f5457613cbd613cd8949392613cb8613cd193614089565b6141ee565b613ccb60208d0151856132f6565b906140db565b059061401f565b6103e7908181029181830414901517156124e3576103e8900480821015613d0b5750905b52613d0684614e74565b613b2b565b905090613cfc565b929160409081516080810181811067ffffffffffffffff821117612d1957835260009182825260208201968388528483018481526060840196858852849960a084018581511115613fd35751948503948511613fa6576080840151976301e1338096878a0299808b05891490151715613f79577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff998a88116114965787613db99161411a565b89811315613f49578152602086015189811215613f41577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b8a811315613f33575b613e10670de0b6b3a7640000968792613312565b04908b82116116835790613e23916140db565b80845286519081158015613f2b575b613ef557505085519188613e50896101008a01519651945196613312565b048b811161168357613e61906141f8565b948512613ec5575092613ea060c09593613cb8613e9b613e9686613cb8613e90613eaf9e9d9b613ea69a6132f6565b91614089565b614038565b614089565b9061401f565b90520151613312565b0491821161028d5750613ec1906141f8565b9052565b8460249151907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b604492508351917fb1c4aefb00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b508015613e32565b613f3c90613183565b613dfc565b600190613df3565b6024908351907f1ca418760000000000000000000000000000000000000000000000000000000082526004820152fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b600489517fb2094b59000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000600083820393128184128116918413901516176131b057565b818103929160001380158285131691841216176131b057565b670de0b6b3a7640000811461405f5761405a81613cb8613e9061339094613ffc565b6145da565b60046040517fa9c8b14d000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840514901517156131b057565b9081600003918083057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14901517156131b057565b8181029291600082127f80000000000000000000000000000000000000000000000000000000000000008214166131b05781840514901517156131b057565b811561332f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147f80000000000000000000000000000000000000000000000000000000000000008214166131b0570590565b1561417657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152fd5b801561332f576ec097ce7bc90715b34b9f10000000000590565b811561332f570590565b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc0000811215806145c7575b61422b9061416f565b600081126145b2576064906806f05b59d3b2000000811261454f577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b0280829168ad78ebc5ac62000000811215614513575b50806856bc75e2d631000000849212156144d9575b682b5e3af16b188000008112156144a1575b6815af1d78b58c400000811215614469575b680ad78ebc5ac6200000811215614432575b818112156143fb575b6802b5e3af16b18800008112156143c4575b68015af1d78b58c4000081121561438d575b60028282800205056003838383020505600484848302050560058585830205056006868683020505600787878302050590600888888402050592600989898602050594600a8a8a8802050596600b8b8b8a02050598600c8c8c8c0205059a0101010101010101010101010205020590565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00008392019302059161431c565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800008392019302059161430a565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000839201930205916142f8565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000839201930205916142ef565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000839201930205916142dd565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000839201930205916142cb565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000839201930205916142b9565b6e01855144814a7ff805980ff008400092507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000019050826142a4565b6803782dace9d9000000811261459f577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261428e565b68056bc75e2d631000008260019261428e565b6145be906000036141f8565b613390906141d4565b5068070c1cc73b00c80000811315614222565b60008113156146bd5780670c7d713b49da000012806146ac575b156146a357670de0b6b3a7640000906ec097ce7bc90715b34b9f100000000090614647908302828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026141ee565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b0590565b6133909061471b565b50670f43fc2c04ee000081126145f4565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152fd5b670de0b6b3a76400008112614a545760649060007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215614a29575b73011798004d755d3c8bc8e03204cf44619e000000821215614a08575b8202908202816e01855144814a7ff805980ff008400082818112156149e1575b5050506b02df0ab5a80a22c61ab5a700808212156149c1575b50693f1fce3da636ea5cf850808212156149a1575b50690127fa27722cc06cc5e280821215614981575b5068280e60114edb805d0380821215614961575b50680ebc5fb417461211108082121561494a575b506808f00f760a4b2db55d8082121561492a575b506806f5f17757889379378082121561490a575b506806248f33704b286603808212156148eb575b506805c548670b9510e7ac808212156148cc575b5061488b68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026141ee565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b010590565b68056bc75e2d631000006756bc75e2d63100009202059101903861484f565b68056bc75e2d6310000067ad78ebc5ac6200009202059101903861483b565b68056bc75e2d6310000068015af1d78b58c4000092020591019038614827565b68056bc75e2d631000006802b5e3af16b188000092020591019038614813565b68056bc75e2d6310000080920205910190386147ff565b68056bc75e2d63100000680ad78ebc5ac6200000920205910190386147eb565b68056bc75e2d631000006815af1d78b58c400000920205910190386147d7565b68056bc75e2d63100000682b5e3af16b18800000920205910190386147c2565b68056bc75e2d631000006856bc75e2d631000000920205910190386147ad565b68056bc75e2d631000009192945068ad78ebc5ac6200000093500205910190388080614794565b6b1425982cf597cd205cef7380909105906803782dace9d900000001614774565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000614757565b614a60614a65916141d4565b61471b565b60000390565b93919284516020830151835190604085015192848112614d0d57613cb8613e90614a9f93614a99888561401f565b936132f6565b670d529ae9e8600000808213614cd65750614ac99291613cb8613e9b614ac493614038565b6132f6565b670de0b6b3a764000090818112614c7e576060614af1614aec83613cb887614089565b6140a6565b940151906000809413600014614caf5781613cb8614b0e92614089565b828112614c7e575081614b2b614b2560e093613ffc565b866140db565b05965b0151917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9283811161169f57876064614b6a614b7193836140db565b059561401f565b918183128015614c635715614c5b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff925b82811315614c4d575b818102918183041490151715614c205786614bc691613881565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111614c205786614bfa91613325565b92831161028d5750614c136133909392614c1a926140db565b9585614d6b565b93614d6b565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b614c5690613183565b614bac565b600192614ba3565b505050613390929150614c79614c1a9186614d6b565b614c13565b602490604051907fca78c8a40000000000000000000000000000000000000000000000000000000082526004820152fd5b50614cd0614aec82614ccb614cc560e095613ffc565b886140db565b61411a565b96614b2e565b60449250604051917ffc68d09e00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152fd5b6000821215614e04577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff915b6000811315614df557905b670de0b6b3a7640000918281029281840414901517156131b057614dc591613325565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161036457613390916140db565b614dfe90613183565b90614da2565b600191614d97565b901580614e67575b614e60576020815191015180821115614e515760046040517ffa711db2000000000000000000000000000000000000000000000000000000008152fd5b614e5a91613881565b60011c90565b6040015190565b5060408101511515614e14565b8051906020810151908183118015614ed1575b614e9057505050565b606493506080015190604051927fb301af04000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b50670de0b6b3a7640000608082015111614e87565b93929094614ef76000928787613d13565b95604085015115614fa4575b825b6060860151811015613c2757614f1b8187614e0c565b614f2f614f2782613183565b848b8b614a6b565b50878210801590614f965760808a015181614f6e575b50614f5f5750506020870152614f5a90613ab3565b614f05565b91995097509550919350505050565b670de0b6b3a764000091508101808211613f7957614f8c908a613312565b0482111538614f45565b5050508652614f5a90613ab3565b6020850180518460208a01614fb98151613ae0565b808303614fe457505080821015614fdc5750905b52614fd785614e74565b614f03565b905090614fcd565b614fee8184613881565b6001808201809211615107571c908b5161500983855161401f565b61501382856132f6565b8b8213806150fe575b156150a0578f613cd1670de0b6b3a76400009161507e8f9661405a61508397613cb86150636150568f8f9061506997613ccb9151906132f6565b613cb8613e90858d6140db565b98614089565b604061507584516141d4565b9301519561401f565b6140db565b1215615098575061509390613ae0565b614fb9565b925091614fb9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152fd5b508b811361501c565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9173ffffffffffffffffffffffffffffffffffffffff8060c0816020870151169501511690604051937f769f8e5d0000000000000000000000000000000000000000000000000000000085521660048401528160248401526044830152606482015260208160a481600080968160848401525af19182156118f05780926151ba57505090565b9091506020823d8211613a9f5781613a9260209383612db2565b9092919273ffffffffffffffffffffffffffffffffffffffff809116911691813b156103645761523a93604051928380927f1b9d082d00000000000000000000000000000000000000000000000000000000825281600098899687938a6004850161335e565b03925af180156152d2576152c0575b50602082916024604051809481937fbcb7ea5d0000000000000000000000000000000000000000000000000000000083523060048401525af19182156118f05791615292575090565b90506020813d82116152b8575b816152ac60209383612db2565b81010312610364575190565b3d915061529f565b916152cc602093612d81565b91615249565b6040513d85823e3d90fd5b90600b8110156152ee5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80156131b0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b9060058110156152ee5760051b0190565b6000808212615366575090565b039056fea2646970667358221220652e5620dce64a1434f4e2b7eaab6dae9fd01e5e48f6ca0f6a7122075fceeed164736f6c6343000813003300000000000000000000000045312ea0eff7e09c83cbe249fa1d7598c4c8cd4e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dace1121e10500e9e29d071f01593fd76b000f080000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000001c520fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6d44000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd0000000000000000000000003cef1afc0e8324b57293a6e7ce663781bbefbb790000000000000000000000009d39a5de30e57443bff2a8307a4256c8797a3497000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cef1afc0e8324b57293a6e7ce663781bbefbb79000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000