1 tx
2 calls
constructor
constructor()
functions
ETH
viewfunction ETH() view returns (address)
getPricesAndLiquidities
viewfunction getPricesAndLiquidities(tuple[] v4Pools, address[] v3Pools, address[] v2Pools) view returns (uint128[] pricesX96, uint256[] kAtTick)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
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)
WETH
viewfunction WETH() view returns (address)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address[] tokens)
setCanCollect
nonpayablefunction setCanCollect(address collector, bool canCollect)
swapManyWithLend
nonpayablefunction swapManyWithLend(tuple[] v2Swaps, tuple[] v3Swaps, tuple[] v4Swaps, address[] tokensToTake, uint256 deadline)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256, int256, bytes _data)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RevenueGenerated
event RevenueGenerated(uint256 ethEarned, uint256 estimatedTransactionFee, uint256 txFeeRefund)
errors
DeltaNotNegative
error DeltaNotNegative(address currency)
DeltaNotPositive
error DeltaNotPositive(address currency)
InsufficientBalance
error InsufficientBalance()
NotPoolManager
error NotPoolManager()
creation bytecode
0x60a060405234801561000f575f5ffd5b506e04444c5dc75cb358380d2e3de08a908061002a33610078565b6001600160a01b0316608052506001805f61004c5f546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556100c7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60805161405661013a5f395f81816102c30152818161037e0152818161087301528181610ab001528181610ae20152818161156d015281816122ba01528181612601015281816126ae01528181612722015281816127bd01528181612a4f01528181612b600152612c1f01526140565ff3fe6080604052600436106100e9575f3560e01c8063aa9a091211610083578063e144cca811610055578063e144cca8146102e5578063f2fde38b14610304578063f887ea4014610323578063fa461e331461034a57005b8063aa9a091214610231578063ad5c46481461025e578063ae231bd514610285578063dc4c90d3146102b257005b8063715018a6116100bc578063715018a6146101b55780638322fff2146101c95780638da5cb5b146101dc57806391dd73461461020557005b80630f2f3227146100eb57806312261ee71461010a57806335db1c2514610156578063677342ce14610175575b005b3480156100f6575f5ffd5b506100e9610105366004612de6565b610369565b348015610115575f5ffd5b5061012c6e22d473030f116ddee9f6b43ac78ba381565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610161575f5ffd5b506100e9610170366004612f1b565b610668565b348015610180575f5ffd5b5061019461018f366004612f52565b6106c5565b6040516fffffffffffffffffffffffffffffffff909116815260200161014d565b3480156101c0575f5ffd5b506100e9610846565b3480156101d4575f5ffd5b5061012c5f81565b3480156101e7575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661012c565b348015610210575f5ffd5b5061022461021f366004612fa7565b610859565b60405161014d9190613032565b34801561023c575f5ffd5b5061025061024b366004613044565b6108dd565b60405190815260200161014d565b348015610269575f5ffd5b5061012c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610290575f5ffd5b506102a461029f36600461306d565b6109a7565b60405161014d92919061313b565b3480156102bd575f5ffd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f0575f5ffd5b506100e96102ff3660046131cd565b610f2c565b34801561030f575f5ffd5b506100e961031e366004613200565b611186565b34801561032e575f5ffd5b5061012c7366a9893cc07d91d95644aedd05d03f95e1dba8af81565b348015610355575f5ffd5b506100e961036436600461321b565b61123d565b5f5a90504282101561037b575061065d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348c894916040518060a001604052808e8e808060200260200160405190810160405280939291908181526020015f905b8282101561041057610401608083028601368190038101906133b5565b815260200190600101906103e4565b505050505081526020018c8c808060200260200160405190810160405280939291908181526020015f905b8282101561046757610458608083028601368190038101906133b5565b8152602001906001019061043b565b505050505081526020018a8a808060200260200160405190810160405280939291908181526020015f905b828210156104bf576104b061010083028601368190038101906134b8565b81526020019060010190610492565b505050505081526020018888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050509082525060209081018790526040516105149291016136b2565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161053f9190613032565b5f604051808303815f875af115801561055a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261059f919081019061382a565b8060200190518101906105b291906138dc565b90505a6105bf9083613920565b91505f3a6105cf846161a8613933565b6105d99190613946565b90505f323303610617578183116105f057826105f2565b815b604051909150329082156108fc029083905f818181858888f1935050505061061757505f5b60408051848152602081018490529081018290527f7595fd16636bf3cf86d46d699438dc239f70845e8d9607be21306e61a1bdf0079060600160405180910390a1505050505b505050505050505050565b610670611314565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b5f815f036106d457505f919050565b81600170010000000000000000000000000000000082106106fa5760809190911c9060401b5b6801000000000000000082106107155760409190911c9060201b5b640100000000821061072c5760209190911c9060101b5b6201000082106107415760109190911c9060081b5b61010082106107555760089190911c9060041b5b601082106107685760049190911c9060021b5b600882106107745760011b5b60018185816107855761078561395d565b048201901c9050600181858161079d5761079d61395d565b048201901c905060018185816107b5576107b561395d565b048201901c905060018185816107cd576107cd61395d565b048201901c905060018185816107e5576107e561395d565b048201901c905060018185816107fd576107fd61395d565b048201901c905060018185816108155761081561395d565b0491909101901c5f610827828661398a565b90508082106108365780610838565b815b95945050505050565b919050565b61084e611314565b6108575f611394565b565b60603373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108ca576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d48383611408565b90505b92915050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03610930575f8411610925575f5ffd5b5082900490506109a0565b80841161093b575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b606080826109b58689613933565b6109bf9190613933565b67ffffffffffffffff8111156109d7576109d761326a565b604051908082528060200260200182016040528015610a00578160200160208202803683370190505b509150815167ffffffffffffffff811115610a1d57610a1d61326a565b604051908082528060200260200182016040528015610a46578160200160208202803683370190505b5090505f805b63ffffffff8216891115610bd5575f610a938b8b8563ffffffff16818110610a7657610a766139c2565b905060a00201803603810190610a8c91906139ef565b60a0902090565b90505f610ad673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001683612412565b50505090505f610b25837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166124f790919063ffffffff16565b90505f610b5673ffffffffffffffffffffffffffffffffffffffff8416806c010000000000000000000000006108dd565b905080888663ffffffff1681518110610b7157610b716139c2565b6fffffffffffffffffffffffffffffffff9283166020918202929092010152610b9c90831680613946565b878663ffffffff1681518110610bb457610bb46139c2565b60200260200101818152505085600101955084600101945050505050610a4c565b5f91505b63ffffffff8216871115610dab575f88888463ffffffff16818110610c0057610c006139c2565b9050602002016020810190610c159190613200565b90505f8173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c859190613a1a565b50505050505090505f8273ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfb9190613aac565b90505f610d2c73ffffffffffffffffffffffffffffffffffffffff8416806c010000000000000000000000006108dd565b905080888663ffffffff1681518110610d4757610d476139c2565b6fffffffffffffffffffffffffffffffff9283166020918202929092010152610d7290831680613946565b878663ffffffff1681518110610d8a57610d8a6139c2565b60200260200101818152505085600101955084600101945050505050610bd9565b5f91505b63ffffffff8216851115610f1f575f5f87878563ffffffff16818110610dd757610dd76139c2565b9050602002016020810190610dec9190613200565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e589190613ae4565b509092509050610e986dffffffffffffffffffffffffffff831679ffffffffffffffffffffffffffff000000000000000000000000606084901b1661398a565b868463ffffffff1681518110610eb057610eb06139c2565b6fffffffffffffffffffffffffffffffff90921660209283029190910190910152610eee6dffffffffffffffffffffffffffff808316908416613946565b858463ffffffff1681518110610f0657610f066139c2565b6020908102919091010152505060019182019101610daf565b5050965096945050505050565b335f8181526001602052604090205460ff16610fa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420612066656520636f6c6c6563746f720000000000000000000000000060448201526064015b60405180910390fd5b5f5b61ffff8116831115611140575f84848361ffff16818110610fce57610fce6139c2565b9050602002016020810190610fe39190613200565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa15801561104d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107191906138dc565b905084848361ffff16818110611089576110896139c2565b905060200201602081019061109e9190613200565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201849052919091169063a9059cbb906044016020604051808303815f875af1158015611112573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111369190613b30565b5050600101610fab565b5060405173ffffffffffffffffffffffffffffffffffffffff8216904780156108fc02915f818181858888f19350505050158015611180573d5f5f3e3d5ffd5b50505050565b61118e611314565b73ffffffffffffffffffffffffffffffffffffffff8116611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610fa0565b61123a81611394565b50565b5f808061124c84860186613b4b565b9194509250905073ffffffffffffffffffffffffffffffffffffffff83163314611274575f5ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820183905283169063a9059cbb906044016020604051808303815f875af11580156112e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130a9190613b30565b5050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fa0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60605f61141783850185613ce8565b90505f5b8160400151518163ffffffff16101561162b575f82604001518263ffffffff168151811061144b5761144b6139c2565b602002602001015190505f81606001516114b3576114ae825f01516fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000084602001516fffffffffffffffffffffffffffffffff166108dd565b611502565b61150282602001516fffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000845f01516fffffffffffffffffffffffffffffffff166108dd565b90505f61150e826106c5565b6fffffffffffffffffffffffffffffffff1690505f6040518060600160405280856060015115158152602001855f015161154790613de1565b600f0b81526020018373ffffffffffffffffffffffffffffffffffffffff1681525090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f3cd914c85604001518360405180602001604052805f8152506040518463ffffffff1660e01b81526004016115da93929190613e1d565b6020604051808303815f875af11580156115f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161a91906138dc565b50506001909301925061141b915050565b505f5b8160200151518163ffffffff161015611b58575f82602001518263ffffffff168151811061165e5761165e6139c2565b602002602001015190505f81606001516116e857816040015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e39190613ee7565b611759565b816040015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611735573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117599190613ee7565b90505f82606001516117db57826040015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d69190613ee7565b61184c565b826040015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611828573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184c9190613ee7565b90507fffffffffffffffffffffffff3fd555c64ddc0172f5f1a3b0d81526f7c38a933e73ffffffffffffffffffffffffffffffffffffffff831601611936576118ab5f30855f01516fffffffffffffffffffffffffffffffff166125a1565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0845f01516fffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004015f604051808303818588803b15801561191a575f5ffd5b505af115801561192c573d5f5f3e3d5ffd5b5050505050611956565b6119568230855f01516fffffffffffffffffffffffffffffffff166125a1565b5f83606001516119b4576119af845f01516fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000086602001516fffffffffffffffffffffffffffffffff166108dd565b611a03565b611a0384602001516fffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000865f01516fffffffffffffffffffffffffffffffff166108dd565b90505f611a0f826106c5565b6040868101516060808901518951845173ffffffffffffffffffffffffffffffffffffffff94851660208201819052948b16818701526fffffffffffffffffffffffffffffffff808316828601528651808303909501855260808201968790527f128acb0800000000000000000000000000000000000000000000000000000000909652959094169550919363128acb0893611ab49330939092889190608401613f02565b60408051808303815f875af1158015611acf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af39190613f5d565b505073ffffffffffffffffffffffffffffffffffffffff831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611b4757611b47833087602001516fffffffffffffffffffffffffffffffff1661265d565b50506001909301925061162e915050565b505f5b81515163ffffffff82161015612191575f825f01518263ffffffff1681518110611b8757611b876139c2565b602002602001015190505f8160600151611c1157816040015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0c9190613ee7565b611c82565b816040015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c829190613ee7565b90505f8260600151611d0457826040015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cff9190613ee7565b611d75565b826040015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d759190613ee7565b90507fffffffffffffffffffffffff3fd555c64ddc0172f5f1a3b0d81526f7c38a933e73ffffffffffffffffffffffffffffffffffffffff831601611e5f57611dd45f30855f01516fffffffffffffffffffffffffffffffff166125a1565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0845f01516fffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e43575f5ffd5b505af1158015611e55573d5f5f3e3d5ffd5b5050505050611e7f565b611e7f8230855f01516fffffffffffffffffffffffffffffffff166125a1565b604083810151845191517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526fffffffffffffffffffffffffffffffff909216602483015283169063a9059cbb906044016020604051808303815f875af1158015611f0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613b30565b505f5f846040015173ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fa29190613ae4565b5091509150846060015115611fb357905b5f611ff4865f01516fffffffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16612849565b905085602001516fffffffffffffffffffffffffffffffff16811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f56323a204e6f7420656e6f7567682072656365697665640000000000000000006044820152606401610fa0565b856040015173ffffffffffffffffffffffffffffffffffffffff1663022c0d9f87606001516120a557826120a7565b5f5b88606001516120b6575f6120b8565b835b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526121009392913091600401613f7f565b5f604051808303815f87803b158015612117575f5ffd5b505af1158015612129573d5f5f3e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21461217f5761217f843088602001516fffffffffffffffffffffffffffffffff1661265d565b505060019094019350611b5b92505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa1580156121f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221d91906138dc565b9050801561229f576040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d906024015f604051808303815f87803b158015612288575f5ffd5b505af115801561229a573d5f5f3e3d5ffd5b505050505b5f6122e173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630836129bd565b90505f8113156122fb576122f65f30836125a1565b612316565b5f811215612316576123165f3061231184613fc3565b61265d565b5f6123218284613ff9565b90505f81121561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f43616e6e6f74206c6f73652065746800000000000000000000000000000000006044820152606401610fa0565b5f93505b8460600151518463ffffffff1610156123ea575f85606001518563ffffffff16815181106123c1576123c16139c2565b602002602001015190506123de81306123d984612a33565b6125a1565b50600190930192612391565b6040805160208101839052016040516020818303038152906040529550505050505092915050565b5f5f5f5f5f61242086612aca565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f9073ffffffffffffffffffffffffffffffffffffffff891690631e2eaeaf90602401602060405180830381865afa15801561248e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b291906138dc565b905073ffffffffffffffffffffffffffffffffffffffff811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f5f61250283612aca565b90505f612510600383613933565b6040517f1e2eaeaf0000000000000000000000000000000000000000000000000000000081526004810182905290915073ffffffffffffffffffffffffffffffffffffffff861690631e2eaeaf906024015b602060405180830381865afa15801561257d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083891906138dc565b805f036125ad57505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015612642575f5ffd5b505af1158015612654573d5f5f3e3d5ffd5b50505050505050565b805f0361266957505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b1580156126ef575f5ffd5b505af1158015612701573d5f5f3e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166127b0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af115801561278b573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061118091906138dc565b6127bb838383612b06565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015612825573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118091906138dc565b5f5f84116128d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201527f4e5055545f414d4f554e540000000000000000000000000000000000000000006064820152608401610fa0565b5f831180156128e757505f82115b612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c60448201527f49515549444954590000000000000000000000000000000000000000000000006064820152608401610fa0565b5f612980856103e5612c5d565b90505f61298d8285612c5d565b90505f6129a6836129a0886103e8612c5d565b90612ce6565b90506129b2818361398a565b979650505050505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff84165f5273ffffffffffffffffffffffffffffffffffffffff831660205260405f2090508473ffffffffffffffffffffffffffffffffffffffff1663f135baaa826040518263ffffffff1660e01b815260040161256291815260200190565b5f80612a7673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630856129bd565b90505f8112156108d7576040517f4c085bf100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610fa0565b6040515f90612ae9908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b3073ffffffffffffffffffffffffffffffffffffffff831603612bda576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905284169063a9059cbb906044015b6020604051808303815f875af1158015612bb6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111809190613b30565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018390528416906323b872dd90606401612b9a565b5f811580612c8057508282612c728183613946565b9250612c7e908361398a565b145b6108d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f770000000000000000000000006044820152606401610fa0565b5f82612cf28382613933565b91508110156108d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f770000000000000000000000006044820152606401610fa0565b5f5f83601f840112612d6d575f5ffd5b50813567ffffffffffffffff811115612d84575f5ffd5b6020830191508360208260071b8501011115612d9e575f5ffd5b9250929050565b5f5f83601f840112612db5575f5ffd5b50813567ffffffffffffffff811115612dcc575f5ffd5b6020830191508360208260051b8501011115612d9e575f5ffd5b5f5f5f5f5f5f5f5f5f60a08a8c031215612dfe575f5ffd5b893567ffffffffffffffff811115612e14575f5ffd5b612e208c828d01612d5d565b909a5098505060208a013567ffffffffffffffff811115612e3f575f5ffd5b612e4b8c828d01612d5d565b90985096505060408a013567ffffffffffffffff811115612e6a575f5ffd5b8a01601f81018c13612e7a575f5ffd5b803567ffffffffffffffff811115612e90575f5ffd5b8c60208260081b8401011115612ea4575f5ffd5b6020919091019550935060608a013567ffffffffffffffff811115612ec7575f5ffd5b612ed38c828d01612da5565b9a9d999c50979a9699959894979660800135949350505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461123a575f5ffd5b801515811461123a575f5ffd5b5f5f60408385031215612f2c575f5ffd5b8235612f3781612eed565b91506020830135612f4781612f0e565b809150509250929050565b5f60208284031215612f62575f5ffd5b5035919050565b5f5f83601f840112612f79575f5ffd5b50813567ffffffffffffffff811115612f90575f5ffd5b602083019150836020828501011115612d9e575f5ffd5b5f5f60208385031215612fb8575f5ffd5b823567ffffffffffffffff811115612fce575f5ffd5b612fda85828601612f69565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6108d46020830184612fe6565b5f5f5f60608486031215613056575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f5f5f5f60608789031215613082575f5ffd5b863567ffffffffffffffff811115613098575f5ffd5b8701601f810189136130a8575f5ffd5b803567ffffffffffffffff8111156130be575f5ffd5b89602060a0830284010111156130d2575f5ffd5b60209182019750955087013567ffffffffffffffff8111156130f2575f5ffd5b6130fe89828a01612da5565b909550935050604087013567ffffffffffffffff81111561311d575f5ffd5b61312989828a01612da5565b979a9699509497509295939492505050565b604080825283519082018190525f9060208501906060840190835b818110156131865783516fffffffffffffffffffffffffffffffff16835260209384019390920191600101613156565b5050838103602080860191909152855180835291810192508501905f5b818110156131c15782518452602093840193909201916001016131a3565b50919695505050505050565b5f5f602083850312156131de575f5ffd5b823567ffffffffffffffff8111156131f4575f5ffd5b612fda85828601612da5565b5f60208284031215613210575f5ffd5b81356109a081612eed565b5f5f5f5f6060858703121561322e575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115613252575f5ffd5b61325e87828801612f69565b95989497509550505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156132ba576132ba61326a565b60405290565b60405160a0810167ffffffffffffffff811182821017156132ba576132ba61326a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561332a5761332a61326a565b604052919050565b6fffffffffffffffffffffffffffffffff8116811461123a575f5ffd5b5f6080828403121561335f575f5ffd5b613367613297565b9050813561337481613332565b8152602082013561338481613332565b6020820152604082013561339781612eed565b604082015260608201356133aa81612f0e565b606082015292915050565b5f608082840312156133c5575f5ffd5b6108d4838361334f565b8060020b811461123a575f5ffd5b5f60a082840312156133ed575f5ffd5b6133f56132c0565b9050813561340281612eed565b8152602082013561341281612eed565b6020820152604082013562ffffff8116811461342c575f5ffd5b6040820152606082013561343f816133cf565b6060820152608082013561345281612eed565b608082015292915050565b5f610100828403121561346e575f5ffd5b613476613297565b9050813561348381613332565b8152602082013561349381613332565b60208201526134a583604084016133dd565b604082015260e08201356133aa81612f0e565b5f61010082840312156134c9575f5ffd5b6108d4838361345d565b5f8151808452602084019350602083015f5b8281101561356b576135558683516fffffffffffffffffffffffffffffffff81511682526fffffffffffffffffffffffffffffffff602082015116602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b60809590950194602091909101906001016134e5565b5093949350505050565b5f8151808452602084019350602083015f5b8281101561356b5781516fffffffffffffffffffffffffffffffff81511687526fffffffffffffffffffffffffffffffff6020820151166020880152604081015161364a604089018273ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b5060600151151560e08701526101009095019460209190910190600101613587565b5f8151808452602084019350602083015f5b8281101561356b57815173ffffffffffffffffffffffffffffffffffffffff1686526020958601959091019060010161367e565b6020808252825160a083830152805160c084018190525f929190910190829060e08501905b8083101561375e576137478285516fffffffffffffffffffffffffffffffff81511682526fffffffffffffffffffffffffffffffff602082015116602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526060810151151560608301525050565b6080820191506020840193506001830192506136d7565b50602086015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085820301604086015261379a81846134d3565b9250505060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160608501526137d78282613575565b91505060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016080850152613813828261366c565b915050608084015160a08401528091505092915050565b5f6020828403121561383a575f5ffd5b815167ffffffffffffffff811115613850575f5ffd5b8201601f81018413613860575f5ffd5b805167ffffffffffffffff81111561387a5761387a61326a565b6138ab60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016132e3565b8181528560208385010111156138bf575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f602082840312156138ec575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156108d7576108d76138f3565b808201808211156108d7576108d76138f3565b80820281158282048414176108d7576108d76138f3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826139bd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60a082840312156139ff575f5ffd5b6108d483836133dd565b805161ffff81168114610841575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613a30575f5ffd5b8751613a3b81612eed565b6020890151909750613a4c816133cf565b9550613a5a60408901613a09565b9450613a6860608901613a09565b9350613a7660808901613a09565b925060a088015160ff81168114613a8b575f5ffd5b60c0890151909250613a9c81612f0e565b8091505092959891949750929550565b5f60208284031215613abc575f5ffd5b81516109a081613332565b80516dffffffffffffffffffffffffffff81168114610841575f5ffd5b5f5f5f60608486031215613af6575f5ffd5b613aff84613ac7565b9250613b0d60208501613ac7565b9150604084015163ffffffff81168114613b25575f5ffd5b809150509250925092565b5f60208284031215613b40575f5ffd5b81516109a081612f0e565b5f5f5f60608486031215613b5d575f5ffd5b8335613b6881612eed565b92506020840135613b7881612eed565b929592945050506040919091013590565b5f67ffffffffffffffff821115613ba257613ba261326a565b5060051b60200190565b5f82601f830112613bbb575f5ffd5b8135602083015f613bd3613bce84613b89565b6132e3565b83815260079390931b82019290506020810186841115613bf1575f5ffd5b83831015613c1457613c03878461334f565b815260809290920191602001613bf1565b5095945050505050565b5f82601f830112613c2d575f5ffd5b8135613c3b613bce82613b89565b8082825260208201915060208360081b860101925085831115613c5c575f5ffd5b602085015b83811015613c1457613c73878261345d565b835260209092019161010001613c61565b5f82601f830112613c93575f5ffd5b8135613ca1613bce82613b89565b8082825260208201915060208360051b860101925085831115613cc2575f5ffd5b602085015b83811015613c14578035613cda81612eed565b835260209283019201613cc7565b5f60208284031215613cf8575f5ffd5b813567ffffffffffffffff811115613d0e575f5ffd5b820160a08185031215613d1f575f5ffd5b613d276132c0565b813567ffffffffffffffff811115613d3d575f5ffd5b613d4986828501613bac565b825250602082013567ffffffffffffffff811115613d65575f5ffd5b613d7186828501613bac565b602083015250604082013567ffffffffffffffff811115613d90575f5ffd5b613d9c86828501613c1e565b604083015250606082013567ffffffffffffffff811115613dbb575f5ffd5b613dc786828501613c84565b606083015250608091820135918101919091529392505050565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103613e1557613e156138f3565b5f0392915050565b613e9c818573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8251151560a0820152602083015160c082015273ffffffffffffffffffffffffffffffffffffffff60408401511660e08201526101206101008201525f610838610120830184612fe6565b5f60208284031215613ef7575f5ffd5b81516109a081612eed565b73ffffffffffffffffffffffffffffffffffffffff86168152841515602082015283600f0b604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f6129b260a0830184612fe6565b5f5f60408385031215613f6e575f5ffd5b505080516020909101519092909150565b84815283602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f613fb96080830184612fe6565b9695505050505050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613ff357613ff36138f3565b505f0390565b8082018281125f831280158216821582161715614018576140186138f3565b50509291505056fea264697066735822122075dc4ab3f4613af435d881975eb99b79bcd957f52cd889935c546e7b73e1a59d64736f6c634300081d0033