0 txs
1 call
constructor
constructor() payable
functions
buildBestSwap
viewfunction buildBestSwap(address to, bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount, uint256 slippageBps, uint256 deadline) view returns (tuple best, bytes callData, uint256 amountLimit, uint256 msgValue)
getQuotes
viewfunction getQuotes(bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount) view returns (tuple best, tuple[] quotes)
limit
purefunction limit(bool exactOut, uint256 quoted, uint256 bps) pure returns (uint256)
quoteSushi
viewfunction quoteSushi(bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut)
quoteV2
viewfunction quoteV2(bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut)
quoteV3
viewfunction quoteV3(bool exactOut, address tokenIn, address tokenOut, uint24 fee, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut, bool singleTick)
quoteV4
viewfunction quoteV4(bool exactOut, address tokenIn, address tokenOut, uint24 feePips, int24 tickSpacing, address hooks, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut, bool singleTick)
quoteZAMM
viewfunction quoteZAMM(bool exactOut, uint256 feeOrHook, address tokenIn, address tokenOut, uint256 idIn, uint256 idOut, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut)
events
No events.
errors
InsufficientInputAmount
error InsufficientInputAmount()
InsufficientLiquidity
error InsufficientLiquidity()
InsufficientOutputAmount
error InsufficientOutputAmount()
NoRoute
error NoRoute()
UnsupportedAMM
error UnsupportedAMM()
creation bytecode
0x608080604052613dde90816100128239f3fe60806040526004361015610011575f80fd5b5f3560e01c806361d65dee14610631578063732ef91a1461061557806380afe307146105f9578063ac67a76e14610595578063b8e2512214610562578063c0bb84b314610512578063e1fd10bc1461049a5763e779898714610071575f80fd5b346104965760e0366003190112610496576004356001600160a01b0381169081900361049657602435801515808203610496576100ac6106ba565b906100b56106d0565b926084359460c4356100c5611a47565b506060956100d588828887611b01565b5096604088018051158061048b575b61047c576100ff9186156104725750515b60a43590866130f3565b948751600581101561045e576101df579261019b9892610100989795926020979560405193630dc149f360e31b8a8601526024850152604484015260018060a01b038716606484015260018060a01b031660848301528360a48301528460c483015260e482015260e48152610176610104826107b8565b935b6001600160a01b03166101d657156101d15750805b915b6040519687809661073f565b60e0608086015280519384918260e0880152018686015e5f84840186015260a084015260c0830152601f01601f19168101030190f35b61018d565b50505f9161018f565b90918751600581101561045e576001036102625750926020949261019b989261010098979560405192630dc149f360e31b898501526024840152604483015260018060a01b038616606483015260018060a01b031660848201528260a48201528360c48201525f1960e482015260e4815261025c610104826107b8565b93610178565b91908751600581101561045e576002036102f7579261019b98928897959260209795886101009b015190604051946313ab6b5f60e31b8b87015260248601526044850152606484015260018060a01b038716608484015260018060a01b031660a48301525f60c48301525f60e48301528361010483015284610124830152610144820152610144815261025c610164826107b8565b8751600581101561045e57600303610384579261019b9892889795926020979562ffffff60648a6101009d01510216906040519463afeae12b60e01b8b87015260248601526044850152606484015260018060a01b038716608484015260018060a01b031660a48301528360c48301528460e4830152610104820152610104815261025c610124826107b8565b96959390979194928651600581101561045e5760040361044f576020870151956103b161ffff881661312c565b9960648802978089046064149015171561043b5761019b9a62ffffff6020996101009c604051966310e06d6960e11b8d8901526024880152604487015216606485015260020b608484015260018060a01b03871660a484015260018060a01b031660c48301528360e483015284610104830152610124820152610124815261025c610144826107b8565b634e487b7160e01b5f52601160045260245ffd5b633953ec5d60e21b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b90508801516100f5565b636586e12960e01b5f5260045ffd5b5081890151156100e4565b5f80fd5b34610496576104b46104ab366106f8565b92919091611b01565b906040519182916104c98360a081019261073f565b60a060808401528151809152602060c084019201905f5b8181106104ee575050500390f35b919350916020608082610504600194885161073f565b0194019101918493926104e0565b346104965760e0366003190112610496576040610556610530610695565b6105386106ba565b6105406106d0565b9160c4359260a435926084359260243590611845565b82519182526020820152f35b3461049657606036600319011261049657602061058d610580610695565b60443590602435906130f3565b604051908152f35b346104965760a0366003190112610496576105f56105d66105b4610695565b6105bc6106a4565b6105c46106ba565b6105cc6106e6565b9160843593610f61565b6040805193845260208401929092521515908201529081906060820190565b0390f35b3461049657604061055661060c366106f8565b92919091610e86565b34610496576040610556610628366106f8565b92919091610c82565b346104965760e03660031901126104965761064a610695565b6106526106a4565b61065a6106ba565b916106636106e6565b6084358060020b81036104965760a435916001600160a01b0383168303610496576105f5956105d69560c43595610b6d565b60043590811515820361049657565b602435906001600160a01b038216820361049657565b604435906001600160a01b038216820361049657565b606435906001600160a01b038216820361049657565b6064359062ffffff8216820361049657565b608090600319011261049657600435801515810361049657906024356001600160a01b038116810361049657906044356001600160a01b0381168103610496579060643590565b8051600581101561045e576060918291845260208101516020850152604081015160408501520151910152565b60a0810190811067ffffffffffffffff82111761078857604052565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761078857604052565b90601f8019910116810190811067ffffffffffffffff82111761078857604052565b51906001600160a01b038216820361049657565b51908160020b820361049657565b519062ffffff8216820361049657565b9081602091031261049657516001600160801b03811681036104965790565b9190820391821161043b57565b939291909594958615610b5e579061084f9161310f565b926040519261085d8461076c565b60018060a01b031692838152602081019260018060a01b0316835262ffffff604082019216825262ffffff608060608301928860020b845201925f8452604051946020860196875260018060a01b039051166040860152511660608401525160020b608083015260018060a01b0390511660a082015260a081526108e260c0826107b8565b5190209160405193633205590760e21b8552836004860152608085602481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa915f835f975f95610af7575b50610939575050505050505090505f905f905f90565b9560405163fa6793d560e01b8152866004820152602081602481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa5f9181610ac6575b5061098957505050505050505090505f905f905f90565b956001600160801b038716158015610ab4575b610aa25762ffffff926109b0928792612109565b93905016620f42400390620f4240821161043b57610a3d576109d290876127fb565b9083858415610a2e576109e49261253a565b8111156109fa575050505090505b5f905f905f90565b81610a06918486612b42565b9015610a1f5791610a1692612615565b915b9190600190565b610a289261253a565b91610a18565b91610a3892612615565b6109e4565b939593929081878415610a9357610a5392612615565b841115610a65575050505090506109f2565b85610a76838684610a18989a6126c2565b9215610a8a57610a85926125a5565b612799565b610a8592612658565b91610a9d9261253a565b610a53565b505050505050505090505f905f905f90565b50620f424062ffffff8616101561099c565b610ae991925060203d602011610af0575b610ae181836107b8565b81019061080c565b905f610972565b503d610ad7565b97509350506080863d608011610b56575b81610b15608093836107b8565b8101031261049657610b26866107da565b95610b4c6060610b38602084016107ee565b92610b45604082016107fc565b50016107fc565b969096935f610923565b3d9150610b08565b505050505090505f905f905f90565b949291909695968715610c1d5790610b849161310f565b93909162ffffff60405191610b988361076c565b60018060a01b031694858352602083019460018060a01b03168552816040840191168152608060608401938960020b8552019360018060a01b03168452604051946020860196875260018060a01b039051166040860152511660608401525160020b608083015260018060a01b0390511660a082015260a081526108e260c0826107b8565b50505050505090505f905f905f90565b51906001600160701b038216820361049657565b519063ffffffff8216820361049657565b9081606091031261049657610c6681610c2d565b91610c7f6040610c7860208501610c2d565b9301610c41565b90565b91909392938415610ded57610cb691906001600160a01b03811615610e6b575b6001600160a01b03821615610e4f5761310f565b91906040519060208201926001600160601b03199060601b1683526001600160601b03199060601b16603482015260288152610cf36048826107b8565b5190207f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f9060405191602083019160ff60f81b8352735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f60601b60218501526035840152605583015260558252610d5e6075836107b8565b905190206001600160a01b0316803b15610ded57606060049160405192838092630240bc6b60e21b82525afa918215610e44575f915f93610e10575b5015610e00576001600160701b0380915b1691169181158015610df8575b610ded5715610de25781841015610dd85790610dd49184612c56565b9190565b505090505f905f90565b90610c7f9184612bdd565b50505090505f905f90565b508215610db8565b906001600160701b038091610dab565b909250610e35915060603d606011610e3d575b610e2d81836107b8565b810190610c52565b50915f610d9a565b503d610e23565b6040513d5f823e3d90fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2915061310f565b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610ca2565b91909392938415610ded57610eb991906001600160a01b03811615610e6b576001600160a01b03821615610e4f5761310f565b91906040519060208201926001600160601b03199060601b1683526001600160601b03199060601b16603482015260288152610ef66048826107b8565b5190207fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c63039060405191602083019160ff60f81b835273302bb91e38d9638984317de928b85ddf3a793cab60621b60218501526035840152605583015260558252610d5e6075836107b8565b939291908315610fee57610f93946001600160a01b03821615610fd2575b6001600160a01b03831615610fb657612d18565b604081015190919015610fad576020825192015190600190565b5f915081908190565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29250612d18565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29150610f7f565b50505050505f905f905f90565b91909392935f91851561126057611012908261310f565b926001600160a01b0392831692168203611257575f915f915b60806040516110398161076c565b858152602080820195865260408083019586526001600160a01b039485166060808501918252600195909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261109e60c0826107b8565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa918215610e44575f915f93611207575b50156111f7576001600160701b0380915b169116928115908180156111ef575b6111e2571561119a575082851015611192578461111791612024565b91612710830292808404612710149015171561117e5761113885839261082b565b9161116a575061270f9081810291818304149015171561043b5761115b91612530565b6001810180911161043b579190565b634e487b7160e01b81526011600452602490fd5b634e487b7160e01b82526011600452602482fd5b509250508190565b9150849261270f9384810294818604149015171561043b576111bc9084612024565b91612710820291820461271014171561043b57610c7f926111dc9161209a565b90612530565b505050505090505f905f90565b5084156110fb565b906001600160701b0380916110ec565b9150915060e0813d60e01161124f575b8161122460e093836107b8565b810103126104965761123581610c2d565b6112466040610c7860208501610c2d565b5090915f6110db565b3d9150611217565b5f915f9161102b565b5050505090505f905f90565b91909392935f91851561126057611283908261310f565b926001600160a01b0392831692168203611456575f915f915b60806040516112aa8161076c565b858152602080820195865260408083019586526001600160a01b039485166060808501918252600595909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261130f60c0826107b8565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa918215610e44575f915f93611406575b50156113f6576001600160701b0380915b169116928115908180156113ee575b6111e257156113cc575082851015611192578461138891612024565b91612710830292808404612710149015171561117e576113a985839261082b565b9161116a575061270b9081810291818304149015171561043b5761115b91612530565b9150849261270b9384810294818604149015171561043b576111bc9084612024565b50841561136c565b906001600160701b03809161135d565b9150915060e0813d60e01161144e575b8161142360e093836107b8565b810103126104965761143481610c2d565b6114456040610c7860208501610c2d565b5090915f61134c565b3d9150611416565b5f915f9161129c565b91909392935f91851561126057611476908261310f565b926001600160a01b0392831692168203611649575f915f915b608060405161149d8161076c565b858152602080820195865260408083019586526001600160a01b039485166060808501918252601e95909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261150260c0826107b8565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa918215610e44575f915f936115f9575b50156115e9576001600160701b0380915b169116928115908180156115e1575b6111e257156115bf575082851015611192578461157b91612024565b91612710830292808404612710149015171561117e5761159c85839261082b565b9161116a57506126f29081810291818304149015171561043b5761115b91612530565b915084926126f29384810294818604149015171561043b576111bc9084612024565b50841561155f565b906001600160701b038091611550565b9150915060e0813d60e011611641575b8161161660e093836107b8565b810103126104965761162781610c2d565b6116386040610c7860208501610c2d565b5090915f61153f565b3d9150611609565b5f915f9161148f565b91909392935f91851561126057611669908261310f565b926001600160a01b039283169216820361183c575f915f915b60806040516116908161076c565b858152602080820195865260408083019586526001600160a01b039485166060808501918252606495909401948552815192830198895296519082015293518316908401529251166080820152905160a08281019190915281526116f560c0826107b8565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa918215610e44575f915f936117ec575b50156117dc576001600160701b0380915b169116928115908180156117d4575b6111e257156117b2575082851015611192578461176e91612024565b91612710830292808404612710149015171561117e5761178f85839261082b565b9161116a57506126ac9081810291818304149015171561043b5761115b91612530565b915084926126ac9384810294818604149015171561043b576111bc9084612024565b508415611752565b906001600160701b038091611743565b9150915060e0813d60e011611834575b8161180960e093836107b8565b810103126104965761181a81610c2d565b61182b6040610c7860208501610c2d565b5090915f611732565b3d91506117fc565b5f915f91611682565b93909491929695968715611a395761185d908461310f565b9490926001600160a01b03928316929091168203611a335792915b60806040516118868161076c565b8581526020810194855260408101938452606081019260018060a01b031683520191878352604051936020850195865251604085015260018060a01b03905116606084015260018060a01b0390511660808301525160a082015260a081526118ef60c0826107b8565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa918215610e44575f915f936119e3575b50156119d3576001600160701b0380915b169116918115908180156119cb575b6111e257156119a4575081851015610ded578461196891612024565b90612710820291808304612710149015171561043b57846119889161082b565b916127100391612710831161043b5761115b926111dc91612024565b91929480956127100390612710821161043b576111bc916119c491612024565b9384612024565b50831561194c565b906001600160701b03809161193d565b9150915060e0813d60e011611a2b575b81611a0060e093836107b8565b8101031261049657611a1181610c2d565b611a226040610c7860208501610c2d565b5090915f61192c565b3d91506119f3565b91611878565b50505050505090505f905f90565b60405190611a548261079c565b5f6060838281528260208201528260408201520152565b805115611a785760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015611a785760400190565b805160021015611a785760600190565b805160031015611a785760800190565b805160041015611a785760a00190565b805160051015611a785760c00190565b8051821015611a785760209160051b010190565b906004811015611a785760051b0190565b92919390611b0d611a47565b506101e06040519581611b218893846107b8565b600e8352601f19015f5b8181106120045750508194611b428183868a610c82565b60405191611b4f8361079c565b5f8352601e602084015260408301526060820152611b6c84611a6b565b52611b7683611a6b565b50611b838183868a610e86565b60405191611b908361079c565b60018352601e602084015260408301526060820152611bae84611a8c565b52611bb883611a8c565b50611bc58183868a610ffb565b60405191611bd28361079c565b600283526001602084015260408301526060820152611bf084611a9c565b52611bfa83611a9c565b50611c078183868a61126c565b60405191611c148361079c565b600283526005602084015260408301526060820152611c3284611aac565b52611c3c83611aac565b50611c498183868a61145f565b60405191611c568361079c565b60028352601e602084015260408301526060820152611c7484611abc565b52611c7e83611abc565b50611c8b8183868a611652565b60405191611c988361079c565b600283526064602084015260408301526060820152611cb684611acc565b52611cc083611acc565b50604051611ccd8161079c565b606481526101f46020820152610bb8604082015261271060608201526006905f5b838a868960048503611f815750505050505060405192611d0d8461079c565b606484526101f46020850152610bb86040850152612710606085015260405191611d368361079c565b60018352600a6020840152603c604084015260c860608401525f905b60048203611ef35750505050505050509091611d6c611a47565b915f905f9215935b86518414611eeb57611d868488611adc565b51906040820151801580611edf575b611ed3578415611ec2578615611e395760608301516060830151908181115f14611dcd5750505050611dc7909361278b565b92611d74565b9693929614611de2575b5050611dc79061278b565b6040869293960151908181105f14611e0457505050611dc790935b905f611dd7565b959291951480611e28575b611e1e575b50611dc790611dfd565b9350611dc7611e14565b506020810151602086015111611e0f565b60408201519081811015611e5457505050611dc7909361278b565b9592919514611e68575b50611dc79061278b565b909360608201516060820151908181115f14611e8d57505050611dc790935b90611e5e565b959291951480611eb1575b611ea7575b50611dc790611e87565b9350611dc7611e9d565b506020810151602086015111611e98565b50909360019350611dc7915061278b565b5093611dc7915061278b565b50606083015115611d95565b955092505050565b90611f78600187611f7182958f606462ffffff8f611f358e8b958f8f611f3e95611f2b8a898f82611f2391611af0565b511694611af0565b5160020b93610838565b50949097611af0565b5116049361ffff60405195611f528761079c565b600487521660208601526040850152606084015280938491019b611adc565b528d611adc565b50018a95611d52565b611faa611ff9946001979893948895611ff29462ffffff611fa28b8e611af0565b511692610f61565b50606462ffffff611fbe898c979597611af0565b5116049362ffffff60405195611fd38761079c565b600387521660208601526040850152606084015280938491019a611adc565b528c611adc565b500190899491611cee565b60209192969350612013611a47565b82828b010152019087929591611b2b565b8181029291811591840414171561043b57565b60020b9060020b90811561205957627fffff1981145f1983141661043b570590565b634e487b7160e01b5f52601260045260245ffd5b9060020b9081156120595760020b0790565b60020b5f190190627fffff198212627fffff83131761043b57565b9190820180921161043b57565b60081b908160020b9160030b820361043b57565b9060020b9060020b02908160020b91820361043b57565b9060020b9060020b0190627fffff198212627fffff83131761043b57565b6001600160a01b03918216908216039190821161043b57565b92906121158382612037565b90835f8260020b12918261251a575b505061250c575b60020b6101008160081d60010b9107908360020b91821561205957620d89e7198381059384910760020b6124fa575b50620d89e89361216a8686612037565b94508360020b60081d60010b948060020b60081d60010b915f1461233b57505060405163071f32d360e21b815260048101879052600183900b602482015290602082604481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa918215610e44575f92612306575b5060ff1660ff81145f146122e657505f19905b168061226057505b60010b828113156122cf57617fff19811461043b5760405163071f32d360e21b8152600481018690525f1991909101600181900b602483015290602081604481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa908115610e44575f9161229e575b508061226057506121ef565b612294955061228f935060ff91925061227b6122849161378f565b9260010b6120a7565b911660020b906120d2565b6120bb565b90610c7f826131b6565b90506020813d82116122c7575b816122b8602093836107b8565b8101031261049657515f612254565b3d91506122ab565b5090506122dc92506120bb565b906401000276a490565b6001810180911161043b576001901b5f19810190811161043b57906121e7565b9091506020813d602011612333575b81612322602093836107b8565b8101031261049657519060ff6121d4565b3d9150612315565b60405163071f32d360e21b815260048101899052600185900b6024820152919550935090602082604481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa918215610e44575f926124c5575b5060ff1660ff81145f146124a457505f905b168061248357505b60010b8281121561245d57617fff811461043b5760405163071f32d360e21b81526004810186905260019182019182900b6024820152602081604481737ffe42c4a5deea5b0fec41c94c136cf1155972275afa908115610e44575f9161242c575b508061241157506123a4565b612294955061228f935060ff91925061227b6122849161316e565b90506020813d8211612455575b81612446602093836107b8565b8101031261049657515f612405565b3d9150612439565b50905061246a92506120bb565b9073fffd8963efd1fc6a506488495d951d5263988d2590565b612294955061228f935060ff91925061249e6122849161316e565b926120a7565b6001810180911161043b576001901b5f19810190811161043b57199061239c565b9091506020813d6020116124f2575b816124e1602093836107b8565b8101031261049657519060ff61238a565b3d91506124d4565b61250591935061207f565b915f61215a565b6125159061207f565b61212b565b612524925061206d565b60020b1515835f612124565b8115612059570490565b91906001600160a01b038082169084161161259f575b6001600160a01b0361256284836120f0565b16926001600160a01b031691821561049657610c7f9361259a926001600160a01b03169160601b600160601b600160e01b0316612b01565b612530565b91612550565b916001600160a01b038281169084161161260d575b6001600160a01b036125cc84846120f0565b6001600160a01b039094169316831561049657612601926001600160a01b03169160601b600160601b600160e01b03166127cf565b90808206151591040190565b9190916125ba565b610c7f92916001600160801b03916001600160a01b0380831690821611612652575b6001600160a01b039161264a91906120f0565b169116612966565b90612637565b6001600160801b0391906001600160a01b03808316908216116126bc575b6001600160a01b039161268991906120f0565b16911661269b600160601b8383612b01565b91600160601b91096126aa5790565b5f1981101561049657610c7f9061278b565b90612676565b929091906001600160a01b03841615610496576001600160801b038316156104965715612781576001600160a01b038111612738576001600160801b039060601b91168082061515910401905b6001600160a01b03169080821115610496576001600160a01b0391612734919061082b565b1690565b906001600160801b031661275181600160601b84612b01565b91811561205957600160601b900961276a575b9061270f565b5f198110156104965761277c9061278b565b612764565b90610c7f926138d5565b5f19811461043b5760010190565b91906127a981620f424085612b01565b92811561205957620f424090096127bc57565b905f1981101561049657610c7f9061278b565b9291906127dd828286612b01565b93821561205957096127bc57565b600160ff1b811461043b575f0390565b5f905f1983820992808202918280861095039480860395146129585784620f424011156129545790620f42409109613d09936040919061284b90603f198601849004600101908584119003612024565b9203041791806003026003810482036129405760021861286b8183612024565b600203906002821161292c579061288191612024565b61288b8183612024565b600203906002821161292c57906128a191612024565b6128ab8183612024565b600203906002821161292c57906128c191612024565b6128cb8183612024565b600203906002821161292c57906128e191612024565b6128eb8183612024565b600203906002821161292c5761290b9161290491612024565b8092612024565b600203916002831161116a5750610c7f929161292691612024565b90612024565b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b83526011600452602483fd5b8380fd5b50509050620f424091500490565b905f905f1981840992818102918280861095039480860395146129c457600160601b85101561295457600160601b9109600193600160601b919061284b906bffffffffffffffffffffffff1986018490048701908584119003612024565b505091505060601c90565b5f19600160601b8209918160601b91828085109403938085039414612af45783821115610496578190600160601b9009612a2482612a0c816127eb565b1680930494600184805f030401908584119003612024565b920304178160030260038104830361043b57600218612a438184612024565b6002036002811161043b57612a5791612024565b612a618184612024565b6002036002811161043b57612a7591612024565b612a7f8184612024565b6002036002811161043b57612a9391612024565b612a9d8184612024565b6002036002811161043b57612ab191612024565b612abb8184612024565b600203906002821161043b57612adb91612ad491612024565b8093612024565b600203916002831161043b57610c7f9261292691612024565b5080925015610496570490565b915f198284099282810292838086109503948086039514612b34578483111561049657829109612a2482612a0c816127eb565b505080925015610496570490565b926001600160a01b03841615610496576001600160801b038216156104965715612b6f57610c7f9261394c565b612ba9916001600160a01b038111612bc4576001600160801b03612b9792169060601b612530565b915b6001600160a01b0316918261209a565b908110610496576001600160a01b0381169081036104965790565b6001600160801b03612bd79216906129cf565b91612b99565b91908215612c4757801591821580612c3e575b15612c2f576103e584029384046103e50361043b57612c0f9084612024565b916103e882029182046103e814171561043b57610c7f926111dc9161209a565b63bb55fd2760e01b5f5260045ffd5b50801515612bf0565b63098fb56160e01b5f5260045ffd5b91908215612cdb5780151580612cd2575b15612c2f5781831015612c2f5782612c7e91612024565b916103e88302928084046103e8149015171561043b57612c9d9161082b565b906103e58202918083046103e5149015171561043b5781612cbd9161209a565b5f1981019190821161043b57610c7f91612530565b50811515612c67565b6342301c2360e01b5f5260045ffd5b9081602091031261049657516001600160a01b03811681036104965790565b519061ffff8216820361049657565b94939294612d24611a47565b9584156130ec5762ffffff16620f42408110156130ec57604051630b4c774160e11b81526001600160a01b039384166004820181905294909316602484015260448301819052602083606481731f98431c8ad98523631ae4a59f267346ea31f9845afa928315610e44575f936130cb575b506001600160a01b0383169182156130c357604051633850c7bd60e01b81529360e085600481875afa958615610e44575f955f97613037575b50604051630d34328160e11b815294602086600481845afa958615610e44575f96613016575b506001600160801b03861615612fa057602060049160405192838092630dfe168160e01b82525afa908115610e44575f91612fe7575b5060018060a01b03161495604051916322afcccb60e01b8352846004840152602083602481731f98431c8ad98523631ae4a59f267346ea31f9845afa928315610e44575f93612fab575b505f8360020b1315612fa057918791612e8c936139df565b929050620f42400390620f4240821161043b57612f3b57612ead90866127fb565b9082848615612f2c57612ebf9261253a565b811115612ecd575050505050565b839495965092829382612ee09394612b42565b80935f14612f1e5791612ef292612615565b60405192612eff8461079c565b83526020830152600160408301526001600160a01b0316606082015290565b612f279261253a565b612ef2565b91612f3692612615565b612ebf565b92919081838615612f9157612f4f92612615565b851115612f5d575050505050565b84959650612f7184612f83959683856126c2565b80955f14610a8a5791610a85926125a5565b9160405192612eff8461079c565b91612f9b9261253a565b612f4f565b505050505050505050565b9092506020813d602011612fdf575b81612fc7602093836107b8565b8101031261049657612fd8906107ee565b915f612e74565b3d9150612fba565b613009915060203d60201161300f575b61300181836107b8565b810190612cea565b5f612e2a565b503d612ff7565b61303091965060203d602011610af057610ae181836107b8565b945f612df4565b9550955060e0853d60e0116130bb575b8161305460e093836107b8565b8101031261049657613065856107da565b613071602087016107ee565b9561307e60408201612d09565b5061308b60608201612d09565b5061309860808201612d09565b5060a081015160ff8116036104965760c00151801515036104965794955f612dce565b3d9150613047565b505050505050565b6130e591935060203d60201161300f5761300181836107b8565b915f612d95565b5050505050565b6127109290156131085782010261270f010490565b8203020490565b6001600160a01b03828116908216109081156131285792565b9192565b61ffff1660018114613168576005811461316257601e811461315c57606481146131565760020b90565b5060c890565b50603c90565b50600a90565b50600190565b801561318b5780196001810180911161043b57610c7f911661378f565b606460405162461bcd60e51b815260206004820152600460248201526306c7362360e41b6044820152fd5b60020b5f811215613789576131ca816127eb565b905b620d89e8821161376057600182161561374e576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b169160028116613713575b600481166136d8575b6008811661369d575b60108116613662575b60208116613627575b604081166135ec575b608081166135b1575b6101008116613576575b610200811661353b575b6104008116613500575b61080081166134c5575b611000811661348a575b612000811661344f575b6140008116613414575b61800081166133d9575b62010000811661339e575b620200008116613365575b62040000811661332e575b62080000166132fb575b5f126132ed575b63ffffffff81166132e2576127345f915b6001600160a01b039260ff169060201c61209a565b6127346001916132cd565b8015612059575f19046132bc565b906b048a170391f7dc42444e8fa28102908082046b048a170391f7dc42444e8fa2149015171561043b5760801c906132b5565b916d2216e584f5fa1ea926041bedfe988102908082046d2216e584f5fa1ea926041bedfe98149015171561043b5760801c916132ab565b916e5d6af8dedb81196699c329225ee6048102908082046e5d6af8dedb81196699c329225ee604149015171561043b5760801c916132a0565b916f09aa508b5b7a84e1c677de54f3e99bc98102908082046f09aa508b5b7a84e1c677de54f3e99bc9149015171561043b5760801c91613295565b916f31be135f97d08fd981231505542fcfa68102908082046f31be135f97d08fd981231505542fcfa6149015171561043b5760801c9161328a565b916f70d869a156d2a1b890bb3df62baf32f78102908082046f70d869a156d2a1b890bb3df62baf32f7149015171561043b5760801c91613280565b916fa9f746462d870fdf8a65dc1f90e061e58102908082046fa9f746462d870fdf8a65dc1f90e061e5149015171561043b5760801c91613276565b916fd097f3bdfd2022b8845ad8f792aa58258102908082046fd097f3bdfd2022b8845ad8f792aa5825149015171561043b5760801c9161326c565b916fe7159475a2c29b7443b29c7fa6e889d98102908082046fe7159475a2c29b7443b29c7fa6e889d9149015171561043b5760801c91613262565b916ff3392b0822b70005940c7a398e4b70f38102908082046ff3392b0822b70005940c7a398e4b70f3149015171561043b5760801c91613258565b916ff987a7253ac413176f2b074cf7815e548102908082046ff987a7253ac413176f2b074cf7815e54149015171561043b5760801c9161324e565b916ffcbe86c7900a88aedcffc83b479aa3a48102908082046ffcbe86c7900a88aedcffc83b479aa3a4149015171561043b5760801c91613244565b916ffe5dee046a99a2a811c461f1969c30538102908082046ffe5dee046a99a2a811c461f1969c3053149015171561043b5760801c9161323a565b916fff2ea16466c96a3843ec78b326b528618102908082046fff2ea16466c96a3843ec78b326b52861149015171561043b5760801c91613231565b916fff973b41fa98c081472e6896dfb254c08102908082046fff973b41fa98c081472e6896dfb254c0149015171561043b5760801c91613228565b916fffcb9843d60f6159c9db58835c9266448102908082046fffcb9843d60f6159c9db58835c926644149015171561043b5760801c9161321f565b916fffe5caca7e10e4e61c3624eaa0941cd08102908082046fffe5caca7e10e4e61c3624eaa0941cd0149015171561043b5760801c91613216565b916ffff2e50f5f656932ef12357cf3c7fdcc8102908082046ffff2e50f5f656932ef12357cf3c7fdcc149015171561043b5760801c9161320d565b916ffff97272373d413259a46990580e213a8102908082046ffff97272373d413259a46990580e213a149015171561043b5760801c91613204565b6001600160881b03600160801b6131f9565b60405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606490fd5b806131cc565b905f9180156138aa57600160801b81101561389f575b68010000000000000000811015613887575b64010000000081101561386f575b62010000811015613857575b61010081101561383f575b6010811015613827575b806004600292101561380e575b10156137fb57565b9060ff600191160160ff811161043b5790565b60ff90821c93160160ff811161043b57600290926137f3565b60ff600491821c93160160ff811161043b57916137e6565b60ff600891821c93160160ff811161043b57916137dc565b60ff601091821c93160160ff811161043b57916137d1565b60ff602091821c93160160ff811161043b57916137c5565b60ff604091821c93160160ff811161043b57916137b7565b60809250821c6137a5565b606460405162461bcd60e51b815260206004820152600460248201526306d7362360e41b6044820152fd5b9082156139465760601b600160601b600160e01b0316906001600160a01b03168061390a6139038286612024565b9485612530565b148061393d575b1561049657613923613929938361082b565b916127cf565b6001600160a01b0381169081036104965790565b50828211613911565b50905090565b9082156139465760601b600160601b600160e01b0316906001600160a01b03166139768184612024565b816139818583612530565b146139b8575b5061399561399c9183612530565b928361209a565b918210610496578181049190061515016001600160a01b031690565b6139c2908361209a565b828110613987576001600160a01b039350612734929091906127cf565b6001600160a01b031692906139f5908390613d65565b60020b6101008160081d60010b9107908091613a1585620d89e719612037565b938560020b801561205957620d89e7190760020b613d55575b620d89e890613a3d8783612037565b91875f8260020b129182613d3f575b5050613d2f575b8560020b60081d60010b938260020b60081d60010b915f14613bcf5750505060405163299ce14b60e11b81528360010b918260048301526020826024818b5afa918215610e44575f92613b9a575b5060ff1660ff81145f14613b7a57505f19905b1680613b5d575050905b818160010b13613ad45750506122dc92506120bb565b5f190160010b9060405163299ce14b60e11b8152826004820152602081602481895afa908115610e44575f91613b2c575b5080613b12575090613abe565b612294955061228f935060ff915061249e6122849161378f565b90506020813d8211613b55575b81613b46602093836107b8565b8101031261049657515f613b05565b3d9150613b39565b612294965061228f945061228491935060ff925061249e9061378f565b6001810180911161043b576001901b5f19810190811161043b5790613ab4565b9091506020813d602011613bc7575b81613bb6602093836107b8565b8101031261049657519060ff613aa1565b3d9150613ba9565b60405163299ce14b60e11b815260048101829052929650909350916020826024818b5afa918215610e44575f92613cfa575b5060ff1660ff81145f14613cd957505f905b1680613cbc575050905b818160010b12613c3357505061246a92506120bb565b60010160010b9060405163299ce14b60e11b8152826004820152602081602481895afa908115610e44575f91613c8b575b5080613c71575090613c1d565b612294955061228f935060ff915061249e6122849161316e565b90506020813d8211613cb4575b81613ca5602093836107b8565b8101031261049657515f613c64565b3d9150613c98565b612294965061228f945061228491935060ff925061249e9061316e565b6001810180911161043b576001901b5f19810190811161043b571990613c13565b9091506020813d602011613d27575b81613d16602093836107b8565b8101031261049657519060ff613c01565b3d9150613d09565b90613d399061207f565b90613a53565b613d49925061206d565b60020b1515875f613a4c565b93613d5f9061207f565b93613a2e565b919091613d728382612037565b925f8260020b129182613d92575b5050613d8857565b90610c7f9061207f565b613d9c925061206d565b60020b15155f80613d8056fea26469706673582212209719372ebf576b2ce638740121f4e961f17a84d860cb4ecf49c76571e41d83c064736f6c634300081e0033