/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, Contract, ContractFactory, Overrides } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { GranularBondingCurve } from "../GranularBondingCurve"; export class GranularBondingCurve__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( _baseToken: string, _tradeToken: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( _baseToken, _tradeToken, overrides || {} ) as Promise; } getDeployTransaction( _baseToken: string, _tradeToken: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction(_baseToken, _tradeToken, overrides || {}); } attach(address: string): GranularBondingCurve { return super.attach(address) as GranularBondingCurve; } connect(signer: Signer): GranularBondingCurve__factory { return super.connect(signer) as GranularBondingCurve__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): GranularBondingCurve { return new Contract( address, _abi, signerOrProvider ) as GranularBondingCurve; } } const _abi = [ { inputs: [ { internalType: "address", name: "_baseToken", type: "address", }, { internalType: "address", name: "_tradeToken", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { inputs: [], name: "PRECISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "ROUNDLIMIT", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint128", name: "x", type: "uint128", }, { internalType: "int128", name: "y", type: "int128", }, ], name: "addDelta", outputs: [ { internalType: "uint128", name: "z", type: "uint128", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "L", type: "uint256", }, ], name: "baseGivenLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "baseToken", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, ], name: "bidsLeft", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "claimFilledOrder", outputs: [ { internalType: "uint256", name: "claimedAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "claimPartiallyFilledOrder", outputs: [ { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "tradeAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "tickLower", type: "uint16", }, { internalType: "uint16", name: "tickUpper", type: "uint16", }, { internalType: "uint128", name: "amount0Requested", type: "uint128", }, { internalType: "uint128", name: "amount1Requested", type: "uint128", }, ], name: "collect", outputs: [ { internalType: "uint256", name: "amount0", type: "uint256", }, { internalType: "uint256", name: "amount1", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "entry", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "factory", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "fee", outputs: [ { internalType: "uint24", name: "", type: "uint24", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "feeGrowthGlobalBase", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "feeGrowthGlobalTrade", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getCurPrice", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "getLiq", outputs: [ { internalType: "uint128", name: "", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getMaxLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint256", name: "pDelta", type: "uint256", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getNextPriceLimit", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getNumCross", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getOneTimeLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "liquidity", outputs: [ { internalType: "uint128", name: "", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "B", type: "uint256", }, ], name: "liquidityGivenBase", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "T", type: "uint256", }, ], name: "liquidityGivenTrade", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "lock", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "owner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "placeLimitOrder", outputs: [ { internalType: "uint256", name: "amountToEscrow", type: "uint256", }, { internalType: "uint128", name: "numCross", type: "uint128", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, ], name: "pointToPrice", outputs: [ { internalType: "uint160", name: "", type: "uint160", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "positionIsFilled", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], name: "positions", outputs: [ { internalType: "uint128", name: "bidCrossId", type: "uint128", }, { internalType: "uint128", name: "askCrossId", type: "uint128", }, { internalType: "uint128", name: "askLiq", type: "uint128", }, { internalType: "uint128", name: "bidLiq", type: "uint128", }, { internalType: "uint128", name: "liquidity", type: "uint128", }, { internalType: "uint256", name: "feeGrowthInside0LastX128", type: "uint256", }, { internalType: "uint256", name: "feeGrowthInside1LastX128", type: "uint256", }, { internalType: "uint256", name: "tokensOwed0", type: "uint256", }, { internalType: "uint256", name: "tokensOwed1", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "priceDelta", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "price", type: "uint256", }, ], name: "priceToPoint", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "provide", outputs: [ { internalType: "uint256", name: "amount0", type: "uint256", }, { internalType: "uint256", name: "amount1", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "reduceLimitOrder", outputs: [ { internalType: "uint256", name: "amountToReturn", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, ], name: "remove", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "_entry", type: "address", }, ], name: "setEntry", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint128", name: "liq", type: "uint128", }, ], name: "setLiquidity", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "price", type: "uint256", }, ], name: "setPriceAndPoint", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "slot0", outputs: [ { internalType: "uint160", name: "curPrice", type: "uint160", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint8", name: "feeProtocol", type: "uint8", }, { internalType: "bool", name: "unlocked", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "tickSpacing", outputs: [ { internalType: "int24", name: "", type: "int24", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], name: "ticks", outputs: [ { internalType: "uint128", name: "liquidityGross", type: "uint128", }, { internalType: "int128", name: "liquidityNet", type: "int128", }, { internalType: "uint256", name: "feeGrowthOutsideBase", type: "uint256", }, { internalType: "uint256", name: "feeGrowthOutsideTrade", type: "uint256", }, { internalType: "int56", name: "tickCumulativeOutside", type: "int56", }, { internalType: "uint160", name: "secondsPerLiquidityOutsideX128", type: "uint160", }, { internalType: "uint32", name: "secondsOutside", type: "uint32", }, { internalType: "bool", name: "initialized", type: "bool", }, { internalType: "uint128", name: "askLiquidityGross", type: "uint128", }, { internalType: "uint128", name: "bidLiquidityGross", type: "uint128", }, { internalType: "uint128", name: "askNumCross", type: "uint128", }, { internalType: "uint128", name: "bidNumCross", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "bool", name: "moveUp", type: "bool", }, { internalType: "int256", name: "amountSpecified", type: "int256", }, { internalType: "uint256", name: "priceLimit", type: "uint256", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "trade", outputs: [ { internalType: "uint256", name: "amountIn", type: "uint256", }, { internalType: "uint256", name: "amountOut", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "L", type: "uint256", }, ], name: "tradeGivenLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "tradeToken", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "uint256", name: "b", type: "uint256", }, { internalType: "uint256", name: "a", type: "uint256", }, ], name: "xMax", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "uint256", name: "b", type: "uint256", }, { internalType: "uint256", name: "a", type: "uint256", }, ], name: "xMaxRoundUp", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "yInt", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, ]; const _bytecode = "0x6101406040523480156200001257600080fd5b5060405162003f4938038062003f498339810160408190526200003591620000b7565b6001600160a01b0380821660e052821661010052600060a081905260c0819052610120526200006e670de0b6b3a76400006064620000ef565b600280546001600160801b0319166001600160801b03929092169190911790555050336080526200012d565b80516001600160a01b0381168114620000b257600080fd5b919050565b60008060408385031215620000cb57600080fd5b620000d6836200009a565b9150620000e6602084016200009a565b90509250929050565b60006001600160801b03828116848216811515828404821116156200012457634e487b7160e01b600052601160045260246000fd5b02949350505050565b60805160a05160c05160e0516101005161012051613d9b620001ae600039600061084e0152600081816108270152818161131201526115c20152600081816108880152818161133801526115e8015260006108000152600081816108af0152610db101526000818161060801528181611baa01526121110152613d9b6000f3fe608060405234801561001057600080fd5b50600436106102895760003560e01c806380c0c3e71161015c578063b29d9b6e116100ce578063d83678ac11610087578063d83678ac14610883578063ddca3f43146108aa578063e37699c9146108e5578063e7c3614f146108f8578063f83d08ba1461090b578063f9734a241461091357600080fd5b8063b29d9b6e146106b3578063b501c284146106c6578063b9033a39146106d9578063c45a0155146107fb578063c55dae6314610822578063d0c93a7c1461084957600080fd5b8063a74d74d411610120578063a74d74d414610650578063aaf5eb6814610663578063ad066f9a14610672578063ae0f28f414610679578063af0d37bc1461068d578063b04a69fd146106a057600080fd5b806380c0c3e7146105dd5780638ce26999146105f05780638da5cb5b146106035780639314b03f1461062a5780639b6080891461063d57600080fd5b80633850c7bd11610200578063514ea4bf116101b9578063514ea4bf1461049f5780635bfa896a14610565578063659a544a1461057357806367f239dd1461057c5780636ed75596146105a75780637f1d9ae6146105ca57600080fd5b80633850c7bd146103b75780633d718da014610423578063402d44fb1461045357806342b6c9fb1461046657806342bc5292146104795780634a3ca7171461048c57600080fd5b80631a686502116102525780631a686502146103055780631d2637ab146103305780631dae2436146103395780632130ce0d1461034e5780632353b18e1461037e57806332530d7f146103a457600080fd5b80624b20451461028e578063098bcc56146102bb57806311e715d6146102ce5780631376ff3e146102e9578063159054ea146102fc575b600080fd5b6102a161029c366004613561565b610926565b604080519283526020830191909152015b60405180910390f35b6102a16102c9366004613602565b6110b8565b6001546001600160a01b03165b6040519081526020016102b2565b6102db6102f7366004613667565b6111dd565b6102db61271081565b600254610318906001600160801b031681565b6040516001600160801b0390911681526020016102b2565b6102db60075481565b61034c6103473660046136bb565b6113ef565b005b61036161035c366004613667565b611445565b604080519283526001600160801b039091166020830152016102b2565b61039161038c3660046136bb565b6116ce565b60405161ffff90911681526020016102b2565b6102a16103b23660046136d4565b6116fa565b6001546103ec906001600160a01b0381169061ffff600160a01b8204169060ff600160b01b8204811691600160b81b90041684565b604080516001600160a01b03909516855261ffff909316602085015260ff90911691830191909152151560608201526080016102b2565b61034c610431366004613717565b600280546001600160801b0319166001600160801b0392909216919091179055565b610318610461366004613732565b61190b565b6102db6104743660046136d4565b6119cb565b61034c61048736600461376f565b611ba8565b6102db61049a36600461378a565b611c2e565b61050a6104ad3660046136bb565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160801b0380861697600160801b96879004821697828716979096048216959190941693929189565b604080516001600160801b039a8b168152988a1660208a015296891696880196909652938716606087015295909116608085015260a084015260c083019390935260e0820192909252610100810191909152610120016102b2565b6102db662386f26fc1000081565b6102db60065481565b60055461058f906001600160a01b031681565b6040516001600160a01b0390911681526020016102b2565b6105ba6105b53660046136d4565b611c4b565b60405190151581526020016102b2565b6102a16105d83660046137bd565b611d06565b6102db6105eb366004613806565b611e15565b61058f6105fe366004613832565b611e53565b61058f7f000000000000000000000000000000000000000000000000000000000000000081565b6102db610638366004613806565b611e72565b61031861064b3660046136d4565b611e88565b6102db61065e36600461384d565b611edd565b6102db670de0b6b3a764000081565b60006102db565b6102db610687366004613832565b50600090565b6102a161069b366004613870565b611f35565b6102db6106ae366004613806565b612036565b6102db6106c1366004613806565b61206c565b6102db6106d43660046138d8565b612082565b6107776106e7366004613832565b60036020819052600091825260409091208054600182015460028301549383015460048401546005909401546001600160801b0380851696600160801b95869004600f0b9694959094600685900b94600160381b81046001600160a01b031694600160d81b820463ffffffff1694600160f81b90920460ff1693828416938190048316928083169291909104168c565b604080516001600160801b039d8e168152600f9c909c0b60208d01528b019990995260608a019790975260069590950b60808901526001600160a01b0390931660a088015263ffffffff90911660c0870152151560e086015285166101008501528416610120840152831661014083015291909116610160820152610180016102b2565b61058f7f000000000000000000000000000000000000000000000000000000000000000081565b61058f7f000000000000000000000000000000000000000000000000000000000000000081565b6108707f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b81526020016102b2565b61058f7f000000000000000000000000000000000000000000000000000000000000000081565b6108d17f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff90911681526020016102b2565b6102db6108f336600461378a565b6120b9565b6102db610906366004613806565b6120c7565b61034c61210f565b6102db610921366004613806565b612194565b60055460009081906001600160a01b031633148061094357503330145b6109685760405162461bcd60e51b815260040161095f9061390b565b60405180910390fd5b60005460ff161561098b5760405162461bcd60e51b815260040161095f9061392e565b6000805460ff1916600117905560408051808201909152600f81526e2d2d2d4e65772054726164652d2d2d60881b60208201526109c7906121d5565b60408051608080820183526001546001600160a01b03808216845261ffff600160a01b830416602080860182905260ff600160b01b8504811687890152600160b81b90940490931615156060808701919091528651610100810188528d81526000948101859052865190931696830196909652948101949094529192662386f26fc10000929181018b610a5c57600754610a60565b6006545b8152600060208083018290526002546001600160801b03166040808501829052606094850191909152805193840181528284529083018290528281018290528301519293509091908b1390610ab5908561221b565b8015610abf57508b155b15610b0f57600183604001818151610ad79190613969565b9052506040830151610ae8906116ce565b61ffff16606084018190526001805461ffff60a01b1916600160a01b830217905560208601525b825115801590610b23575089836040015114155b15610f7d57610b7f60405180610100016040528060008152602001600061ffff1681526020016000151581526020016000815260200160008152602001600081526020016000815260200160006001600160801b031681525090565b604084015181526060840151610b9690868f612082565b60608201528c610bb65760018460600151610bb19190613981565b610bc6565b6060840151610bc69060016139a4565b61ffff1660208201526060840151610be09060039061222f565b6001600160801b031660e082015281610c1d57610c188160e001518560c00151610c0a91906139ca565b6001600160801b031661233e565b610c42565b610c428160e001518560c00151610c3491906139ca565b6001600160801b0316612375565b83526040840151610c53908e611edd565b60408085018290528501518451610c6a929061206c565b836020018181525050610c9c604051806040016040528060088152602001675f5f5f5f5f5f5f5f60c01b8152506121d5565b610cca60405180604001604052806008815260200167435552505249434560c01b81525085604001516123ac565b610d166040518060400160405280601e81526020017f74726164696e673b206c69717569646974792c20616d6f756e746c65667400008152508560c001516001600160801b03166123ac565b8351610d2a90610d25906139ec565b6123f5565b610d766040518060400160405280601881526020017f6e65787470726963656c696d69742f706f696e746e65787400000000000000008152508260600151836020015161ffff1661243a565b610d9d604051806040016040528060018152602001606160f81b81525084600001516123ac565b610dd68460400151826060015186600001517f000000000000000000000000000000000000000000000000000000000000000087612486565b60c085015260a08401908152608084019182526040808801939093528251808401909352600e83526d185b5bdd5b9d1a5b985b991bdd5d60921b602084015290519051610e2492919061243a565b610e526040518060400160405280600381526020016239963160e91b8152508460200151856040015161243a565b8115610e7457608081015184518590610e6c908390613a09565b905250610e8c565b608081015184518590610e88908390613a48565b9052505b8060a0015184602001818151610ea29190613969565b90525060c08401516001600160801b031615610ee95760c08085015190820151610ed4916001600160801b03166126a8565b84608001818151610ee59190613969565b9052505b806060015184604001511415610f775760e08101516001600160801b031615610f1e576060840151610f1e906003908f6126bd565b6020810151600654600754600092610f38926003926127b5565b90508d610f4b57610f4881613a89565b90505b610f598560c001518261190b565b6001600160801b031660c086015250602081015161ffff1660608501525b50610b0f565b610f8a8360400151612808565b600180546001600160a01b0319166001600160a01b03929092169190911790556020850151606084015161ffff918216911614610fe75760608301516001805461ffff909216600160a01b0261ffff60a01b199092169190911790555b8260c001516001600160801b03168360e001516001600160801b03161461102d5760c0830151600280546001600160801b0319166001600160801b039092169190911790555b8b1561103c5760808301516006555b8061106d5761271083602001516110539190613969565b835161105e8d6139ec565b6110689190613a48565b61109a565b8b61108857825161107e908c613a09565b836020015161109a565b8251611094908c613a09565b83602001515b6000805460ff19169055909e909d509b505050505050505050505050565b60055460009081906001600160a01b03163314806110d557503330145b6110f15760405162461bcd60e51b815260040161095f9061390b565b60005460ff16156111145760405162461bcd60e51b815260040161095f9061392e565b6000805460ff1916600117815561112e6004898989612823565b90508060050154856001600160801b03161161115357846001600160801b0316611159565b80600501545b92508060060154846001600160801b03161161117e57836001600160801b0316611184565b80600601545b915082156111a657828160050160008282546111a09190613ab9565b90915550505b81156111c657818160060160008282546111c09190613ab9565b90915550505b506000805460ff1916905590969095509350505050565b6005546000906001600160a01b03163314806111f857503330145b6112145760405162461bcd60e51b815260040161095f9061390b565b60005460ff16156112375760405162461bcd60e51b815260040161095f9061392e565b6000805460ff191660019081179091555461ffff851690611260906001600160a01b03166116ce565b61ffff1614156112be5760405162461bcd60e51b815260206004820152602360248201527f43616e277420726564756365206f7264657220666f722063757272656e74207460448201526269636b60e81b606482015260840161095f565b60006112da33866112d08160016139a4565b6004929190612823565b90506112f26112e885613a89565b829085600061288e565b611309856112ff86613a89565b6003919086612963565b600083611336577f0000000000000000000000000000000000000000000000000000000000000000611358565b7f00000000000000000000000000000000000000000000000000000000000000005b90508361139f5761139a6113706105fe8860016139a4565b6001600160a01b031661138288611e53565b6001600160a01b0316876001600160801b0316612194565b6113da565b6113da6113b06105fe8860016139a4565b6001600160a01b03166113c288611e53565b6001600160a01b0316876001600160801b0316611e15565b6000805460ff19169055979650505050505050565b6113f8816116ce565b6001805461ffff92909216600160a01b0261ffff60a01b1990921691909117905561142281612808565b600180546001600160a01b0319166001600160a01b039290921691909117905550565b60055460009081906001600160a01b031633148061146257503330145b61147e5760405162461bcd60e51b815260040161095f9061390b565b60005460ff16156114a15760405162461bcd60e51b815260040161095f9061392e565b6000805460ff191660011790558280156114d757506001546001600160a01b03166114cb86611e53565b6001600160a01b031611155b156115155760405162461bcd60e51b815260206004820152600e60248201526d61736b2062656c6f77207072696560901b604482015260640161095f565b8215801561153f57506001546001600160a01b031661153386611e53565b6001600160a01b031610155b1561157e5760405162461bcd60e51b815260206004820152600f60248201526e626964732061626f7665207072696560881b604482015260640161095f565b600061159087876112d08160016139a4565b905061159e60038786612a34565b91506115ac8186868561288e565b6115b96003878787612963565b6000846115e6577f0000000000000000000000000000000000000000000000000000000000000000611608565b7f00000000000000000000000000000000000000000000000000000000000000005b90508461164f5761164a6116206105fe8960016139a4565b6001600160a01b031661163289611e53565b6001600160a01b0316886001600160801b0316612194565b61168a565b61168a6116606105fe8960016139a4565b6001600160a01b031661167289611e53565b6001600160a01b0316886001600160801b0316611e15565b93506116b760405180604001604052806009815260200168185b5bdd5b9d189a5960ba1b815250856123ac565b50506000805460ff19169055909590945092505050565b6000670de0b6b3a76400006116ea83662386f26fc100006126a8565b6116f49190613ae6565b92915050565b60055460009081906001600160a01b031633148061171757503330145b6117335760405162461bcd60e51b815260040161095f9061390b565b60005460ff16156117565760405162461bcd60e51b815260040161095f9061392e565b6000805460ff1916600190811782556040805160808101825282546001600160a01b038116825261ffff600160a01b8204166020830152600160b01b810460ff90811693830193909352600160b81b90049091161515606082015291906117c690889088906112d09082906139a4565b60015490915061ffff8716906117e4906001600160a01b03166116ce565b61ffff16146118295760405162461bcd60e51b81526020600482015260116024820152704e6f742063757272656e7420707269636560781b604482015260640161095f565b60008561184a576001820154600160801b90046001600160801b0316611859565b60018201546001600160801b03165b905061187161186782613a89565b839088600061288e565b6118888761187e83613a89565b6003919089612963565b6118bf6118996105fe8960016139a4565b6001600160a01b031684600001516001600160a01b0316836001600160801b0316611e15565b93506118f383600001516001600160a01b03166118db89611e53565b6001600160a01b0316836001600160801b0316612194565b6000805460ff19169055989397509295505050505050565b60008082600f0b1215611978576001600160801b03831661192b83613a89565b6119359085613afa565b9150816001600160801b0316106119735760405162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015260640161095f565b6116f4565b6001600160801b03831661198c83856139ca565b9150816001600160801b031610156116f45760405162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015260640161095f565b6005546000906001600160a01b03163314806119e657503330145b611a025760405162461bcd60e51b815260040161095f9061390b565b60005460ff1615611a255760405162461bcd60e51b815260040161095f9061392e565b6000805460ff191660019081178255611a4790869086906112d09082906139a4565b90506000611a5760038686612a34565b9050600084611a705782546001600160801b0316611a83565b8254600160801b90046001600160801b03165b9050806001600160801b0316826001600160801b031611611adc5760405162461bcd60e51b8152602060048201526013602482015272141bdcda5d1a5bdb881b9bdd08199a5b1b1959606a1b604482015260640161095f565b600085611afd576001840154600160801b90046001600160801b0316611b0c565b60018401546001600160801b03165b90508515611b3e57611b37611b256105fe8960016139a4565b6001600160a01b03166118db89611e53565b9450611b7c565b611b79611b4f6105fe8960016139a4565b6001600160a01b0316611b6189611e53565b6001600160a01b0316836001600160801b0316611e15565b94505b611b92611b8882613a89565b859088600061288e565b50506000805460ff191690555090949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314611c0c5760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015260640161095f565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611c3b60038461222f565b6001600160801b03169392505050565b600080611c5e85856112d08160016139a4565b90506000611c6e60038686612a34565b9050600084611c875782546001600160801b0316611c9a565b8254600160801b90046001600160801b03165b9050600085611cbd576001840154600160801b90046001600160801b0316611ccc565b60018401546001600160801b03165b90506000816001600160801b0316118015611cf85750816001600160801b0316836001600160801b0316115b9450505050505b9392505050565b60055460009081906001600160a01b0316331480611d2357503330145b611d3f5760405162461bcd60e51b815260040161095f9061390b565b60005460ff1615611d625760405162461bcd60e51b815260040161095f9061392e565b6000805460ff19166001178155604080516080810182526001600160a01b038916815261ffff808916602083015287169181019190915281908190611db89060608101611dae89613a89565b600f0b9052612a8c565b9250925092506000821180611dcd5750600081115b15611dfd57818360050154611de29190613969565b818460060154611df29190613969565b600685015560058401555b6000805460ff19169055909890975095505050505050565b600082841015611e375760405162461bcd60e51b815260040161095f90613b1a565b611e4b82611e458587613ab9565b90612d04565b949350505050565b60006116f4611e6d662386f26fc1000061ffff8516613b3d565b612808565b6000611e4b82611e828587613ab9565b90612d19565b600081611eb857611e9f84846112d08160016139a4565b60010154600160801b90046001600160801b0316611e4b565b611ec884846112d08160016139a4565b600101546001600160801b0316949350505050565b600080611ee9846116ce565b905082158015611f045750611f0261ffff821685613b5c565b155b611f1657611f1181611e53565b611f24565b611f246105fe600183613981565b6001600160a01b0316949350505050565b60055460009081906001600160a01b0316331480611f5257503330145b611f6e5760405162461bcd60e51b815260040161095f9061390b565b60005460ff1615611f915760405162461bcd60e51b815260040161095f9061392e565b6000805460ff191660011790556001600160801b038516611fdf5760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b604482015260640161095f565b61201c60405180608001604052808a6001600160a01b031681526020018961ffff1681526020018861ffff16815260200187600f0b815250612a8c565b6000805460ff19169055909a909950975050505050505050565b6000828410156120585760405162461bcd60e51b815260040161095f90613b1a565b611e4b6120658486613ab9565b83906126a8565b6000611e4b8261207c8587613ab9565b906126a8565b600081156120ab57826120968560016139a4565b61ffff166120a49190613b3d565b9050611cff565b6120a48361ffff8616613b3d565b6000611c3b60038484612a34565b6000828410156120e95760405162461bcd60e51b815260040161095f90613b1a565b611e4b61206560026120fb8688613969565b6121059190613ae6565b611e458688613ab9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146121735760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015260640161095f565b6001805460ff60b81b198116600160b81b9182900460ff1615909102179055565b6000828410156121b65760405162461bcd60e51b815260040161095f90613b1a565b611e4b6121c4858585611e15565b60006121cf85612375565b86612d2e565b612218816040516024016121e99190613bbd565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612d7c565b50565b60006122278284613b5c565b159392505050565b61ffff811660009081526020838152604080832081516101808101835281546001600160801b038082168352600160801b91829004600f0b95830195909552600183015493820193909352600282015460608201526003820154600681900b6080830152600160381b81046001600160a01b031660a0830152600160d81b810463ffffffff1660c0830152600160f81b900460ff16151560e0820152600482015480851661010083018190529084900485166101208301526005909201548085166101408301529290920490921661016082015290158061231c57506101208101516001600160801b0316155b61232857612328613bd0565b806101200151816101000151611e4b91906139ca565b6000811561235857611973670de0b6b3a764000083612d19565b6116f4612366836001613969565b670de0b6b3a764000090612d19565b6000811561238f57611973670de0b6b3a7640000836126a8565b6116f461239d836001613969565b670de0b6b3a7640000906126a8565b6123f182826040516024016123c2929190613be6565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052612d7c565b5050565b6122188160405160240161240b91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b179052612d7c565b61248183838360405160240161245293929190613c08565b60408051601f198184030181529190526020810180516001600160e01b031663969cdd0360e01b179052612d7c565b505050565b6000808080888810158188128015906125fb578115612538576124b989886020015189600001518a604001516001612d9d565b965093508986106125185786518a96506124d79061207c8d89613ab9565b93506125116124e989620f4240613c2d565b62ffffff16620f424061250a878b602001518c600001518d60400151612d2e565b9190612ee4565b94506125c6565b61251161252889620f4240613c2d565b8a9062ffffff16620f4240612ee4565b61255c6125498a8960200151612f03565b6020890151895160408b01516000612d9d565b965093508986116125b35786518a965061257a9061207c888e613ab9565b945061259185600089600001518a60400151612d2e565b93506125116125a389620f4240613c2d565b869062ffffff16620f4240612ee4565b6125c361252889620f4240613c2d565b94505b6125f46125e9620f42406125da8b82613c2d565b62ffffff8c8116929116612ee4565b8690620f4240612ee4565b925061269a565b811561267857600061260c8a6139ec565b88519091508c9061261d9083612f1a565b6126279190613969565b96508a871061265f5761263f8b8d8a6000015161206c565b8b975095506127106126518783613ab9565b1161265a578095505b612663565b8095505b6126748660008a600001518f612f2f565b9450505b61268b8462ffffff8a16620f4240612ee4565b92506126978385613969565b93505b505095509550955095915050565b6000611cff83670de0b6b3a764000084612ee4565b61ffff821660009081526020849052604090208115612759576004810180546001600160801b03191690556005810180546001600160801b031690600061270383613c4b565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555050612754604051806040016040528060068152602001657469636b3f3f60d01b8152508461ffff166123ac565b6127af565b6004810180546001600160801b03908116909155600582018054600160801b900490911690601061278983613c4b565b91906101000a8154816001600160801b0302191690836001600160801b03160217905550505b50505050565b61ffff8316600090815260208590526040902080546001820154600160801b909104600f0b91906127e69085613ab9565b600182015560028101546127fa9084613ab9565b600290910155949350505050565b806001600160a01b038116811461281e57600080fd5b919050565b6040805160609490941b6bffffffffffffffffffffffff191660208086019190915260f093841b6001600160f01b031990811660348701529290931b909116603684015280516018818503018152603890930181528251928201929092206000908152929052902090565b81156128f85760018401546128ac906001600160801b03168461190b565b6001850180546001600160801b0319166001600160801b03929092169190911790556000600f84900b13156127545783546001600160801b03808316600160801b0291161784556127af565b600184015461291790600160801b90046001600160801b03168461190b565b6001850180546001600160801b03928316600160801b0292169190911790556000600f84900b13156127af5783546001600160801b0319166001600160801b0391909116179092555050565b80156129cc5761ffff8316600090815260208590526040902060040154612993906001600160801b03168361190b565b61ffff8416600090815260208690526040902060040180546001600160801b0319166001600160801b03929092169190911790556127af565b61ffff83166000908152602085905260409020600401546129fd90600160801b90046001600160801b03168361190b565b61ffff8416600090815260208690526040902060040180546001600160801b03928316600160801b02921691909117905550505050565b600081612a675761ffff8316600090815260208590526040902060050154600160801b90046001600160801b0316611e4b565b505061ffff16600090815260209190915260409020600501546001600160801b031690565b604080516080810182526001546001600160a01b038116825261ffff600160a01b820416602080840182905260ff600160b01b8404811685870152600160b81b90930490921615156060808501919091528551928601519486015190860151600095869586959094612b0094919390612f70565b93508460600151600f0b600014612cfc57846020015161ffff16816020015161ffff161015612b9257612b8b612b398660400151611e53565b6001600160a01b0316612b4f8760200151611e53565b6001600160a01b031660008860600151600f0b1215612b7e578760600151612b7690613a89565b600f0b611e15565b8760600151600f0b611e15565b9150612cfc565b846040015161ffff16816020015161ffff161015612c9f5760025460408601516001600160801b0390911690612c0d90612bcb90611e53565b6001600160a01b031683600001516001600160a01b031660008960600151600f0b1215612c00578860600151612b7690613a89565b8860600151600f0b611e15565b9250612c6982600001516001600160a01b0316612c2d8860200151611e53565b6001600160a01b031660008960600151600f0b1215612c5c578860600151612c5490613a89565b600f0b612194565b8860600151600f0b612194565b9350612c7981876060015161190b565b600280546001600160801b0319166001600160801b039290921691909117905550612cfc565b612cf9612caf8660400151611e53565b6001600160a01b0316612cc58760200151611e53565b6001600160a01b031660008860600151600f0b1215612cec578760600151612c5490613a89565b8760600151600f0b612194565b92505b509193909250565b6000611cff8383670de0b6b3a7640000612ee4565b6000611cff83670de0b6b3a764000084612ffc565b6000612d3a8286612d04565b612d6986612d49876002613b3d565b612d539190613969565b6002612d5f878a612d04565b611e459190613ae6565b612d739190613969565b95945050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000808215612e73576000670de0b6b3a7640000600286612dbe898b612d04565b612dc89190613969565b612dd29190613d56565b612ddc9190613ae6565b90506000612dea878a612d04565b612df5906002613b3d565b90506000612e1e670de0b6b3a7640000612e0f8486613969565b612e199190613b3d565b61302a565b9050600087612e2d8a8c612d04565b612e379190613969565b9050612e478961207c8385613ab9565b955087612e5e612e578c89613969565b8b90612d04565b612e689190613969565b945050505050612eda565b60006002612e81878a612d04565b612e8b9190613ae6565b612e958789612d04565b612e9f9087613969565b612ea99190613ab9565b9050612eb58882612d04565b925084612ecc612ec58a8a613ab9565b8890612d04565b612ed69190613969565b9150505b9550959350505050565b828202811515841585830485141716612efc57600080fd5b0492915050565b600081831115612f135781611cff565b5090919050565b6000611cff8383670de0b6b3a7640000612ffc565b6000612f3b8286612f1a565b612d6986612f4a876002613b3d565b612f549190613969565b6002612f60878a612f1a565b612f6a9190613ae6565b90612f1a565b6000612f7f6004878787612823565b60065460075491925090600f85900b15612fcc57600654600754612fae916003918a9188918a91906000613103565b50600654600754612fca91600391899188918a91906001613103565b505b600080612fde60038a8a89888861320a565b9092509050612fef858884846132f6565b5050505095945050505050565b82820281151584158583048514171661301457600080fd5b6001826001830304018115150290509392505050565b600181600160801b81106130435760409190911b9060801c5b68010000000000000000811061305e5760209190911b9060401c5b64010000000081106130755760109190911b9060201c5b62010000811061308a5760089190911b9060101c5b610100811061309e5760049190911b9060081c5b601081106130b15760029190911b9060041c5b600881106130c0578160011b91505b5080820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c808204818110156130fd578091505b50919050565b61ffff8616600090815260208890526040812080546001600160801b03168261312c828961190b565b6001600160801b03838116159082161581141595509091501561317f578861ffff168a61ffff16116131675760018301879055600283018690555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b038216178355846131c55782546131c0906131bb90600f8b810b91600160801b9004900b613a48565b6134e0565b6131e3565b82546131e3906131bb90600f8b810b91600160801b9004900b613a09565b83546001600160801b03918216600160801b02911617909255509098975050505050505050565b61ffff80861660008181526020899052604080822088851683529082209193849391929184918291908a161061324b5750506001820154600283015461326f565b600184015461325a9089613ab9565b915083600201548761326c9190613ab9565b90505b6000808b61ffff168b61ffff161015613293575050600183015460028401546132b7565b60018501546132a2908b613ab9565b91508460020154896132b49190613ab9565b90505b816132c2858c613ab9565b6132cc9190613ab9565b9750806132d9848b613ab9565b6132e39190613ab9565b9650505050505050965096945050505050565b604080516101208101825285546001600160801b038082168352600160801b918290048116602084015260018801548082169484019490945292048216606082015260028601549091166080820152600385015460a0820152600485015460c0820152600585015460e082015260068501546101008201526000600f85900b6133c657600082608001516001600160801b0316116133bb5760405162461bcd60e51b815260206004820152600260248201526104e560f41b604482015260640161095f565b5060808101516133d7565b6133d482608001518661190b565b90505b600061340383608001516001600160801b0316670de0b6b3a76400008560a001518861250a9190613ab9565b9050600061343184608001516001600160801b0316670de0b6b3a76400008660c001518861250a9190613ab9565b905086600f0b60001461345c576002880180546001600160801b0319166001600160801b0385161790555b60038801869055600488018590556001600160801b03821615158061348a57506000816001600160801b0316115b156134d657816001600160801b03168860050160008282546134ac9190613969565b92505081905550806001600160801b03168860060160008282546134d09190613969565b90915550505b5050505050505050565b80600f81900b811461281e57600080fd5b80356001600160a01b038116811461281e57600080fd5b8035801515811461281e57600080fd5b60008083601f84011261352a57600080fd5b50813567ffffffffffffffff81111561354257600080fd5b60208301915083602082850101111561355a57600080fd5b9250929050565b60008060008060008060a0878903121561357a57600080fd5b613583876134f1565b955061359160208801613508565b94506040870135935060608701359250608087013567ffffffffffffffff8111156135bb57600080fd5b6135c789828a01613518565b979a9699509497509295939492505050565b803561ffff8116811461281e57600080fd5b80356001600160801b038116811461281e57600080fd5b600080600080600060a0868803121561361a57600080fd5b613623866134f1565b9450613631602087016135d9565b935061363f604087016135d9565b925061364d606087016135eb565b915061365b608087016135eb565b90509295509295909350565b6000806000806080858703121561367d57600080fd5b613686856134f1565b9350613694602086016135d9565b92506136a2604086016135eb565b91506136b060608601613508565b905092959194509250565b6000602082840312156136cd57600080fd5b5035919050565b6000806000606084860312156136e957600080fd5b6136f2846134f1565b9250613700602085016135d9565b915061370e60408501613508565b90509250925092565b60006020828403121561372957600080fd5b611cff826135eb565b6000806040838503121561374557600080fd5b61374e836135eb565b9150602083013580600f0b811461376457600080fd5b809150509250929050565b60006020828403121561378157600080fd5b611cff826134f1565b6000806040838503121561379d57600080fd5b6137a6836135d9565b91506137b460208401613508565b90509250929050565b600080600080608085870312156137d357600080fd5b6137dc856134f1565b93506137ea602086016135d9565b92506137f8604086016135d9565b91506136b0606086016135eb565b60008060006060848603121561381b57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561384457600080fd5b611cff826135d9565b6000806040838503121561386057600080fd5b823591506137b460208401613508565b60008060008060008060a0878903121561388957600080fd5b613892876134f1565b95506138a0602088016135d9565b94506138ae604088016135d9565b93506138bc606088016135eb565b9250608087013567ffffffffffffffff8111156135bb57600080fd5b6000806000606084860312156138ed57600080fd5b6138f6846135d9565b92506020840135915061370e60408501613508565b6020808252600990820152684e6f7420456e74727960b81b604082015260600190565b6020808252600b908201526a4552525f5245454e54525960a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561397c5761397c613953565b500190565b600061ffff8381169083168181101561399c5761399c613953565b039392505050565b600061ffff8083168185168083038211156139c1576139c1613953565b01949350505050565b60006001600160801b038083168185168083038211156139c1576139c1613953565b6000600160ff1b821415613a0257613a02613953565b5060000390565b60008083128015600160ff1b850184121615613a2757613a27613953565b6001600160ff1b0384018313811615613a4257613a42613953565b50500390565b600080821280156001600160ff1b0384900385131615613a6a57613a6a613953565b600160ff1b8390038412811615613a8357613a83613953565b50500190565b600081600f0b6f7fffffffffffffffffffffffffffffff19811415613ab057613ab0613953565b60000392915050565b600082821015613acb57613acb613953565b500390565b634e487b7160e01b600052601260045260246000fd5b600082613af557613af5613ad0565b500490565b60006001600160801b038381169083168181101561399c5761399c613953565b602080825260099082015268383934b1b29022a92960b91b604082015260600190565b6000816000190483118215151615613b5757613b57613953565b500290565b600082613b6b57613b6b613ad0565b500690565b6000815180845260005b81811015613b9657602081850181015186830182015201613b7a565b81811115613ba8576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611cff6020830184613b70565b634e487b7160e01b600052600160045260246000fd5b604081526000613bf96040830185613b70565b90508260208301529392505050565b606081526000613c1b6060830186613b70565b60208301949094525060400152919050565b600062ffffff8083168185168083038211156139c1576139c1613953565b60006001600160801b0380831681811415613c6857613c68613953565b6001019392505050565b600181815b80851115613cad578160001904821115613c9357613c93613953565b80851615613ca057918102915b93841c9390800290613c77565b509250929050565b600082613cc4575060016116f4565b81613cd1575060006116f4565b8160018114613ce75760028114613cf157613d0d565b60019150506116f4565b60ff841115613d0257613d02613953565b50506001821b6116f4565b5060208310610133831016604e8410600b8410161715613d30575081810a6116f4565b613d3a8383613c72565b8060001904821115613d4e57613d4e613953565b029392505050565b6000611cff60ff841683613cb556fea26469706673582212202768a7542e4ad2436b3fd302d626c274440f2c21e6c498e30e33558548b80aff64736f6c634300080a0033";