0 txs
15 calls
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)
buildBestSwapViaETHMulticall
viewfunction buildBestSwapViaETHMulticall(address to, address refundTo, bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount, uint256 slippageBps, uint256 deadline) view returns (tuple a, tuple b, bytes[] calls, uint256 msgValue)
getQuotes
viewfunction getQuotes(bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount) view returns (tuple best, tuple[] quotes)
quoteV2
viewfunction quoteV2(bool exactOut, address tokenIn, address tokenOut, uint256 swapAmount, bool sushi) 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)
quoteV4
viewfunction quoteV4(bool exactOut, address tokenIn, address tokenOut, uint24 fee, int24 tickSpacing, address hooks, uint256 swapAmount) view returns (uint256 amountIn, uint256 amountOut)
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()
LSB_0
error LSB_0()
MSB_0
error MSB_0()
NoRoute
error NoRoute()
UnsupportedAMM
error UnsupportedAMM()
ZeroAmount
error ZeroAmount()
creation bytecode
0x608080604052615f1290816100128239f3fe6103606040526004361015610012575f80fd5b5f3560e01c806361d65dee14610347578063ac67a76e14610307578063c0bb84b3146102c3578063e1fd10bc1461022f578063e453166e14610142578063e7798987146100be5763ee9a5b9d14610067575f80fd5b346100ba5760a03660031901126100ba576100806103aa565b6100886103b9565b6100906103cf565b916084359081151582036100ba576040936100ae936064359261511d565b82519182526020820152f35b5f80fd5b346100ba5760e03660031901126100ba576100d76103fb565b6024359081151582036100ba5761011161013391610122936100f76103cf565b916101006103e5565b60c4359360a4359360843593614dba565b916040949193945195868096610423565b60e0608086015260e0850190610464565b9160a084015260c08301520390f35b346100ba576101003660031901126100ba5761015c6103fb565b6101646103b9565b6044359081151582036100ba576101796103e5565b926084356001600160a01b03811681036100ba576101a29460e4359460c4359460a43594612f93565b91906101e0516101c8604051936101be85610140810194610423565b6080850190610423565b610140610100840152815180915261016083019060206101608260051b8601019301915f905b82821061020357858086896101208301520390f35b9091929360208061022160019361015f198a82030186528851610464565b9601920192019092916101ee565b346100ba5760803660031901126100ba5761026561024b6103aa565b6102536103b9565b61025b6103cf565b9060643592612a39565b9060405191829161027a8360a0810192610423565b60a060808401528151809152602060c084019201905f5b81811061029f575050500390f35b9193509160206080826102b56001948851610423565b019401910191849392610291565b346100ba5760e03660031901126100ba5760406100ae6102e16103aa565b6102e96103cf565b6102f16103e5565b9160c4359260a435926084359260243590612797565b346100ba5760a03660031901126100ba5760406100ae6103256103aa565b61032d6103b9565b6103356103cf565b61033d610411565b9160843593611d85565b346100ba5760e03660031901126100ba576103606103aa565b6103686103b9565b6103706103cf565b91610379610411565b6084358060020b81036100ba5760a435916001600160a01b03831683036100ba576040956100ae9560c435956111f5565b6004359081151582036100ba57565b602435906001600160a01b03821682036100ba57565b604435906001600160a01b03821682036100ba57565b606435906001600160a01b03821682036100ba57565b600435906001600160a01b03821682036100ba57565b6064359062ffffff821682036100ba57565b80516005811015610450576060918291845260208101516020850152604081015160408501520151910152565b634e487b7160e01b5f52602160045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60a0810190811067ffffffffffffffff8211176104a457604052565b634e487b7160e01b5f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176104a457604052565b6080810190811067ffffffffffffffff8211176104a457604052565b90601f8019910116810190811067ffffffffffffffff8211176104a457604052565b51906001600160a01b03821682036100ba57565b519062ffffff821682036100ba57565b51906001600160801b03821682036100ba57565b9495936102e05285156111ea576001600160ff1b0386116111ea579061056f91615481565b6103405290916040519261058284610488565b60018060a01b031692838152602081019260018060a01b0316835262ffffff604082019216825262ffffff608060608301926102e05160020b845201925f8452604051946020860196875260018060a01b039051166040860152511660608401525160020b608083015260018060a01b0390511660a082015260a0815261060a60c0826104f0565b519020604051633205590760e21b81526004810182905290916080826024815f516020615ebd5f395f51905f525afa9485156109d0575f905f935f610300525f9761117d575b5060405163fa6793d560e01b815260048101869052919391846020826024815f516020615ebd5f395f51905f525afa9182156109d0575f92611141575b506103208290526001600160a01b03161590811561112f575b50611122576103405115611107576401000276a4925b86156110fc57819694965b5f6102c052925b831515806110e6575b156110a9578060020b6102e05160020b15611095575f196102e05160020b14627fffff19821416610fea576102e05160020b8105905f8112908161107f575b50611069575b6103405115610f0557602090610768600282900b60081d60010b60ff83165b60405163071f32d360e21b8152600481018d905260019290920b6024830152939091829081906044820190565b03815f516020615ebd5f395f51905f525afa9081156109d0575f91610ed4575b505f19600160ff818601161b01169081151592835f14610eaf5762ffffff9060ff806107b76102e0519661586f565b169116031660020b900360020b0260020b5b600281900b620d89e719811215610e96575050620d89e719915b6107ec83615154565b6103405115610e82576001600160a01b03888116908216105b15610e7b57879a5b5f6102a0525f88125f14610d7b5762ffffff8d610300510116620f4240039761083889825f03615af4565b8d6001600160a01b0380821690851610610d685761085b90846103205191615a03565b6102a08190528110610cf857508d8d99620f424062ffffff83610300510116145f14610cdc5750506102a0515b9c5b6001600160a01b0390811690831610610cc9576108ab61032051838b615a63565b9c5b5f821215610cb2576102a05101019b6102c051036102c0525b6001600160a01b03888116921682036109db575050506108ff575b61034051156108fa575f190160020b5b925b96926106ce565b6108f1565b6040516332bb6ad560e21b81528760048201528160020b60248201526040816044815f516020615ebd5f395f51905f525afa9081156109d0575f91610987575b50806103405161097a575b50600f0b6001600160801b036103205116018060801c61096d57610320526108e1565b6393dafdf15f526004601cfd5b90505f03600f0b5f61094a565b90506040813d82116109c8575b816109a1604093836104f0565b810103126100ba57806109b5602092610536565b50015180600f0b81036100ba575f61093f565b3d9150610994565b6040513d5f823e3d90fd5b9196935091506001600160a01b031681036109f7575b506108f3565b90935073fffd8963efd1fc6a506488495d951d51639616826401000276a21985016001600160a01b031611610ca057602084901b640100000000600160c01b03168080156100ba5760ff826001600160801b031060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c821060031b177f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be85831c1c601f161a17169160808310155f14610c945750607e1982011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c600160381b169760c61c600160391b169660c51c6001603a1b169560c41c6001603b1b169460c31c6001603c1b169360c21c6001603d1b169260c11c6001603e1b169160c01c6001603f1b1690607f190160401b1717171717171717171717171717693627a301d71055774c85026f028f6481ab7f045a5af012a19d003aa919810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f14610c70575090505b925f6109f1565b6001600160a01b03610c8184615154565b1611610c8d5750610c69565b9050610c69565b905081607f031b610ad0565b6318521d4960e21b5f5260045260245ffd5b9c90039b6102a051016102c051016102c0526108c6565b610cd7610320518a84615999565b6108ab565b62ffffff610cf3926103005101166102a051615acb565b610888565b8099506102a0526001600160801b0361032051161560018060a01b0383161517610d5b576001600160a01b038d811690831610610d4857610d3d896103205184615d12565b9881015f039c61088a565b610d56896103205184615e23565b610d3d565b634f2461b85f526004601cfd5b61032051610d769185615a8f565b61085b565b969a966001600160a01b0380891690821610610e6757610d9f61032051828a615a63565b9b5b8d8d8210610e0757610def908a5b6001600160a01b0390811690851610610df457610dd061032051858d615a03565b6102a08190526103005190910162ffffff16620f424081900391615acb565b6108ad565b610e02610320518c86615a8f565b610dd0565b50809c509b6001600160801b0361032051161560018060a01b0383161517610d5b57610def8e6001600160a01b038b811690851610610e5457610e4e836103205186615d91565b9a610daf565b610e62836103205186615cb3565b610e4e565b610e75610320518983615999565b9b610da1565b809a61080d565b6001600160a01b0388811690821611610805565b620d89e89093919313156107e357620d89e892506107e3565b9091506102e0519160ff6102e051921660020b900360020b0260020b0360020b6107c9565b90506020813d8211610efd575b81610eee602093836104f0565b810103126100ba57515f610788565b3d9150610ee1565b602081610f276001610f56940160020b9060ff8260020b60081d60010b921690565b60405163071f32d360e21b8152600481018d905260019290920b60248301529093909290849081906044820190565b03815f516020615ebd5f395f51905f525afa9283156109d0575f93611036575b50600160ff83161b5f190119831615801593908061100d57610ffe575f19600160ff85161b011981161990600182018211610fea57610fc760ff916001809401905f19858589161b0119161661586f565b1660ff6102e051941660020b900360020b910160020b0160020b0260020b6107c9565b634e487b7160e01b5f52601160045260245ffd5b630753afe360e51b5f5260045ffd5b5050600162ffffff60ff6102e051941660ff031660020b910160020b0160020b0260020b6107c9565b9092506020813d8211611061575b81611051602093836104f0565b810103126100ba5751915f610f76565b3d9150611044565b60020b627fffff198114610fea575f190161071c565b90506102e05160020b900760020b15155f610716565b634e487b7160e01b5f52601260045260245ffd5b50955095509050819250816110dc575b506110d457156110cb576102c0519190565b6102c0515f0390565b505f91508190565b905015155f6110b9565b506001600160a01b0388811690861614156106d7565b815f039694966106c7565b73fffd8963efd1fc6a506488495d951d5263988d25926106bc565b505093505050505f905f90565b6001600160801b03915016155f6106a6565b9091506020813d602011611175575b8161115d602093836104f0565b810103126100ba5761116e90610536565b905f61068d565b3d9150611150565b93509550506080823d6080116111e2575b8161119b608093836104f0565b810103126100ba576111ac82610512565b6020830151908160020b82036100ba576111d460606111cd60408701610526565b9501610526565b90919361030052955f610650565b3d915061118e565b505f94508493505050565b95969492936102e0528615611d38576001600160ff1b038711611d38579061121c91615481565b6103405260405190929162ffffff9061123483610488565b60018060a01b031694858352602083019460018060a01b03168552816040840191168152608060608401936102e05160020b8552019360018060a01b03168452604051946020860196875260018060a01b039051166040860152511660608401525160020b608083015260018060a01b0390511660a082015260a081526112bc60c0826104f0565b519020604051633205590760e21b81526004810182905290916080826024815f516020615ebd5f395f51905f525afa9485156109d0575f905f935f610300525f97611cd2575b5060405163fa6793d560e01b815260048101869052919391846020826024815f516020615ebd5f395f51905f525afa9182156109d0575f92611c96575b506103208290526001600160a01b031615908115611c84575b50611122576103405115611c69576401000276a4925b8615611c5e57819694965b5f6102c052925b83151580611c48575b156110a9578060020b6102e05160020b15611095575f196102e05160020b14627fffff19821416610fea576102e05160020b8105905f81129081611c32575b50611c1c575b6103405115611b0a576020906113f1600282900b60081d60010b60ff831661073b565b03815f516020615ebd5f395f51905f525afa9081156109d0575f91611ad9575b505f19600160ff818601161b01169081151592835f14611ab45762ffffff9060ff806114406102e0519661586f565b169116031660020b900360020b0260020b5b600281900b620d89e719811215611a9b575050620d89e719915b61147583615154565b6103405115611a87576001600160a01b03888116908216105b15611a8057879a5b5f6102a0525f88125f146119cd5762ffffff8d610300510116620f424003976114c189825f03615af4565b8d6001600160a01b03808216908516106119ba576114e490846103205191615a03565b6102a0819052811061195757508d8d99620f424062ffffff83610300510116145f1461193b5750506102a0515b9c5b6001600160a01b03908116908316106119285761153461032051838b615a63565b9c5b5f821215611911576102a05101019b6102c051036102c0525b6001600160a01b038881169216820361164c57505050611588575b6103405115611583575f190160020b5b925b9692611380565b61157a565b6040516332bb6ad560e21b81528760048201528160020b60248201526040816044815f516020615ebd5f395f51905f525afa9081156109d0575f91611603575b5080610340516115f6575b50600f0b6001600160801b036103205116018060801c61096d576103205261156a565b90505f03600f0b5f6115d3565b90506040813d8211611644575b8161161d604093836104f0565b810103126100ba5780611631602092610536565b50015180600f0b81036100ba575f6115c8565b3d9150611610565b9196935091506001600160a01b03168103611668575b5061157c565b90935073fffd8963efd1fc6a506488495d951d51639616826401000276a21985016001600160a01b031611610ca057602084901b640100000000600160c01b03168080156100ba5760ff826001600160801b031060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c821060031b177f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be85831c1c601f161a17169160808310155f146119055750607e1982011c5b800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c600160381b169760c61c600160391b169660c51c6001603a1b169560c41c6001603b1b169460c31c6001603c1b169360c21c6001603d1b169260c11c6001603e1b169160c01c6001603f1b1690607f190160401b1717171717171717171717171717693627a301d71055774c85026f028f6481ab7f045a5af012a19d003aa919810160801d60020b906fdb2df09e81959a81455e260799a0632f0160801d60020b918282145f146118e1575090505b925f611662565b6001600160a01b036118f284615154565b16116118fe57506118da565b90506118da565b905081607f031b611741565b9c90039b6102a051016102c051016102c05261154f565b611936610320518a84615999565b611534565b62ffffff611952926103005101166102a051615acb565b611511565b8099506102a0526001600160801b0361032051161560018060a01b0383161517610d5b576001600160a01b038d8116908316106119a75761199c896103205184615d12565b9881015f039c611513565b6119b5896103205184615e23565b61199c565b610320516119c89185615a8f565b6114e4565b969a966001600160a01b0380891690821610611a6c576119f161032051828a615a63565b9b5b8d8d8210611a2557611a20906001600160a01b03808c1690851610610df457610dd061032051858d615a03565b611536565b50809c509b6001600160801b0361032051161560018060a01b0383161517610d5b57611a208e6001600160a01b038b811690851610610e5457610e4e836103205186615d91565b611a7a610320518983615999565b9b6119f3565b809a611496565b6001600160a01b038881169082161161148e565b620d89e890939193131561146c57620d89e8925061146c565b9091506102e0519160ff6102e051921660020b900360020b0260020b0360020b611452565b90506020813d8211611b02575b81611af3602093836104f0565b810103126100ba57515f611411565b3d9150611ae6565b602081610f276001611b2c940160020b9060ff8260020b60081d60010b921690565b03815f516020615ebd5f395f51905f525afa9283156109d0575f93611be9575b50600160ff83161b5f1901198316158015939080611bc057610ffe575f19600160ff85161b011981161990600182018211610fea57611b9d60ff916001809401905f19858589161b0119161661586f565b1660ff6102e051941660020b900360020b910160020b0160020b0260020b611452565b5050600162ffffff60ff6102e051941660ff031660020b910160020b0160020b0260020b611452565b9092506020813d8211611c14575b81611c04602093836104f0565b810103126100ba5751915f611b4c565b3d9150611bf7565b60020b627fffff198114610fea575f19016113ce565b90506102e05160020b900760020b15155f6113c8565b506001600160a01b038881169086161415611389565b815f03969496611379565b73fffd8963efd1fc6a506488495d951d5263988d259261136e565b6001600160801b03915016155f611358565b9091506020813d602011611cca575b81611cb2602093836104f0565b810103126100ba57611cc390610536565b905f61133f565b3d9150611ca5565b93509550506080823d608011611d30575b81611cf0608093836104f0565b810103126100ba57611d0182610512565b6020830151908160020b82036100ba57611d2260606111cd60408701610526565b90919361030052955f611302565b3d9150611ce3565b505f9550859450505050565b519063ffffffff821682036100ba57565b91908260809103126100ba57815191611d7060208201610512565b916060611d7f60408401611d44565b92015190565b9294939291906001600160a01b03811661209157505f516020615e9d5f395f51905f52905b6001600160a01b03811661208b57505f516020615e9d5f395f51905f52945b604051630b4c774160e11b81526001600160a01b0392831660048201819052969092166024830181905262ffffff919091166044830181905291602081606481731f98431c8ad98523631ae4a59f267346ea31f9845afa9081156109d0575f91612049575b506001600160a01b031690811561203c5780871015612021576401000276a4935b611f43579062ffffff929160405197611e67896104b8565b885260208801908152604080890187815260608a019384526080808b019586526001600160a01b0397881660a08c01908152925163d85c3d6360e01b81529a51881660048c01529251871660248b01525160448a01529151851660648901529151929092166084870152905190911660a48501528360c481735e55c9e631fae526cd4b0526c4818d6e0a9ef0e35afa5f9381611f0f575b50611f0b57505f91508190565b9190565b611f3291945060803d608011611f3c575b611f2a81836104f0565b810190611d55565b505050925f611efe565b503d611f20565b9162ffffff919260409795975195611f5a876104b8565b86526020860190815260408087018981526060880193845260808089019687526001600160a01b0397881660a08a0190815292516386e3a7cf60e01b81529851881660048a01529251871660248901525160448801529151929092166064860152915183166084850152905190911660a48301528160c481735e55c9e631fae526cd4b0526c4818d6e0a9ef0e35afa5f9181611ffd5750611f0b57505f91508190565b61201791925060803d608011611f3c57611f2a81836104f0565b505050905f611efe565b73fffd8963efd1fc6a506488495d951d5263988d2593611e4f565b505050505090505f905f90565b90506020813d602011612083575b81612064602093836104f0565b810103126100ba57516001600160a01b03811681036100ba575f611e2e565b3d9150612057565b94611dc9565b90611daa565b51906001600160701b03821682036100ba57565b909193929384156121fe576120c09083615481565b936001600160a01b0392831692168203612278575f915f915b60806040516120e781610488565b858152602080820195865260408083019586526001600160a01b039485166060808501918252600195909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261214c60c0826104f0565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa9283156109d0575f915f94612221575b5015612211576001600160701b0380915b1692169082158015612209575b6121fe57156121e057808410156121d6576001916127108561270f816121d195030292020261549e565b019190565b505090505f905f90565b6121fb916127100261270f808602919091019185020261549e565b90565b50505090505f905f90565b5081156121a7565b916001600160701b03809161219a565b9150925060e0813d60e011612270575b8161223e60e093836104f0565b810103126100ba5761224f81612097565b612267604061226060208501612097565b9301611d44565b5090925f612189565b3d9150612231565b5f915f916120d9565b909193929384156121fe576122969083615481565b936001600160a01b039283169216820361242a575f915f915b60806040516122bd81610488565b858152602080820195865260408083019586526001600160a01b039485166060808501918252600595909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261232260c0826104f0565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa9283156109d0575f915f946123da575b50156123ca576001600160701b0380915b16921690821580156123c2575b6121fe57156123a757808410156121d6576001916127108561270b816121d195030292020261549e565b6121fb916127100261270b808602919091019185020261549e565b50811561237d565b916001600160701b038091612370565b9150925060e0813d60e011612422575b816123f760e093836104f0565b810103126100ba5761240881612097565b612419604061226060208501612097565b5090925f61235f565b3d91506123ea565b5f915f916122af565b909193929384156121fe576124489083615481565b936001600160a01b03928316921682036125dc575f915f915b608060405161246f81610488565b858152602080820195865260408083019586526001600160a01b039485166060808501918252601e95909401948552815192830198895296519082015293518316908401529251166080820152905160a08281019190915281526124d460c0826104f0565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa9283156109d0575f915f9461258c575b501561257c576001600160701b0380915b1692169082158015612574575b6121fe571561255957808410156121d657600191612710856126f2816121d195030292020261549e565b6121fb91612710026126f2808602919091019185020261549e565b50811561252f565b916001600160701b038091612522565b9150925060e0813d60e0116125d4575b816125a960e093836104f0565b810103126100ba576125ba81612097565b6125cb604061226060208501612097565b5090925f612511565b3d915061259c565b5f915f91612461565b909193929384156121fe576125fa9083615481565b936001600160a01b039283169216820361278e575f915f915b608060405161262181610488565b858152602080820195865260408083019586526001600160a01b039485166060808501918252606495909401948552815192830198895296519082015293518316908401529251166080820152905160a082810191909152815261268660c0826104f0565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa9283156109d0575f915f9461273e575b501561272e576001600160701b0380915b1692169082158015612726575b6121fe571561270b57808410156121d657600191612710856126ac816121d195030292020261549e565b6121fb91612710026126ac808602919091019185020261549e565b5081156126e1565b916001600160701b0380916126d4565b9150925060e0813d60e011612786575b8161275b60e093836104f0565b810103126100ba5761276c81612097565b61277d604061226060208501612097565b5090925f6126c3565b3d915061274e565b5f915f91612613565b9390929695969491948715612959576127b09086615481565b9690926001600160a01b039283169290911682036129535792915b60806040516127d981610488565b8581526020810194855260408101938452606081019260018060a01b031683520191858352604051936020850195865251604085015260018060a01b03905116606084015260018060a01b0390511660808301525160a082015260a0815261284260c0826104f0565b519020604051906315895f4760e31b8252600482015260e0816024816d040470635eb91b7ce4d132d616ed5afa9384156109d0575f915f95612903575b50156128f3576001600160701b0380915b16931691831580156128eb575b6128df57156128c857818510156121fe5791612710856121d19381600196840391030292020261549e565b6121fb92612710918203860291028101910261549e565b5050505090505f905f90565b50821561289d565b926001600160701b038091612890565b9150935060e0813d60e01161294b575b8161292060e093836104f0565b810103126100ba5761293181612097565b612942604061226060208501612097565b5090935f61287f565b3d9150612913565b916127cb565b50505050505090505f905f90565b60405190612974826104d4565b5f6060838281528260208201528260408201520152565b67ffffffffffffffff81116104a45760051b60200190565b8051156129b05760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156129b05760400190565b8051600210156129b05760600190565b8051600310156129b05760800190565b8051600410156129b05760a00190565b8051600510156129b05760c00190565b80518210156129b05760209160051b010190565b9060048110156129b05760051b0190565b92919390612a45612967565b506101e06040519581612a598893846104f0565b600e8352601f19015f5b818110612f2a5750508194612a7a8183868a614f1a565b60405191612a87836104d4565b5f8352601e602084015260408301526060820152612aa4846129a3565b52612aae836129a3565b50612abb8183868a6150d3565b60405191612ac8836104d4565b60018352601e602084015260408301526060820152612ae6846129c4565b52612af0836129c4565b50612afd8183868a6120ab565b60405191612b0a836104d4565b600283526001602084015260408301526060820152612b28846129d4565b52612b32836129d4565b50612b3f8183868a612281565b60405191612b4c836104d4565b600283526005602084015260408301526060820152612b6a846129e4565b52612b74836129e4565b50612b818183868a612433565b60405191612b8e836104d4565b60028352601e602084015260408301526060820152612bac846129f4565b52612bb6836129f4565b50612bc38183868a6125e5565b60405191612bd0836104d4565b600283526064602084015260408301526060820152612bee84612a04565b52612bf883612a04565b50604051612c05816104d4565b606481526101f46020820152610bb8604082015261271060608201526006905f5b838a868960048503612ea85750505050505060405192612c45846104d4565b606484526101f46020850152610bb86040850152612710606085015260405191612c6e836104d4565b60018352600a6020840152603c604084015260c860608401525f905b60048203612e1b5750505050505050509091612ca4612967565b915f905f9215935b86518414612e1357612cbe8488612a14565b51906040820151801580612e07575b612dfc578415612ded578615612d695760608301516060830151908181115f14612d015750505050600190935b0192612cac565b9693929614612d15575b5050600190612cfa565b6040869293960151908181105f14612d3657505050600190935b905f612d0b565b959291951480612d58575b612d4f575b50600190612d2f565b93506001612d46565b506020810151602086015111612d41565b60408201519081811015612d835750505060019093612cfa565b9592919514612d96575b50600190612cfa565b909360608201516060820151908181115f14612dba57505050600190935b90612d8d565b959291951480612ddc575b612dd3575b50600190612db4565b93506001612dca565b506020810151602086015111612dc5565b50909360019350839150612cfa565b509360019150612cfa565b50606083015115612ccd565b955092505050565b90612e9f600187612e9882958f606462ffffff8f612e5d8e8b958f8f612e6595612e538a898f82612e4b91612a28565b511694612a28565b5160020b9361054a565b949097612a28565b5116049361ffff60405195612e79876104d4565b600487521660208601526040850152606084015280938491019b612a14565b528d612a14565b50018a95612c8a565b612ed1612f1f946001979893948895612f189462ffffff612ec98b8e612a28565b511692611d85565b606462ffffff612ee4898c979597612a28565b5116049362ffffff60405195612ef9876104d4565b600387521660208601526040850152606084015280938491019a612a14565b528c612a14565b500190899491612c26565b60209192969350612f39612967565b82828b010152019087929591612a63565b90612f548261298b565b612f6160405191826104f0565b8281528092612f72601f199161298b565b01905f5b828110612f8257505050565b806060602080938501015201612f76565b979591949390969296610140526101a05261024052610200525f6101e052612fb9612967565b6101e052612fc5612967565b5060608115614dab576001600160a01b038516158015919082614d97575b8015614d78575b8015614d56575b614b6f5750508161417f57613004612967565b506101e0936040519561301786886104f0565b600e87525f5b601f19870181106141685750613042835f516020615e9d5f395f51905f52845f614f1a565b6040519161304f836104d4565b5f8352601e60208401526040830152606082015261306c886129a3565b52613076876129a3565b50613090835f516020615e9d5f395f51905f52845f6150d3565b6040519161309d836104d4565b60018352601e6020840152604083015260608201526130bb886129c4565b526130c5876129c4565b506130df835f516020615e9d5f395f51905f52845f6120ab565b604051916130ec836104d4565b60028352600160208401526040830152606082015261310a886129d4565b52613114876129d4565b5061312e835f516020615e9d5f395f51905f52845f612281565b6040519161313b836104d4565b600283526005602084015260408301526060820152613159886129e4565b52613163876129e4565b5061317d835f516020615e9d5f395f51905f52845f612433565b6040519161318a836104d4565b60028352601e6020840152604083015260608201526131a8886129f4565b526131b2876129f4565b506131cc835f516020615e9d5f395f51905f52845f6125e5565b604051916131d9836104d4565b6002835260646020840152604083015260608201526131f788612a04565b5261320187612a04565b5060405161320e816104d4565b606481526101f46020820152610bb860408201526127106060820152876006915f5b600481036140e2575050604051613246816104d4565b606481526101f46020820152610bb8604082015261271060608201526040519261326f846104d4565b60018452600a6020850152603c604085015260c860608501525f5b87876004830361404e57505050505050506132a3612967565b935f955f955b89518714613386576132bb878b612a14565b5190604082015180158061337a575b61336f5789156133605760608301516060830151908181115f146132f85750505050600190965b01956132a9565b999392991461330c575b50506001906132f1565b6040899293990151908181105f1461332d57505050600190965b905f613302565b98929198148061334f575b613346575b50600190613326565b9650600161333d565b506020810151602089015111613338565b506001985090968891506132f1565b5096600191506132f1565b506060830151156132ca565b9195509397506060919550959195806101e05201805115613ec25761271090969596516102405182030204948580926133bd612967565b50604051610260526133d281610260516104f0565b600e61026051525f5b601f198201811061402e5750506101a0516134069082905f516020615e9d5f395f51905f525f614f1a565b60405191613413836104d4565b5f8352601e602084015260408301526060820152613433610260516129a3565b52613440610260516129a3565b5061345d816101a0515f516020615e9d5f395f51905f525f6150d3565b6040519161346a836104d4565b60018352601e60208401526040830152606082015261348b610260516129c4565b52613498610260516129c4565b506134b5816101a0515f516020615e9d5f395f51905f525f6120ab565b604051916134c2836104d4565b6002835260016020840152604083015260608201526134e3610260516129d4565b526134f0610260516129d4565b5061350d816101a0515f516020615e9d5f395f51905f525f612281565b6040519161351a836104d4565b60028352600560208401526040830152606082015261353b610260516129e4565b52613548610260516129e4565b50613565816101a0515f516020615e9d5f395f51905f525f612433565b60405191613572836104d4565b60028352601e602084015260408301526060820152613593610260516129f4565b526135a0610260516129f4565b506135bd816101a0515f516020615e9d5f395f51905f525f6125e5565b604051916135ca836104d4565b6002835260646020840152604083015260608201526135eb61026051612a04565b526135f861026051612a04565b50604051613605816104d4565b606481526101f46020820152610bb8604082015261271060608201526006610280525f5b60048103613f8057505060405161363f816104d4565b606481526101f46020820152610bb8604082015261271060608201526040516101805261366e610180516104d4565b60016101805152600a6020610180510152603c604061018051015260c860606101805101525f5b60048103613ed1575050506136a8612967565b5f60e081905297905b610260515160e05114613790576136cd60e05161026051612a14565b51906040820151801580613784575b61377b578a1561376d5760608301516060830151908181115f1461370f5750505050965b600160e0510160e052966136b1565b9a93929a14613720575b5050613700565b60408a92939a0151908181105f1461373e57505050965b5f80613719565b99929199148061375c575b613754575b50613737565b97505f61374e565b50602081015160208a015111613749565b506001995090979050613700565b50979050613700565b506060830151156136dc565b975090919293949560608801805115613ec25761271090516102405182030204925b6e404fecaf36e6184245475ee12548358780613e9c575b613d26575b8715613d1f5782905b6101e051516005811015610450578790613c0a57613809925f516020615e9d5f395f51905f52878c6102005195615803565b975b8715613c035781945b8a51956005871015610450578996613ad6579061384a929161020051925f516020615e9d5f395f51905f52896101a05192615803565b975b8497613ab9575b6121fb969798895f14613a605760405161386e6020826104f0565b5f8152995b15613a13576040516138866020826104f0565b5f8152915b6001600160a01b0386165f516020615e9d5f395f51905f52146139fc576040516332c066e160e21b60208201526001600160a01b0387811660248301525f604483018190526064830152610140511660848083019190915281526138f060a4826104f0565b925b8b51156139f15761392560ff60015b8351156139ea578160015b8851156139e257816001935b6002011601160116612f4a565b9b8c92613931846129a3565b5261393b836129a3565b50600293613948846129c4565b52613952836129c4565b5080516139c4575b50805161399f575b50508151613982575b5050831561397a5750916155e1565b9050916155e1565b61399791613990828c612a14565b5289612a14565b505f8061396b565b6001906139b5846139bc94959384910195612a14565b528b612a14565b50895f613962565b600393506139d1836129d4565b526139db826129d4565b505f61395a565b815f93613918565b815f61390c565b61392560ff5f613901565b604051613a0a6020826104f0565b5f8152926138f2565b6040516332c066e160e21b60208201525f60248201819052604482018190526064820152610140516001600160a01b03166084808301919091528152613a5a60a4826104f0565b9161388b565b6040516332c066e160e21b60208201525f516020615e9d5f395f51905f5260248201525f604482018190526064820152610140516001600160a01b03166084808301919091528152613ab360a4826104f0565b99613873565b895196975060058710156104505760026121fb9714979650613853565b8b51965090916005871015610450578996600103613b135790613b0d92915f516020615e9d5f395f51905f52886101a051926157a3565b9761384c565b8b51965091906005871015610450578996600203613b555790613b0d92918c5f516020615e9d5f395f51905f5261020051948a60206101a0519401519161572b565b8b5196506005871015610450578996600303613b9d5790613b0d92918c5f516020615e9d5f395f51905f5261020051948a62ffffff606460206101a0519601510216916156be565b919095508a51600581101561045057600403613bf4578895613b0d9260208d0151925f516020615e9d5f395f51905f5261020051946101a051928b62ffffff6064613beb61ffff8616615604565b94021691615646565b633953ec5d60e21b5f5260045ffd5b8294613814565b506101e051519060058210156104505789869160018a94145f14613c4857915f516020615e9d5f395f51905f5291613c4295936157a3565b9761380b565b925050506101e051516005811015610450578790600203613c8a57613c42925f516020615e9d5f395f51905f528761020051948d60206101e05101519161572b565b506101e051516005811015610450578790600303613cd157613c42925f516020615e9d5f395f51905f528761020051948d62ffffff606460206101e05101510216916156be565b50906101e05151600581101561045057600403613bf4578689915f516020615e9d5f395f51905f5287613c429560206101e051015190610200519662ffffff6064613beb61ffff8616615604565b81906137d7565b5088516005811015610450576101a0516001600160a01b03165f516020615e9d5f395f51905f52108015613e815760015f516020615e9d5f395f51905f52926101a051925b501480159290613e6657735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f915b6040519060208201926001600160601b03199060601b1683526001600160601b03199060601b16603482015260288152613dc76048826104f0565b5190209115613e40577f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f5b60405192602084019260ff60f81b84526001600160601b03199060601b1660218501526035840152605583015260558252613e2e6075836104f0565b905190206001600160a01b03166137ce565b7fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303613df2565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac91613d8c565b60016101a051925f516020615e9d5f395f51905f5292613d6b565b50895160058110156104505715806137c9575089516005811015610450576001146137c9565b636586e12960e01b5f5260045ffd5b80613f76613f188562ffffff613eec9d9e9d60019688612a28565b5116613efb8561018051612a28565b5160020b906101a0515f516020615e9d5f395f51905f525f61054a565b606462ffffff613f288689612a28565b5116049161ffff60405193613f3c856104d4565b6004855216602084015260408301526060820152610280519084610280510161028052613f6c8261026051612a14565b5261026051612a14565b5001989798613695565b80613fb28462ffffff613f986001959d9e9d87612a28565b51166101a0515f516020615e9d5f395f51905f525f611d85565b906102205262ffffff606481613fc88588612a28565b5116046040516101c052613fde6101c0516104d4565b60036101c051521660206101c05101526102205160406101c051015260606101c051015261402461028051836102805101610280526101c051613f6c8261026051612a14565b5001989798613629565b60209061403c9a999a612967565b828261026051010152019897986133db565b600193612e986140926140d89487948b5f516020615e9d5f395f51905f526140878a62ffffff61407f8f8390612a28565b511693612a28565b5160020b925f61054a565b606462ffffff6140a5898c979597612a28565b5116049361ffff604051956140b9876104d4565b6004875216602086015260408501526060840152809384910198612a14565b5001918a9261328a565b61415e6001839495612f186141178b62ffffff61410088879a612a28565b51165f516020615e9d5f395f51905f528d5f611d85565b606462ffffff61412a898c979597612a28565b5116049362ffffff6040519561413f876104d4565b6003875216602086015260408501526060840152809384910198612a14565b5001908991613230565b602090614173612967565b82828b0101520161301d565b9093919061418b612967565b506101e0926040519561419e85886104f0565b600e87525f5b601f1986018110614b5857506141cd836101a0515f516020615e9d5f395f51905f526001614f1a565b604051916141da836104d4565b5f8352601e6020840152604083015260608201526141f7886129a3565b52614201876129a3565b5061421f836101a0515f516020615e9d5f395f51905f5260016150d3565b6040519161422c836104d4565b60018352601e60208401526040830152606082015261424a886129c4565b52614254876129c4565b50614272836101a0515f516020615e9d5f395f51905f5260016120ab565b6040519161427f836104d4565b60028352600160208401526040830152606082015261429d886129d4565b526142a7876129d4565b506142c5836101a0515f516020615e9d5f395f51905f526001612281565b604051916142d2836104d4565b6002835260056020840152604083015260608201526142f0886129e4565b526142fa876129e4565b50614318836101a0515f516020615e9d5f395f51905f526001612433565b60405191614325836104d4565b60028352601e602084015260408301526060820152614343886129f4565b5261434d876129f4565b5061436b836101a0515f516020615e9d5f395f51905f5260016125e5565b60405191614378836104d4565b60028352606460208401526040830152606082015261439688612a04565b526143a087612a04565b506040516143ad816104d4565b606481526101f46020820152610bb860408201526127106060820152876006915f5b60048103614b165750506040516143e5816104d4565b606481526101f46020820152610bb8604082015261271060608201526040519261440e846104d4565b60018452600a6020850152603c604085015260c860608501525f5b60048103614ac757505050505061443e612967565b935f955f955b8951871461451c57614456878b612a14565b51906040820151801580614510575b6145055789156144f6576040820151908181101561448c57505050600190965b0195614444565b989291981461449f575b50600190614485565b909660608201516060820151908181115f146144c357505050600190965b90614496565b9892919814806144e5575b6144dc575b506001906144bd565b965060016144d3565b5060208101516020890151116144ce565b50600198509096889150614485565b509660019150614485565b50606083015115614465565b93979296509397509350819660408301805115613ec2575161271061270f610240518201830201048094805160058110156104505715908115614ab2575b5015614aaa5750935b61456b612967565b506040516101605261458081610160516104f0565b600e61016051525f5b601f1982018110614a9057506145b19050845f516020615e9d5f395f51905f52846001614f1a565b604051916145be836104d4565b5f8352601e6020840152604083015260608201526145de610160516129a3565b526145eb610160516129a3565b50614606845f516020615e9d5f395f51905f528460016150d3565b60405191614613836104d4565b60018352601e602084015260408301526060820152614634610160516129c4565b52614641610160516129c4565b5061465c845f516020615e9d5f395f51905f528460016120ab565b60405191614669836104d4565b60028352600160208401526040830152606082015261468a610160516129d4565b52614697610160516129d4565b506146b2845f516020615e9d5f395f51905f52846001612281565b604051916146bf836104d4565b6002835260056020840152604083015260608201526146e0610160516129e4565b526146ed610160516129e4565b50614708845f516020615e9d5f395f51905f52846001612433565b60405191614715836104d4565b60028352601e602084015260408301526060820152614736610160516129f4565b52614743610160516129f4565b5061475e845f516020615e9d5f395f51905f528460016125e5565b6040519161476b836104d4565b60028352606460208401526040830152606082015261478c61016051612a04565b5261479961016051612a04565b506040516147a6816104d4565b606481526101f46020820152610bb8604082015261271060608201526006905f5b600481036149f8575050604051906147de826104d4565b606482526101f46020830152610bb8604083015261271060608301526040516101005261480d610100516104d4565b60016101005152600a6020610100510152603c604061010051015260c860606101005101525f5b6004810361495a575050505f60805261484b612967565b6080525f60a081905260c0525b610160515160c0511461492f5761487460c05161016051612a14565b516040810151801580614923575b61491c5760a0511561490e576080516040015190818110156148b25750506080525b600160c0510160c052614858565b146148be575b506148a4565b606081015160606080510151908181115f146148e05750506080525b5f6148b8565b14806148fb575b6148f2575b506148da565b6080525f6148ec565b50602081015160206080510151116148e7565b50608052600160a0526148a4565b50506148a4565b50606082015115614882565b6080516101e0819052604001805115613ec25761270f612710915161024051830102010493906137b2565b806149f161499b8962ffffff61497260019689612a28565b51166149818561010051612a28565b5160020b905f516020615e9d5f395f51905f528b8861054a565b606462ffffff6149ae868a999599612a28565b5116049561ffff604051976149c2896104d4565b6004895216602088015260408701526060860152838101946149e78261016051612a14565b5261016051612a14565b5001614834565b806001614a258962ffffff614a0e849688612a28565b51165f516020615e9d5f395f51905f528a85611d85565b606462ffffff614a3886899a959a612a28565b5116049662ffffff60405198614a4d8a6104d4565b60038a521660208901526040880152606087015280610120520193614a786101205161016051612a14565b52614a896101205161016051612a14565b50016147c7565b602090614a9b612967565b82826101605101015201614589565b905093614563565b9050516005811015610450576001145f61455a565b614b0c60018093612e986140928c62ffffff614ae3888b612a28565b5116614aef888d612a28565b5160020b906101a0515f516020615e9d5f395f51905f528861054a565b5001918a92614429565b614b4e6001839495612f186141178b62ffffff614b3488879a612a28565b51166101a0515f516020615e9d5f395f51905f5287611d85565b50019089916143cf565b602090614b63612967565b82828b010152016141a4565b92614b8c9261020097929751928761024051936101a05192614dba565b9591968080925090614d36575b15614d2b57614baf60ff60015b60030116612f4a565b96614bb9886129a3565b52614bc3876129a3565b506040516332c066e160e21b60208201525f516020615e9d5f395f51905f5260248201525f604482018190526064820152610140516001600160a01b0316608480830182905282529190614c1860a4826104f0565b614c21896129c4565b52614c2b886129c4565b506040516332c066e160e21b60208201525f60248201525f60448201525f606482015282608482015260848152614c6360a4826104f0565b614c6c896129d4565b52614c76886129d4565b5080614d0b575b614cad575b50505f60405192614c92846104d4565b8184528160208501528160408501528301526101e052929190565b6040516332c066e160e21b60208201526001600160a01b0390921660248301525f6044830181905260648301526084808301919091528152614cf060a4826104f0565b614cf9866129e4565b52614d03856129e4565b505f80614c82565b506001600160a01b0382165f516020615e9d5f395f51905f521415614c7d565b614baf60ff5f614ba6565b506001600160a01b0382165f516020615e9d5f395f51905f521415614b99565b506101a0516001600160a01b03165f516020615e9d5f395f51905f5214612ff1565b506001600160a01b0386165f516020615e9d5f395f51905f5214612fea565b506101a0516001600160a01b031615612fe3565b631f2a200560e01b5f5260045ffd5b94969390959291614dc9612967565b50606092614dd98382848b612a39565b509384996040860180511580614f0f575b613ec257614e01928b15614f055750515b8a6154a8565b9684519060058210156104505788958a92614e2f575084614e2993856121fb99948994615803565b966155e1565b969550905085519460058610156104505789968996600103614e5e57505083614e2992846121fb9888946157a3565b95509550845160058110156104505788958a91600203614e9057614e2993856121fb9994899460208a9501519161572b565b955050845160058110156104505788958a91600303614ec957614e2993856121fb9994899462ffffff606460208c9701510216916156be565b955050948451600581101561045057600403613bf4578784614e2993858c6121fb9a6020869b01519162ffffff6064613beb61ffff8616615604565b9050860151614dfb565b508287015115614dea565b9091939293841592836128df57614f51915f916001600160a01b038116156150bf575b6001600160a01b038216156150aa576154c4565b9190803b156128df57604051630240bc6b60e21b815290606090829060049082906001600160a01b03165afa9283156109d0575f915f9461505a575b501561504a576001600160701b0380915b1692169282159182159283615042575b61203c571561501157838610156128df576150025780614ff9575b15614fea57611f0b918490036103e5029084026103e80281015f190161549e565b63bb55fd2760e01b5f5260045ffd5b50811515614fc9565b6342301c2360e01b5f5260045ffd5b5084919080615039575b15614fea576121fb926103e5916103e883850291020192020261549e565b5082151561501b565b508415614fae565b916001600160701b038091614f9e565b915092506060813d6060116150a2575b81615077606093836104f0565b810103126100ba5761508881612097565b615099604061226060208501612097565b5090925f614f8d565b3d915061506a565b5f516020615e9d5f395f51905f5291506154c4565b505f516020615e9d5f395f51905f52614f3d565b9091939293841592836128df57614f51916001916001600160a01b03811615615109575b828060a01b038216156150aa576154c4565b505f516020615e9d5f395f51905f526150f7565b9194939092948515938461203c57614f519291906001600160a01b038116156150bf576001600160a01b038216156150aa576154c4565b60020b908160ff1d82810118620d89e8811161546e5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116615452575b60048116615436575b6008811661541a575b601081166153fe575b602081166153e2575b604081166153c6575b608081166153aa575b610100811661538e575b6102008116615372575b6104008116615356575b610800811661533a575b611000811661531e575b6120008116615302575b61400081166152e6575b61800081166152ca575b6201000081166152ae575b620200008116615293575b620400008116615278575b620800001661525f575b5f12615257575b0160201c90565b5f1904615250565b6b048a170391f7dc42444e8fa290910260801c90615249565b6d2216e584f5fa1ea926041bedfe9890920260801c9161523f565b916e5d6af8dedb81196699c329225ee6040260801c91615234565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91615229565b916f31be135f97d08fd981231505542fcfa60260801c9161521e565b916f70d869a156d2a1b890bb3df62baf32f70260801c91615214565b916fa9f746462d870fdf8a65dc1f90e061e50260801c9161520a565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91615200565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916151f6565b916ff3392b0822b70005940c7a398e4b70f30260801c916151ec565b916ff987a7253ac413176f2b074cf7815e540260801c916151e2565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916151d8565b916ffe5dee046a99a2a811c461f1969c30530260801c916151ce565b916fff2ea16466c96a3843ec78b326b528610260801c916151c5565b916fff973b41fa98c081472e6896dfb254c00260801c916151bc565b916fffcb9843d60f6159c9db58835c9266440260801c916151b3565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916151aa565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916151a1565b916ffff97272373d413259a46990580e213a0260801c91615198565b826345c3193d60e11b5f5260045260245ffd5b6001600160a01b038281169082161090811561549a5792565b9192565b8115611095570490565b6127109290156154bd5782010261270f010490565b8203020490565b906154ce91615481565b92159182156155c657735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f915b6040519060208201926001600160601b03199060601b1683526001600160601b03199060601b166034820152602881526155296048826104f0565b51902091156155a0577f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f5b60405192602084019260ff60f81b84526001600160601b03199060601b16602185015260358401526055830152605582526155906075836104f0565b905190206001600160a01b031691565b7fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303615554565b73c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac916154ee565b906001600160a01b03166155fd57156155f8575090565b905090565b5050505f90565b61ffff1660018114615640576005811461563a57601e8114615634576064811461562e5760020b90565b5060c890565b50603c90565b50600a90565b50600190565b6040516310e06d6960e11b60208201526001600160a01b039182166024820152911515604483015262ffffff909216606482015260029290920b608483015291821660a4820152911660c482015260e4810191909152610104810191909152610124808201929092529081526121fb610144826104f0565b60405163afeae12b60e01b60208201526001600160a01b039182166024820152911515604483015262ffffff9092166064820152918116608483015290911660a482015260c481019190915260e4810191909152610104808201929092529081526121fb610124826104f0565b6040516313ab6b5f60e31b60208201526001600160a01b03918216602482015291151560448301526064820192909252918116608483015290911660a48201525f60c4820181905260e4820152610104810191909152610124810191909152610144808201929092529081526121fb610164826104f0565b604051630dc149f360e31b60208201526001600160a01b039182166024820152911515604483015291821660648201529116608482015260a481019190915260c48101919091525f1960e48083019190915281526121fb610104826104f0565b604051630dc149f360e31b60208201526001600160a01b039182166024820152911515604483015291821660648201529116608482015260a481019190915260c481019190915260e4808201929092529081526121fb610104826104f0565b91908201809211610fea57565b905f91801561598a57600160801b81101561597f575b68010000000000000000811015615967575b64010000000081101561594f575b62010000811015615937575b61010081101561591f575b6010811015615907575b80600460029210156158ee575b10156158db57565b9060ff600191160160ff8111610fea5790565b60ff90821c93160160ff8111610fea57600290926158d3565b60ff600491821c93160160ff8111610fea57916158c6565b60ff600891821c93160160ff8111610fea57916158bc565b60ff601091821c93160160ff8111610fea57916158b1565b60ff602091821c93160160ff8111610fea57916158a5565b60ff604091821c93160160ff8111610fea5791615897565b60809250821c615885565b63b7bf5ef960e01b5f5260045ffd5b906001600160a01b03808216908316116159fd575b6001600160a01b0382169182156159f1576121fb936159ec926001600160a01b0380821693909103169060601b600160601b600160e01b0316615c33565b61549e565b62bfc9215f526004601cfd5b906159ae565b6001600160a01b0382811690821611615a5d575b6001600160a01b0381169283156159f157615a51926001600160a01b0380821693909103169060601b600160601b600160e01b0316615acb565b90808206151591040190565b90615a17565b6121fb926001600160a01b03928316919092160360ff81901d90810118906001600160801b0316615b60565b6001600160a01b0391821691160360ff81901d90810118906001906001600160801b0316615abd8382615b60565b928260601b91091515160190565b929190615ad9828286615c33565b9382156110955709615ae757565b906001019081156100ba57565b808202905f1983820990828083109203918083039283620f424011156100ba5714615b54577fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c2613993620f4240910990828211900360fa1b910360061c170290565b5050620f424091500490565b81810291905f1982820991838084109303928084039384600160601b11156100ba5714615ba057600160601b910990828211900360a01b910360601c1790565b50505060601c90565b90606082901b905f19600160601b8409928280851094039380850394858411156100ba5714615c2c578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b91818302915f19818509938380861095039480860395868511156100ba5714615cab579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b91908115615d0d576001600160a01b03909216918183029160609190911b600160601b600160e01b031690820483148282111615615d00576121fb92615cfb92820391615acb565b615e79565b63f5c787f15f526004601cfd5b505090565b91908115615d0d5760601b600160601b600160e01b0316916001600160a01b03169080820282615d42838361549e565b14615d6f575b50615d56615d5b928461549e565b615862565b80820491061515016001600160a01b031690565b8301838110615d48576001600160a01b0393615d8d93919250615acb565b1690565b916001600160a01b038111615de5576001600160801b039060601b91168082061515910401905b6001600160a01b03169080821115615dd85790036001600160a01b031690565b634323a5555f526004601cfd5b906001600160801b0316615dfe81600160601b84615c33565b91811561109557600160601b9009615e17575b90615db8565b60010180615e11575f80fd5b6121fb92615cfb92906001600160a01b038111615e60576001600160801b03615e5092169060601b61549e565b905b6001600160a01b0316615862565b6001600160801b03615e73921690615ba9565b90615e52565b6001600160a01b03811691908203615e8d57565b6393dafdf160e01b5f5260045ffdfe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007ffe42c4a5deea5b0fec41c94c136cf115597227a2646970667358221220b5d77a901dcb6e9c197db92a249dfe4256789b67e762c6be622dd37b2862459364736f6c634300081e0033