0 txs
1 call
constructor
constructor()
functions
ETH
viewfunction ETH() view returns (address)
getPricesAndLiquidities
viewfunction getPricesAndLiquidities(tuple[] pools) view returns (uint256[] pricesX96, uint256[] kAtTick)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
PANCAKE
viewfunction PANCAKE() view returns (uint32)
permit2
viewfunction permit2() view returns (address)
poolManager
viewfunction poolManager() view returns (address)
router
viewfunction router() view returns (address)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
SUSHI
viewfunction SUSHI() view returns (uint32)
UNISWAP
viewfunction UNISWAP() view returns (uint32)
WETH
viewfunction WETH() view returns (address)
_callThenRevert
nonpayablefunction _callThenRevert(bytes data)
_swapTest
nonpayablefunction _swapTest(tuple swap) returns (uint256 tokensOutActual, uint256 gasUsed)
findOptimalRoute
nonpayablefunction findOptimalRoute(tuple[] pools, tuple[] tokens, uint256 startAmountEth) returns (tuple optimalPath, int256 profitEth)
getOutTokensOfSwap
nonpayablefunction getOutTokensOfSwap(tuple swap) returns (bool success, uint256 tokensOutActual, uint256 gasUsed)
getOutTokensOfSwapSimple
nonpayablefunction getOutTokensOfSwapSimple(tuple swap) returns (bool success, uint256 tokensOutActual, uint256 gasUsed)
pancakeV3SwapCallback
nonpayablefunction pancakeV3SwapCallback(int256 a, int256 b, bytes _data)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address[] tokens)
setCanCollect
nonpayablefunction setCanCollect(address collector, bool canCollect)
swapManyWithLend
nonpayablefunction swapManyWithLend(tuple[] groups, uint256 deadline) returns (uint256 ethEarned)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 a, int256 b, bytes _data)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
FirstProfit
event FirstProfit(uint256 ethOut, uint256 ethProfit)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RecoverableInternalError
event RecoverableInternalError()
RevenueGenerated
event RevenueGenerated(uint256 ethEarned, uint256 estimatedTransactionFee, uint256 txFeeRefund)
SwapGroupFailed
event SwapGroupFailed(((uint128 amountIn, uint128 amountOutMin, (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) key, uint32 swapType, bool zeroForOne)[] swaps, address[] toTake) group)
errors
DeltaNotNegative
error DeltaNotNegative(address currency)
DeltaNotPositive
error DeltaNotPositive(address currency)
InsufficientBalance
error InsufficientBalance()
NotPoolManager
error NotPoolManager()
creation bytecode
0x60a06040526002805460ff19166001179055600880546001600160a01b031916905534801561002c575f5ffd5b506e04444c5dc75cb358380d2e3de08a908061004733610095565b6001600160a01b0316608052506001805f6100695f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556100e4565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b608051615e086101655f395f81816103d5015281816104b40152818161060c01528181610d7501528181610e600152818161110f0152818161114901528181611c9101528181612123015281816130fc015281816131d90152818161324b015281816132d901528181613367015281816141ee015261427e0152615e085ff3fe608060405260043610610125575f3560e01c80630254a2d91461012757806312261ee71461015e57806323a69e751461018d57806335db1c25146101ac5780633d9b9ce7146101cb578063677342ce146101f85780636e1f95171461022f578063715018a61461024e5780637e4fadf7146102625780638322fff21461028d57806385678980146102a05780638da5cb5b146102cd57806391dd7346146102e1578063aa9a09121461030d578063ab560e101461032c578063abbbca1614610342578063ad5c464814610361578063c6b0d14614610381578063c745d9e7146103ae578063dc4c90d3146103c4578063df71e4de146103f7578063e144cca81461042b578063f2fde38b1461044a578063f887ea4014610469578063fa461e3314610490575b005b348015610132575f5ffd5b50610146610141366004614934565b6104af565b604051610155939291906149af565b60405180910390f35b348015610169575f5ffd5b506101806e22d473030f116ddee9f6b43ac78ba381565b60405161015591906149c7565b348015610198575f5ffd5b506101256101a7366004614a1f565b61059f565b3480156101b7575f5ffd5b506101256101c6366004614a6d565b6105b1565b3480156101d6575f5ffd5b506101ea6101e5366004614ae4565b6105e3565b604051908152602001610155565b348015610203575f5ffd5b50610217610212366004614b2b565b6108ac565b6040516001600160801b039091168152602001610155565b34801561023a575f5ffd5b50610125610249366004614bba565b610a1a565b348015610259575f5ffd5b50610125610aa2565b34801561026d575f5ffd5b506102786202000081565b60405163ffffffff9091168152602001610155565b348015610298575f5ffd5b506101805f81565b3480156102ab575f5ffd5b506102bf6102ba366004614c33565b610ab5565b604051610155929190614e01565b3480156102d8575f5ffd5b50610180610e45565b3480156102ec575f5ffd5b506103006102fb366004614e22565b610e53565b6040516101559190614e8e565b348015610318575f5ffd5b506101ea610327366004614ea0565b610eb1565b348015610337575f5ffd5b506102786203000081565b34801561034d575f5ffd5b5061014661035c366004614934565b610f5b565b34801561036c575f5ffd5b506101805f516020615db35f395f51905f5281565b34801561038c575f5ffd5b506103a061039b366004614ec9565b610fe0565b604051610155929190614f72565b3480156103b9575f5ffd5b506102786201000081565b3480156103cf575f5ffd5b506101807f000000000000000000000000000000000000000000000000000000000000000081565b348015610402575f5ffd5b50610416610411366004614934565b61154c565b60408051928352602083019190915201610155565b348015610436575f5ffd5b50610125610445366004614f96565b6115b1565b348015610455575f5ffd5b50610125610464366004614fc8565b611780565b348015610474575f5ffd5b506101807366a9893cc07d91d95644aedd05d03f95e1dba8af81565b34801561049b575f5ffd5b506101256104aa366004614a1f565b6117f9565b5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916001866040516020016104f49190614fe3565b60408051601f19818403018152908290526105129291602001614ff2565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161053d9190614e8e565b5f604051808303815f875af1158015610558573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261057f919081019061500d565b806020019051810190610592919061508c565b9250925092509193909250565b6105ab848484846117f9565b50505050565b6105b9611a1c565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f5f5a9050428310156105f9575f9150506108a5565b5f9150815b61ffff8116851115610797577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894915f88888561ffff16818110610650576106506150c0565b905060200281019061066291906150d4565b6040516020016106729190615174565b60408051601f19818403018152908290526106909291602001614ff2565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016106bb9190614e8e565b5f604051808303815f875af19250505080156106f857506040513d5f823e601f3d908101601f191682016040526106f5919081019061500d565b60015b61075f577f1716b6fb5d07c9d68640cd43d048c32252b3cb0443a4b3c7841d5da81c311afd86868361ffff16818110610733576107336150c0565b905060200281019061074591906150d4565b6040516107529190615174565b60405180910390a1610785565b5f8180602001905181019061077491906152f4565b9050610780818661531f565b945050505b8061078f81615332565b9150506105fe565b505a6107a39082615352565b90505f3a6107b3836161a861531f565b6107bd9190615365565b90505f3233036107fb578184116107d457836107d6565b815b604051909150329082156108fc029083905f818181858888f193505050506107fb57505f5b60408051858152602081018490529081018290527f7595fd16636bf3cf86d46d699438dc239f70845e8d9607be21306e61a1bdf0079060600160405180910390a160025460ff16801561084d57508382105b156108a1577fb76de55d781207305bab1195011f85d0badefa18b3f3e5eb8e01b286d88702ef8461087e8482615352565b6040805192835260208301919091520160405180910390a16002805460ff191690555b5050505b9392505050565b5f815f036108bb57505f919050565b816001600160801b82106108d45760809190911c9060401b5b600160401b82106108ea5760409190911c9060201b5b600160201b82106109005760209190911c9060101b5b6201000082106109155760109190911c9060081b5b61010082106109295760089190911c9060041b5b6010821061093c5760049190911c9060021b5b600882106109485760011b5b60018185816109595761095961537c565b048201901c905060018185816109715761097161537c565b048201901c905060018185816109895761098961537c565b048201901c905060018185816109a1576109a161537c565b048201901c905060018185816109b9576109b961537c565b048201901c905060018185816109d1576109d161537c565b048201901c905060018185816109e9576109e961537c565b0491909101901c5f6109fb8286615390565b9050808210610a0a5780610a0c565b815b95945050505050565b919050565b60015f805c60ff19168217905d505f5f306001600160a01b031683604051610a4291906153af565b5f60405180830381855af49150503d805f8114610a7a576040519150601f19603f3d011682016040523d82523d5f602084013e610a7f565b606091505b5090925090505f60ff19815c16815d508115610a9d57805160208201fd5b505050565b610aaa611a1c565b610ab35f611a7b565b565b60408051808201909152606080825260208201525f3315610b285760405162461bcd60e51b815260206004820152602260248201527f546869732063616c6c2063616e6e6f74206265206d616465206f6e2d63686169604482015261371760f11b60648201526084015b60405180910390fd5b5f5b63ffffffff8116871115610cbf575f88888363ffffffff16818110610b5157610b516150c0565b610b68926020610100909202019081019150614fc8565b90505f89898463ffffffff16818110610b8357610b836150c0565b610b9d926040610100909202019081019150602001614fc8565b905089898463ffffffff16818110610bb757610bb76150c0565b6001600160a01b038086165f90815260036020908152604080832093881683529290522061010090910292909201919050610bf282826153fd565b50506001600160a01b0382165f9081526004602052604090208a8a63ffffffff8616818110610c2357610c236150c0565b83546001810185555f948552602090942061010090910292909201926006029091019050610c5182826153fd565b50506001600160a01b0381165f9081526004602052604090208a8a63ffffffff8616818110610c8257610c826150c0565b83546001810185555f948552602090942061010090910292909201926006029091019050610cb082826153fd565b50508260010192505050610b2a565b505f5b63ffffffff8116851115610d4b5785858263ffffffff16818110610ce857610ce86150c0565b90506080020160055f88888563ffffffff16818110610d0957610d096150c0565b610d1f9260206080909202019081019150614fc8565b6001600160a01b0316815260208101919091526040015f20610d4182826154d5565b5050600101610cc2565b505f858585604051602001610d6293929190615527565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c89491600283604051602001610db6929190614ff2565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610de19190614e8e565b5f604051808303815f875af1158015610dfc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e23919081019061500d565b806020019051810190610e3691906157e7565b90999098509650505050505050565b5f546001600160a01b031690565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e9e5760405163570c108560e11b815260040160405180910390fd5b610ea88383611aca565b90505b92915050565b5f80805f19858709858702925082811083820303915050805f03610ee5575f8411610eda575f5ffd5b5082900490506108a5565b808411610ef0575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5f5f6060610fb363df71e4de60e01b86604051602401610f7c9190614fe3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611e47565b90945090508315610fd85780806020019051810190610fd2919061582a565b90935091505b509193909250565b606080826001600160401b03811115610ffb57610ffb6147b3565b604051908082528060200260200182016040528015611024578160200160208202803683370190505b509150826001600160401b0381111561103f5761103f6147b3565b604051908082528060200260200182016040528015611068578160200160208202803683370190505b5090505f5b63ffffffff8116841115611544575f85858363ffffffff16818110611094576110946150c0565b905060c002018036038101906110aa919061584c565b602081015190915063ffff000081169061ffff165f80620100008414806110d9575063ffffffff841662030000145b1561135a5760038363ffffffff161061129d575f5f8463ffffffff1660040361117757865160a090206111356001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611ef4565b5091945061116f9150506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682611fa6565b915050611267565b8463ffffffff1660030361126757865f0151608001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156111c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ec919061589d565b50508b516080015160408051630d34328160e11b815290519698506001600160a01b0390911695631a68650295506004808301955060209450909250908290030181865afa158015611240573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611264919061592f565b90505b61127f6001600160a01b03831680600160601b610eb1565b93506112946001600160801b03821680615365565b925050506114ea565b8263ffffffff16600203611355575f5f865f0151608001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156112f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113149190615960565b50909250905061133d6001600160701b038316600160601b600160d01b03606084901b16615390565b93506112946001600160701b03808316908416615365565b6114ea565b6201ffff1963ffffffff8516016114ea578263ffffffff1660030361142d575f855f0151608001516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156113bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e191906159a4565b50505050505090505f865f0151608001516001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015611240573d5f5f3e3d5ffd5b8263ffffffff166002036114ea575f5f865f0151608001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611480573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a49190615960565b5090925090506114cd6001600160701b038316600160601b600160d01b03606084901b16615390565b93506114e56001600160701b03808316908416615365565b925050505b81888763ffffffff1681518110611503576115036150c0565b60200260200101818152505080878763ffffffff1681518110611528576115286150c0565b602002602001018181525050856001019550505050505061106d565b509250929050565b5f8060ff815c166115885760405162461bcd60e51b8152600401610b1f906020808252600490820152632327a7a360e11b604082015260600190565b5a90506115948361202a565b6001600160801b031691505a6115aa9082615352565b9050915091565b335f8181526001602052604090205460ff166116055760405162461bcd60e51b81526020600482015260136024820152722737ba1030903332b29031b7b63632b1ba37b960691b6044820152606401610b1f565b5f5b61ffff811683111561174d575f84848361ffff1681811061162a5761162a6150c0565b905060200201602081019061163f9190614fc8565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161166a91906149c7565b602060405180830381865afa158015611685573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a991906152f4565b905084848361ffff168181106116c1576116c16150c0565b90506020020160208101906116d69190614fc8565b6001600160a01b031663a9059cbb84836040518363ffffffff1660e01b8152600401611703929190615a10565b6020604051808303815f875af115801561171f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117439190615a29565b5050600101611607565b506040516001600160a01b038216904780156108fc02915f818181858888f193505050501580156105ab573d5f5f3e3d5ffd5b611788611a1c565b6001600160a01b0381166117ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1f565b6117f681611a7b565b50565b5f8061180783850185615a44565b90925090506101005f5c046001600160a01b03163314611825575f5ffd5b5f8613801561183357508086125b1561183f575084611855565b5f8513801561184d57508085125b156118555750835b5f6001600160a01b0383165f516020615db35f395f51905f52146118e3576040516370a0823160e01b81526001600160a01b038416906370a082319061189f9030906004016149c7565b602060405180830381865afa1580156118ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118de91906152f4565b6118e5565b475b90508082111561199b575f6118fa8284615352565b905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b0385160161198e5761192c5f30836130d9565b5f516020615db35f395f51905f526001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611972575f5ffd5b505af1158015611984573d5f5f3e3d5ffd5b5050505050611999565b6119998430836130d9565b505b60405163a9059cbb60e01b81526001600160a01b038085169163a9059cbb916119d2916101005f5c04909116908690600401615a10565b6020604051808303815f875af11580156119ee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190615a29565b5050505050505050565b33611a25610e45565b6001600160a01b031614610ab35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b1f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60605f80611ada84860186615a6e565b91509150815f03611dc3575f81806020019051810190611afa9190615ab1565b90505f805b82515163ffffffff83161015611bb0578251805163ffffffff8416908110611b2957611b296150c0565b60200260200101515f01516001600160801b03165f03611b785780835f01518363ffffffff1681518110611b5f57611b5f6150c0565b60209081029190910101516001600160801b0390911690525b611ba3835f01518363ffffffff1681518110611b9657611b966150c0565b602002602001015161202a565b6001909201919050611aff565b6040516370a0823160e01b81525f905f516020615db35f395f51905f52906370a0823190611be29030906004016149c7565b602060405180830381865afa158015611bfd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2191906152f4565b90508015611c8357604051632e1a7d4d60e01b8152600481018290525f516020615db35f395f51905f5290632e1a7d4d906024015f604051808303815f87803b158015611c6c575f5ffd5b505af1158015611c7e573d5f5f3e3d5ffd5b505050505b5f611cb86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163083613167565b90505f811315611cd257611ccd5f30836130d9565b611ced565b5f811215611ced57611ced5f30611ce884615ae2565b6131b6565b5f611cf88284615afc565b90505f811215611d3c5760405162461bcd60e51b815260206004820152600f60248201526e086c2dcdcdee840d8dee6ca40cae8d608b1b6044820152606401610b1f565b5f94505b8560200151518563ffffffff161015611d99575f86602001518663ffffffff1681518110611d7057611d706150c0565b60200260200101519050611d8d8130611d8884613358565b6130d9565b50600190940193611d40565b60408051602081018390520160405160208183030381529060405298505050505050505050610eab565b81600103611e25575f81806020019051810190611de09190615b1b565b90505f5f5f611dee84610f5b565b925092509250828282604051602001611e09939291906149af565b6040516020818303038152906040529650505050505050610eab565b81600203611e3f57611e36816133b3565b92505050610eab565b505092915050565b5f6060306001600160a01b0316636e1f951760e01b84604051602401611e6d9190614e8e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611eab91906153af565b5f60405180830381855af49150503d805f8114611ee3576040519150601f19603f3d011682016040523d82523d5f602084013e611ee8565b606091505b50901594909350915050565b5f5f5f5f5f611f0286614065565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015611f4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6e91906152f4565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f5f611fb183614065565b90505f611fbf60038361531f565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf906024015b602060405180830381865afa158015612006573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c91906152f4565b60608101515f9061ffff811690829063ffff00001662010000148061205b5750606084015163ffff00001662030000145b15612948578163ffffffff166004036121f2575f84608001516120a5576120a0855f01516001600160801b0316600160c01b87602001516001600160801b0316610eb1565b6120cd565b6120cd85602001516001600160801b0316600160c01b875f01516001600160801b0316610eb1565b90505f6120d9826108ac565b6001600160801b031690505f6040518060600160405280886080015115158152602001885f015161210990615b36565b600f0b8152602001836001600160a01b031681525090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c89604001518460405180602001604052805f8152506040518463ffffffff1660e01b815260040161218393929190615b57565b6020604051808303815f875af115801561219f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c391906152f4565b905087608001516121dd576121d88160801d90565b6121e7565b6121e781600f0b90565b965050505050613087565b60408401516080015163ffffffff831660030361250157805f60016101000a815c816001600160a01b0302191690836001600160a01b03160217905d505f856080015161229e57816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612275573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122999190615ba0565b6122fe565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fe9190615ba0565b9050856080015161236e57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612345573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123699190615ba0565b6123ce565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ce9190615ba0565b92505f61242d876080015161240557610212885f01516001600160801b0316600160c01b8a602001516001600160801b0316610eb1565b61021288602001516001600160801b0316600160c01b8a5f01516001600160801b0316610eb1565b6001600160801b031690505f5f846001600160a01b031663128acb08308b608001518c5f015187898f5f015160405160200161246a929190615bbb565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612499959493929190615bdd565b60408051808303815f875af11580156124b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d8919061582a565b9150915088608001516124eb57816124ed565b805b6124f690615ae2565b975050505050612942565b8263ffffffff16600203612942575f856080015161257e57816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612555573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125799190615ba0565b6125de565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125de9190615ba0565b9050856080015161264e57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612625573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126499190615ba0565b6126ae565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ae9190615ba0565b925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b0382160161275a576126ec5f30885f01516001600160801b03166130d9565b5f516020615db35f395f51905f526001600160a01b031663d0e30db0875f01516001600160801b03166040518263ffffffff1660e01b81526004015f604051808303818588803b15801561273e575f5ffd5b505af1158015612750573d5f5f3e3d5ffd5b5050505050612771565b6127718130885f01516001600160801b03166130d9565b855160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb9161279f918691600401615bbb565b6020604051808303815f875af11580156127bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127df9190615a29565b505f5f836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561281e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128429190615960565b509150915087608001511561285357905b5f61287d895f01516001600160801b0316836001600160701b0316856001600160701b03166140a1565b905080975088602001516001600160801b03168110156128af5760405162461bcd60e51b8152600401610b1f90615c1a565b846001600160a01b031663022c0d9f8a608001516128cd57826128cf565b5f5b8b608001516128de575f6128e0565b835b604080516020810182525f815290516001600160e01b031960e086901b1681526129109392913091600401615c4b565b5f604051808303815f87803b158015612927575f5ffd5b505af1158015612939573d5f5f3e3d5ffd5b50505050505050505b50613087565b606084015163ffff0000166201ffff19016130875760408401516080015163ffffffff8316600303612c4457805f60016101000a815c816001600160a01b0302191690836001600160a01b03160217905d505f8560800151612a0957816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a049190615ba0565b612a69565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a699190615ba0565b90508560800151612ad957816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad49190615ba0565b612b39565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b399190615ba0565b92505f612b70876080015161240557610212885f01516001600160801b0316600160c01b8a602001516001600160801b0316610eb1565b6001600160801b031690505f5f846001600160a01b031663128acb08308b608001518c5f015187898f5f0151604051602001612bad929190615bbb565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612bdc959493929190615bdd565b60408051808303815f875af1158015612bf7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1b919061582a565b915091508860800151612c2e5781612c30565b805b612c3990615ae2565b975050505050613085565b8263ffffffff16600203613085575f8560800151612cc157816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cbc9190615ba0565b612d21565b816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d219190615ba0565b90508560800151612d9157816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8c9190615ba0565b612df1565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df19190615ba0565b925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b03821601612e9d57612e2f5f30885f01516001600160801b03166130d9565b5f516020615db35f395f51905f526001600160a01b031663d0e30db0875f01516001600160801b03166040518263ffffffff1660e01b81526004015f604051808303818588803b158015612e81575f5ffd5b505af1158015612e93573d5f5f3e3d5ffd5b5050505050612eb4565b612eb48130885f01516001600160801b03166130d9565b855160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91612ee2918691600401615bbb565b6020604051808303815f875af1158015612efe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f229190615a29565b505f5f836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f859190615960565b5091509150876080015115612f9657905b5f612fc0895f01516001600160801b0316836001600160701b0316856001600160701b03166140a1565b905080975088602001516001600160801b0316811015612ff25760405162461bcd60e51b8152600401610b1f90615c1a565b846001600160a01b031663022c0d9f8a608001516130105782613012565b5f5b8b60800151613021575f613023565b835b604080516020810182525f815290516001600160e01b031960e086901b1681526130539392913091600401615c4b565b5f604051808303815f87803b15801561306a575f5ffd5b505af115801561307c573d5f5f3e3d5ffd5b50505050505050505b505b6001600160a01b0381165f516020615db35f395f51905f52148015906130b557506001600160a01b03811615155b156130d2576130d2813086602001516001600160801b03166131b6565b5050919050565b805f036130e557505050565b604051630b0d9c0960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c099061313590869086908690600401615c81565b5f604051808303815f87803b15801561314c575f5ffd5b505af115801561315e573d5f5f3e3d5ffd5b50505050505050565b5f5f6001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401611feb91815260200190565b805f036131c257505050565b604051632961046560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a58411949061320e9086906004016149c7565b5f604051808303815f87803b158015613225575f5ffd5b505af1158015613237573d5f5f3e3d5ffd5b505050506001600160a01b0383166132cc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af11580156132a7573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906105ab91906152f4565b6132d78383836141ba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015613334573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ab91906152f4565b5f8061338e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163085613167565b90505f811215610eab5782604051634c085bf160e01b8152600401610b1f91906149c7565b60605f5f838060200190518101906133cb9190615ca5565b915091505f6040518060600160405280670de0b6b3a763ffff19600f0b81526020015f63ffffffff1681526020015f63ffffffff1681525090505f6040518060c0016040528060085f9054906101000a90046001600160a01b03166001600160a01b031681526020015f63ffffffff1681526020015f63ffffffff1681526020016040518060a001604052805f6001600160801b031681526020015f6001600160801b031681526020016040518060a001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f62ffffff1681526020015f60020b81526020015f6001600160a01b031681525081526020015f63ffffffff1681526020015f15158152508152602001846001600160801b031681526020015f600f0b815250905060075f908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550600681908060018154018082558091505060019003905f5260205f2090600702015f909190919091505f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160186101000a81548163ffffffff021916908363ffffffff1602179055506060820151816001015f820151815f015f6101000a8154816001600160801b0302191690836001600160801b031602179055506020820151815f0160106101000a8154816001600160801b0302191690836001600160801b031602179055506040820151816001015f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548162ffffff021916908362ffffff16021790555060608201518160010160176101000a81548162ffffff021916908360020b62ffffff1602179055506080820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050506060820151816004015f6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160040160046101000a81548160ff02191690831515021790555050506080820151816006015f6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160060160106101000a8154816001600160801b030219169083600f0b6001600160801b0316021790555050505b6040805160a0810182525f8082526020820181905260075463ffffffff1692820183905260016060830152670de0b6b3a763ffff196080830152909190036138065750613dce565b806040015163ffffffff16816060015163ffffffff1610156138ec576007816060015163ffffffff168154811061383f5761383f6150c0565b5f9182526020822060088204015460079091166004026101000a900463ffffffff16808352600680549091908110613879576138796150c0565b5f9182526020909120600660079092020101546080830151600160801b909104600f90810b92500b8113156138cd57815163ffffffff9081166020840152600f82900b608084015260608301511660408501525b50606081018051906138de82615cd2565b63ffffffff16905250613806565b5f6006826020015163ffffffff168154811061390a5761390a6150c0565b5f9182526020918290206040805160c08101825260079390930290910180546001600160a01b038082168552600160a01b80830463ffffffff90811687890152600160c01b909304831686860152845160a0808201875260018601546001600160801b038082168452600160801b918290048116848c015288518084018a526002808a01548816825260038a01548089169d83019d909d52958c0462ffffff16818b0152600160b81b909b0490940b6060808c019190915260048801549095166080808c01919091528389019a909a52600587015495861685840152600160201b90950460ff1615158983015292870152600690930154928316958501959095529004600f0b92820192909252908301805191925090613a2990615ced565b63ffffffff908116909152604080840151908601518216911614613ad7576007826040015163ffffffff1681548110613a6457613a646150c0565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166007856040015163ffffffff1681548110613aa557613aa56150c0565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505b6007805480613ae857613ae8615d0b565b5f8281526020812060085f1990930192830401805463ffffffff600460078616026101000a0219169055915560808201516001600160801b03169003613b2f5750506137be565b60085481516001600160a01b039081169116148015613b5757505f816040015163ffffffff16115b15613b9357835f0151600f0b8160a00151600f0b1315613b8c5760a0810151600f0b845260208083015163ffffffff16908501525b50506137be565b80516001600160a01b03165f908152600560205260409020600381015460ff1615613bc0575050506137be565b60038101805460ff1916600117905581516001600160a01b03165f908152600460205260408120905b815463ffffffff82161015613dc4575f828263ffffffff1681548110613c1157613c116150c0565b905f5260205f20906006020190505f613d4c86835f016040518060400160405290815f82016040518060a00160405290815f82015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681526020016001820160179054906101000a900460020b60020b60020b8152602001600282015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815250508152602001600382015f9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505087600101548e6001600160801b03168b602001516142a8565b905063ffffffff811615613daf57600780546001810182555f8290527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860088204018054919092166004026101000a63ffffffff81810219909216918416021790555b50508080613dbc90615cd2565b915050613be9565b50505050506137be565b5f6006836020015163ffffffff1681548110613dec57613dec6150c0565b5f918252602090912060079091020154600160c01b900463ffffffff166001600160401b03811115613e2057613e206147b3565b604051908082528060200260200182016040528015613ea457816020015b613e916040805160a080820183525f8083526020808401829052845192830185528183528201819052818401819052606082018190526080820152909182019081525f6020820181905260409091015290565b815260200190600190039081613e3e5790505b50905060028151106140095780515b801561400757806001900390506006846020015163ffffffff1681548110613edd57613edd6150c0565b5f9182526020918290206040805160a0808201835260079490940290920160018101546001600160801b038082168552600160801b9091041683860152815193840182526002808201546001600160a01b039081168652600383015480821697870197909752600160a01b870462ffffff1686850152600160b81b909604900b60608086019190915260048201549095166080808601919091529183019390935260059092015463ffffffff811693820193909352600160201b90920460ff161515908201528251839083908110613fb757613fb76150c0565b60200260200101819052506006846020015163ffffffff1681548110613fdf57613fdf6150c0565b5f9182526020918290206007909102015463ffffffff600160a01b9091041690850152613eb3565b505b60408051808201825282815281515f815260208082019093529181019190915283518190614038908790615d1f565b604051602001614049929190615d4c565b6040516020818303038152906040529650505050505050919050565b6040515f90614084908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f5f84116141055760405162461bcd60e51b815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b6064820152608401610b1f565b5f8311801561411357505f82115b6141705760405162461bcd60e51b815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604482015267495155494449545960c01b6064820152608401610b1f565b5f61417d856103e56146a1565b90505f61418a82856146a1565b90505f6141a38361419d886103e86146a1565b90614707565b90506141af8183615390565b979650505050505050565b306001600160a01b038316036142585760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90614218907f0000000000000000000000000000000000000000000000000000000000000000908590600401615a10565b6020604051808303815f875af1158015614234573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ab9190615a29565b6040516323b872dd60e01b81526001600160a01b038416906323b872dd906142189085907f0000000000000000000000000000000000000000000000000000000000000000908690600401615c81565b8351805160209091015186515f92839283926001600160a01b03908116908316036142d95780935060019250614334565b895f01516001600160a01b0316816001600160a01b031603614300578193505f9250614334565b6040517f3dd9b4f8a093abbf14c407a598373ac56513ada1171320a84319fe6607fefbe5905f90a15f945050505050610a0c565b50505f6040518060a001604052808a608001516001600160801b0316815260200160016001600160801b03168152602001895f01518152602001896020015163ffffffff16815260200183151581525090505f5f614393838a8a61475b565b91509150805f036143ab575f95505050505050610a0c565b5f6040518060c00160405280876001600160a01b031681526020018963ffffffff1681526020018d6040015160016143e39190615d70565b63ffffffff168152602001858152602001836001600160801b0316815260200184600f0b81525090506006805490509650600681908060018154018082558091505060019003905f5260205f2090600702015f909190919091505f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151815f0160146101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160186101000a81548163ffffffff021916908363ffffffff1602179055506060820151816001015f820151815f015f6101000a8154816001600160801b0302191690836001600160801b031602179055506020820151815f0160106101000a8154816001600160801b0302191690836001600160801b031602179055506040820151816001015f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548162ffffff021916908362ffffff16021790555060608201518160010160176101000a81548162ffffff021916908360020b62ffffff1602179055506080820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050506060820151816004015f6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160040160046101000a81548160ff02191690831515021790555050506080820151816006015f6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160060160106101000a8154816001600160801b030219169083600f0b6001600160801b03160217905550505050505050505095945050505050565b5f8115806146c4575082826146b68183615365565b92506146c29083615390565b145b610eab5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610b1f565b5f82614713838261531f565b9150811015610eab5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610b1f565b5f5f5f5f61476887610f5b565b9094509250905080614781575f5f9350935050506147ab565b6147908387600160601b610eb1565b935061479c8286615365565b6147a69085615d8c565b935050505b935093915050565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156147e9576147e96147b3565b60405290565b604080519081016001600160401b03811182821017156147e9576147e96147b3565b604051601f8201601f191681016001600160401b0381118282101715614839576148396147b3565b604052919050565b6001600160801b03811681146117f6575f5ffd5b6001600160a01b03811681146117f6575f5ffd5b62ffffff811681146117f6575f5ffd5b8060020b81146117f6575f5ffd5b5f60a08284031215614897575f5ffd5b61489f6147c7565b905081356148ac81614855565b815260208201356148bc81614855565b602082015260408201356148cf81614869565b604082015260608201356148e281614879565b606082015260808201356148f581614855565b608082015292915050565b63ffffffff811681146117f6575f5ffd5b8035610a1581614900565b80151581146117f6575f5ffd5b8035610a158161491c565b5f610120828403128015614946575f5ffd5b5061494f6147c7565b823561495a81614841565b8152602083013561496a81614841565b602082015261497c8460408501614887565b604082015260e083013561498f81614900565b60608201526101008301356149a38161491c565b60808201529392505050565b92151583526020830191909152604082015260600190565b6001600160a01b0391909116815260200190565b5f5f83601f8401126149eb575f5ffd5b5081356001600160401b03811115614a01575f5ffd5b602083019150836020828501011115614a18575f5ffd5b9250929050565b5f5f5f5f60608587031215614a32575f5ffd5b843593506020850135925060408501356001600160401b03811115614a55575f5ffd5b614a61878288016149db565b95989497509550505050565b5f5f60408385031215614a7e575f5ffd5b8235614a8981614855565b91506020830135614a998161491c565b809150509250929050565b5f5f83601f840112614ab4575f5ffd5b5081356001600160401b03811115614aca575f5ffd5b6020830191508360208260051b8501011115614a18575f5ffd5b5f5f5f60408486031215614af6575f5ffd5b83356001600160401b03811115614b0b575f5ffd5b614b1786828701614aa4565b909790965060209590950135949350505050565b5f60208284031215614b3b575f5ffd5b5035919050565b5f6001600160401b03821115614b5a57614b5a6147b3565b50601f01601f191660200190565b5f82601f830112614b77575f5ffd5b8135614b8a614b8582614b42565b614811565b818152846020838601011115614b9e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215614bca575f5ffd5b81356001600160401b03811115614bdf575f5ffd5b614beb84828501614b68565b949350505050565b5f5f83601f840112614c03575f5ffd5b5081356001600160401b03811115614c19575f5ffd5b6020830191508360208260071b8501011115614a18575f5ffd5b5f5f5f5f5f60608688031215614c47575f5ffd5b85356001600160401b03811115614c5c575f5ffd5b8601601f81018813614c6c575f5ffd5b80356001600160401b03811115614c81575f5ffd5b8860208260081b8401011115614c95575f5ffd5b6020918201965094508601356001600160401b03811115614cb4575f5ffd5b614cc088828901614bf3565b96999598509660400135949350505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b80516001600160801b0390811683526020808301519091169083015260408082015190614d4490840182614cd2565b50606081015163ffffffff1660e083015260800151151561010090910152565b8051604080845281519084018190525f9160200190829060608601905b80831015614dac57614d94828551614d15565b61012082019150602084019350600183019250614d81565b506020858101518783038883015280518084529082019450910191505f905b80821015614df65783516001600160a01b031683526020938401939092019160019190910190614dcb565b509095945050505050565b604081525f614e136040830185614d64565b90508260208301529392505050565b5f5f60208385031215614e33575f5ffd5b82356001600160401b03811115614e48575f5ffd5b614e54858286016149db565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610ea86020830184614e60565b5f5f5f60608486031215614eb2575f5ffd5b505081359360208301359350604090920135919050565b5f5f60208385031215614eda575f5ffd5b82356001600160401b03811115614eef575f5ffd5b8301601f81018513614eff575f5ffd5b80356001600160401b03811115614f14575f5ffd5b85602060c083028401011115614f28575f5ffd5b6020919091019590945092505050565b5f8151808452602084019350602083015f5b82811015614f68578151865260209586019590910190600101614f4a565b5093949350505050565b604081525f614f846040830185614f38565b8281036020840152610a0c8185614f38565b5f5f60208385031215614fa7575f5ffd5b82356001600160401b03811115614fbc575f5ffd5b614e5485828601614aa4565b5f60208284031215614fd8575f5ffd5b81356108a581614855565b6101208101610eab8284614d15565b60ff83168152604060208201525f614beb6040830184614e60565b5f6020828403121561501d575f5ffd5b81516001600160401b03811115615032575f5ffd5b8201601f81018413615042575f5ffd5b8051615050614b8582614b42565b818152856020838501011115615064575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8051610a158161491c565b5f5f5f6060848603121561509e575f5ffd5b83516150a98161491c565b602085015160409095015190969495509392505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126150e8575f5ffd5b9190910192915050565b5f5f8335601e19843603018112615107575f5ffd5b83016020810192503590506001600160401b03811115615125575f5ffd5b8060051b3603821315614a18575f5ffd5b8183526020830192505f815f5b84811015614f6857813561515681614855565b6001600160a01b031686526020958601959190910190600101615143565b602081525f606082018335601e19853603018112615190575f5ffd5b84016020810190356001600160401b038111156151ab575f5ffd5b610120810236038213156151bd575f5ffd5b6040602086015291829052905f90608085015b818310156152cc5783356151e381614841565b6001600160801b0316815260208401356151fc81614841565b6001600160801b03166020820152604084013561521881614855565b6001600160a01b03166040820152606084013561523481614855565b6001600160a01b03166060820152608084013561525081614869565b62ffffff16608082015260a084013561526881614879565b60020b60a082015260c084013561527e81614855565b6001600160a01b031660c082015261529860e08501614911565b63ffffffff1660e08201526152b06101008501614929565b15156101008201526101209384019360019390930192016151d0565b6152d960208801886150f2565b878303601f19016040890152945092506141af818585615136565b5f60208284031215615304575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610eab57610eab61530b565b5f61ffff821661ffff81036153495761534961530b565b60010192915050565b81810381811115610eab57610eab61530b565b8082028115828204841417610eab57610eab61530b565b634e487b7160e01b5f52601260045260245ffd5b5f826153aa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f920191825250919050565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8135610eab81614855565b5f8135610eab81614900565b813561540881614855565b61541281836153c5565b5060018101602083013561542581614855565b61542f81836153c5565b50604083013561543e81614869565b8154606085013561544e81614879565b8060b81b62ffffff60b81b1662ffffff60a01b8460a01b1665ffffffffffff60a01b198416171784555050505061549361548a608084016153e5565b600283016153c5565b6154bd6154a260a084016153f1565b6003830163ffffffff821663ffffffff198254161781555050565b60c0820135600482015560e090910135600590910155565b81356154e081614855565b6154ea81836153c5565b5060208201356001820155604082013560028201556003810160608301356155118161491c565b815490151560ff1660ff19919091161790555050565b604080825281018390525f8460608301825b8681101561559257823561554c81614855565b6001600160a01b03168252602083810135908301526040808401359083015260608301356155798161491c565b1515606083015260809283019290910190600101615539565b5060209390930193909352509392505050565b5f6001600160401b038211156155bd576155bd6147b3565b5060051b60200190565b8051610a1581614900565b5f8183036101208112156155e4575f5ffd5b6155ec6147c7565b915082516155f981614841565b8252602083015161560981614841565b602083015260a0603f198201121561561f575f5ffd5b506156286147c7565b604083015161563681614855565b8152606083015161564681614855565b6020820152608083015161565981614869565b604082015260a083015161566c81614879565b606082015260c083015161567f81614855565b6080820152604082015261569560e083016155c7565b60608201526148f56101008301615081565b5f82601f8301126156b6575f5ffd5b81516156c4614b85826155a5565b8082825260208201915060208360051b8601019250858311156156e5575f5ffd5b602085015b8381101561570b5780516156fd81614855565b8352602092830192016156ea565b5095945050505050565b5f60408284031215615725575f5ffd5b61572d6147ef565b82519091506001600160401b03811115615745575f5ffd5b8201601f81018413615755575f5ffd5b8051615763614b85826155a5565b8082825260208201915060206101208402850101925086831115615785575f5ffd5b6020840193505b828410156157b25761579e87856155d2565b82526020820191506101208401935061578c565b845250505060208201516001600160401b038111156157cf575f5ffd5b6157db848285016156a7565b60208301525092915050565b5f5f604083850312156157f8575f5ffd5b82516001600160401b0381111561580d575f5ffd5b61581985828601615715565b602094909401519395939450505050565b5f5f6040838503121561583b575f5ffd5b505080516020909101519092909150565b5f60c082840312801561585d575f5ffd5b506158666147ef565b6158708484614887565b815260a083013561588081614900565b60208201529392505050565b805161ffff81168114610a15575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156158b3575f5ffd5b87516158be81614855565b60208901519097506158cf81614879565b95506158dd6040890161588c565b94506158eb6060890161588c565b93506158f96080890161588c565b925060a088015160ff8116811461590e575f5ffd5b60c089015190925061591f8161491c565b8091505092959891949750929550565b5f6020828403121561593f575f5ffd5b81516108a581614841565b80516001600160701b0381168114610a15575f5ffd5b5f5f5f60608486031215615972575f5ffd5b61597b8461594a565b92506159896020850161594a565b9150604084015161599981614900565b809150509250925092565b5f5f5f5f5f5f5f60e0888a0312156159ba575f5ffd5b87516159c581614855565b60208901519097506159d681614879565b95506159e46040890161588c565b94506159f26060890161588c565b9350615a006080890161588c565b925060a088015161590e81614900565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615a39575f5ffd5b81516108a58161491c565b5f5f60408385031215615a55575f5ffd5b8235615a6081614855565b946020939093013593505050565b5f5f60408385031215615a7f575f5ffd5b8235915060208301356001600160401b03811115615a9b575f5ffd5b615aa785828601614b68565b9150509250929050565b5f60208284031215615ac1575f5ffd5b81516001600160401b03811115615ad6575f5ffd5b614beb84828501615715565b5f600160ff1b8201615af657615af661530b565b505f0390565b8082018281125f831280158216821582161715611e3f57611e3f61530b565b5f6101208284031215615b2c575f5ffd5b610ea883836155d2565b5f600f82900b6001607f1b8101615b4f57615b4f61530b565b5f0392915050565b615b618185614cd2565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e082015261012061010082018190525f90610a0c90830184614e60565b5f60208284031215615bb0575f5ffd5b81516108a581614855565b6001600160a01b039290921682526001600160801b0316602082015260400190565b6001600160a01b0386811682528515156020830152600f85900b60408301528316606082015260a0608082018190525f906141af90830184614e60565b602080825260179082015276158c8e88139bdd08195b9bdd59da081c9958d95a5d9959604a1b604082015260600190565b84815283602082015260018060a01b0383166040820152608060608201525f615c776080830184614e60565b9695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f5f60408385031215615cb6575f5ffd5b8251615cc181614841565b6020840151909250614a9981614841565b5f63ffffffff821663ffffffff81036153495761534961530b565b5f63ffffffff821680615d0257615d0261530b565b5f190192915050565b634e487b7160e01b5f52603160045260245ffd5b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610eab57610eab61530b565b604081525f615d5e6040830185614d64565b905082600f0b60208301529392505050565b63ffffffff8181168382160190811115610eab57610eab61530b565b8181035f831280158383131683831282161715615dab57615dab61530b565b509291505056fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2a26469706673582212204bba111d6ec2f9cf059ce2b391ce391da661b449a735fe27290fbc25372da57c64736f6c634300081e0033