0 txs
0 calls
constructor
No constructor.
functions
calculateDeltaBFromReserves
viewfunction calculateDeltaBFromReserves(address well, uint256[] reserves, uint256 lookback) view returns (int256)
calculateStalkPenalty
viewfunction calculateStalkPenalty(tuple dbs, uint256 bdvConverted, uint256 overallConvertCapacity, address inputToken, address outputToken) view returns (uint256 stalkPenaltyBdv, uint256 overallConvertCapacityUsed, uint256 inputTokenAmountUsed, uint256 outputTokenAmountUsed)
cappedReservesDeltaB
viewfunction cappedReservesDeltaB(address well) view returns (int256 deltaB)
downPenalizedGrownStalk
viewfunction downPenalizedGrownStalk(address well, uint256 bdvToConvert, uint256 grownStalkToConvert) view returns (uint256 newGrownStalk, uint256 grownStalkLost)
getAmountOut
viewfunction getAmountOut(address tokenIn, address tokenOut, uint256 amountIn) view returns (uint256 amountOut)
getMaxAmountIn
viewfunction getMaxAmountIn(address tokenIn, address tokenOut) view returns (uint256 amountIn)
getOverallConvertCapacity
viewfunction getOverallConvertCapacity() view returns (uint256)
getWellConvertCapacity
viewfunction getWellConvertCapacity(address well) view returns (uint256)
overallCappedDeltaB
viewfunction overallCappedDeltaB() view returns (int256 deltaB)
overallCurrentDeltaB
viewfunction overallCurrentDeltaB() view returns (int256 deltaB)
scaledDeltaB
purefunction scaledDeltaB(uint256 beforeLpTokenSupply, uint256 afterLpTokenSupply, int256 deltaB) pure returns (int256)
events
No events.
errors
PRBMath__MulDivOverflow
error PRBMath__MulDivOverflow(uint256 prod1, uint256 denominator)
SafeCastOverflowedIntDowncast
error SafeCastOverflowedIntDowncast(uint8 bits, int256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
T
error T()
creation bytecode
0x6080604052348015600e575f80fd5b506145c58061001c5f395ff3fe608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80636842f2b31161006e5780636842f2b314610126578063b267ea0714610139578063b325d2ef14610141578063b905065b14610174578063d052f0d514610187578063f66d55891461019a575f80fd5b806324568abf146100aa57806324dd285c146100d05780633e8b56f1146100e35780634aa06652146100eb578063527ec6ba146100fe575b5f80fd5b6100bd6100b83660046137c9565b6101a2565b6040519081526020015b60405180910390f35b6100bd6100de366004613814565b6101b8565b6100bd6101cc565b6100bd6100f936600461384b565b6101da565b61011161010c366004613889565b6101e6565b604080519283526020830191909152016100c7565b6100bd6101343660046138bb565b610200565b6100bd61020a565b61015461014f366004613964565b610213565b6040805194855260208501939093529183015260608201526080016100c7565b6100bd6101823660046138bb565b610237565b6100bd610195366004613a22565b61027a565b6100bd610286565b5f6101ae8484846102c8565b90505b9392505050565b5f6101c383836102dd565b90505b92915050565b5f6101d56103cc565b905090565b5f6101ae848484610422565b5f806101f38585856104c5565b915091505b935093915050565b5f6101c6826105f5565b5f6101d561067c565b5f805f8061022489898989896106cd565b929c919b50995090975095505050505050565b435f9081526021602090815260408083206001600160a01b038516845260010190915281205481906101b19061027461026f866105f5565b610782565b9061079d565b5f6101ae8484846107a8565b5f805f61029461026f6103cc565b435f9081526021840160205260409020549091508181116102be576102b9828261079d565b6102c0565b5f5b935050505090565b5f6101ae836102d78487610a0f565b90610a1a565b5f80826001600160a01b0316846001600160a01b031603610302575f199150506101c6565b60018101546001600160a01b03858116911614801561032e575061032e836001600160a01b0316610a25565b156103445761033c83610a55565b9150506101c6565b610356846001600160a01b0316610a25565b8015610371575060018101546001600160a01b038481169116145b1561037f5761033c84610a66565b60405162461bcd60e51b815260206004820152601d60248201527f436f6e766572743a20546f6b656e73206e6f7420737570706f7274656400000060448201526064015b60405180910390fd5b5f806103d6610d8b565b90505f5b815181101561041d575f6104068383815181106103f9576103f9613ace565b60200260200101516105f5565b90506104128482610e8c565b9350506001016103da565b505090565b5f80836001600160a01b0316856001600160a01b03160361044657829150506101b1565b60018101546001600160a01b0386811691161480156104725750610472846001600160a01b0316610a25565b15610489576104818484610e97565b9150506101b1565b61049b856001600160a01b0316610a25565b80156104b6575060018101546001600160a01b038581169116145b1561037f576104818584610fdd565b5f80805f6104d38787611057565b9050808510156104ea57845f9350935050506101f8565b6104f38761106f565b1561050557845f9350935050506101f8565b60015f908152610148830160205260408120805461052290613af6565b80601f016020809104026020016040519081016040528092919081815260200182805461054e90613af6565b80156105995780601f1061057057610100808354040283529160200191610599565b820191905f5260205f20905b81548152906001019060200180831161057c57829003601f168201915b50505050508060200190518101906105b19190613b28565b5090506105dc6105cc8783670de0b6b3a76400006001611283565b6105d69088613b5e565b836112dc565b94506105e88587613b5e565b9350505050935093915050565b6001545f9081906001600160a01b039081169084160361061757505f92915050565b5f610621846112f1565b905080515f0361063457505f9392505050565b629896808161064286611424565b8151811061065257610652613ace565b6020026020010151101561066957505f9392505050565b61067484825f6107a8565b949350505050565b5f80610686610d8b565b90505f5b815181101561041d575f6106b68383815181106106a9576106a9613ace565b6020026020010151611493565b90506106c28482610e8c565b93505060010161068a565b5f805f806106d961376c565b6106e28a6115a6565b81526106ed8a6115f6565b602080830182905260408201519082015191516107139261070e919061163c565b6112dc565b6060820152805160408101518151602090920151610738928b92918b91908b90611647565b604083015260808201819052606082015161075d91610757919061163c565b8a611730565b604091820151918201518251602090930151919c909b50919950975095505050505050565b5f808212156107995761079482613b71565b6101c6565b5090565b5f6101c38284613b5e565b5f80846001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156107e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261080c9190810190613b8b565b90505f856001600160a01b03166310dd08306040518163ffffffff1660e01b81526004015f60405180830381865afa15801561084a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108719190810190613cbe565b90505f805f610880858861173e565b9250925092506298968088838151811061089c5761089c613ace565b602002602001015110156109065760405162461bcd60e51b815260206004820152602b60248201527f57656c6c3a204265616e2072657365727665206973206c657373207468616e2060448201526a746865206d696e696d756d60a81b60648201526084016103c3565b806109535760405162461bcd60e51b815260206004820152601c60248201527f57656c6c3a20555344204f7261636c652063616c6c206661696c65640000000060448201526064016103c3565b83516020850151604051631017d19360e31b81526001600160a01b03909216916380be8c989161098c918c918791899190600401613d57565b602060405180830381865afa9250505080156109c5575060408051601f3d908101601f191682019092526109c291810190613d95565b60015b6109d6575f955050505050506101b1565b610a028984815181106109eb576109eb613ace565b6020026020010151826119de90919063ffffffff16565b96505050505050506101b1565b5f6101c38284613dac565b5f6101c38284613def565b6001600160a01b03165f90815260c8602052604090205460e01b6001600160e01b03191663c84c772760e01b1490565b5f610a5f826119e9565b5092915050565b5f80826001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aca9190810190613b8b565b90505f836001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610b08573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2f9190810190613e1b565b90505f846001600160a01b03166310dd08306040518163ffffffff1660e01b81526004015f60405180830381865afa158015610b6d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b949190810190613cbe565b90505f805f610ba286611c24565b92509250925080610bc55760405162461bcd60e51b81526004016103c390613e9b565b835160208501516040516316a1119f60e21b81525f926001600160a01b031691635a84467c91610bfd918a9188918a91600401613d57565b602060405180830381865afa158015610c18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3c9190613d95565b905080868481518110610c5157610c51613ace565b602002602001015111610c6c57505f98975050505050505050565b845160208601516040516253057f60e61b81525f926001600160a01b0316916314c15fc091610c9f918b91600401613ed2565b602060405180830381865afa158015610cba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cde9190613d95565b905081878581518110610cf357610cf3613ace565b602002602001018181525050610d7d865f01516001600160a01b03166314c15fc08989602001516040518363ffffffff1660e01b8152600401610d37929190613ed2565b602060405180830381865afa158015610d52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d769190613d95565b829061079d565b9a9950505050505050505050565b60c9546060905f9081816001600160401b03811115610dac57610dac6138d6565b604051908082528060200260200182016040528015610dd5578160200160208202803683370190505b5093505f5b82811015610e825760c98401805482908110610df857610df8613ace565b5f91825260209091200154600160b01b900460ff1615610e7a5760c98401805482908110610e2857610e28613ace565b5f918252602090912001546001600160a01b03168583610e4781613ef6565b945081518110610e5957610e59613ace565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101610dda565b5080845250505090565b5f6101c38284613f0e565b5f80836001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ed4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610efb9190810190613b8b565b90505f81516001600160401b03811115610f1757610f176138d6565b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b5090508381610f4e84611c3f565b81518110610f5e57610f5e613ace565b6020908102919091010152604051638974eb0f60e01b81526001600160a01b03861690638974eb0f90610f95908490600401613f2d565b602060405180830381865afa158015610fb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd49190613d95565b95945050505050565b5f808060018101546040516308cfce0f60e41b8152600481018690526001600160a01b039182166024820152919250851690638cfce0f090604401602060405180830381865afa158015611033573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106749190613d95565b5f8061106284611ca8565b9050610674848285611cbf565b5f805f805f6110df866001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156110b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110d99190810190613b8b565b5f61173e565b925092509250806111025760405162461bcd60e51b81526004016103c390613e9b565b60fd840154835184908490811061111b5761111b613ace565b6020026020010151620f42406111319190613f3f565b61113b9190613f56565b83838151811061114d5761114d613ace565b6020026020010181815250505f61116387611ce7565b90505f876001600160a01b03166310dd08306040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111a1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111c89190810190613cbe565b90505f815f01516001600160a01b03166380be8c9884878986602001516040518563ffffffff1660e01b81526004016112049493929190613d57565b602060405180830381865afa15801561121f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112439190613d95565b90508083868151811061125857611258613ace565b602002602001015110156112755750600198975050505050505050565b505f98975050505050505050565b5f80611290868686611d90565b905060018360028111156112a6576112a6613ae2565b1480156112c257505f84806112bd576112bd613ddb565b868809115b15610fd4576112d2600182613f69565b9695505050505050565b5f8183116112ea57816101c3565b5090919050565b60605f826001600160a01b031663a1d89d966040518163ffffffff1660e01b81526004015f60405180830381865afa15801561132f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113569190810190613f7c565b90505f815f8151811061136b5761136b613ace565b60200260200101515f01519050806001600160a01b031663d026d37185845f8151811061139a5761139a613ace565b6020026020010151602001516040518363ffffffff1660e01b81526004016113c3929190614025565b5f60405180830381865afa9250505080156113ff57506040513d5f823e601f3d908101601f191682016040526113fc9190810190613e1b565b60015b61067457604080515f80825260208201909252905b50949350505050565b5050919050565b5f80826001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611461573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114889190810190613b8b565b90506101b181611c3f565b5f816001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004015f60405180830381865afa9250505080156114f157506040513d5f823e601f3d908101601f191682016040526114ee9190810190613e1b565b60015b6114fc57505f919050565b5f611567846001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa15801561153b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115629190810190613b8b565b611c3f565b90506298968082828151811061157f5761157f613ace565b6020026020010151101561159657505f9392505050565b61067484835f6107a8565b919050565b6115ae6137ab565b6115c082608001518360a00151611e58565b6040820152815160208301516115d69190611e58565b8152604082015160608301516115ec9190611e58565b6020820152919050565b6115fe6137ab565b61161082608001518360a00151611ecf565b6040820152815160208301516116269190611ecf565b8152604082015160608301516115ec9190611ecf565b5f6101c38284613f69565b5f6116506137ab565b435f90815260216020526040812080548a1161166e5788935061169c565b805461167b908b9061079d565b89111561169c57805461168f908b9061079d565b611699908a613b5e565b93505b80546116a8908a61163c565b604084015260018201546001600160a01b038981169116148015906116cc57505f87115b156116e6576116e188888684875f0151611f5f565b845293505b60018201546001600160a01b0387811691161480159061170557505f85115b156117235761171b868686848760200151611f5f565b602085015293505b5050965096945050505050565b5f8183106112ea57816101c3565b60605f80806001915085516001600160401b03811115611760576117606138d6565b604051908082528060200260200182016040528015611789578160200160208202803683370190505b5060018201549094505f1993505f906001600160a01b0316815b885181101561187657816001600160a01b03168982815181106117c8576117c8613ace565b60200260200101516001600160a01b0316036117e65780955061186e565b60088982815181106117fa576117fa613ace565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118619190614048565b60ff161161186e57600192505b6001016117a3565b505f5b88518110156119b357816001600160a01b031689828151811061189e5761189e613ace565b60200260200101516001600160a01b0316036118f95782156118e35764e8d4a510008782815181106118d2576118d2613ace565b6020026020010181815250506119ab565b620f42408782815181106118d2576118d2613ace565b82156119455761192289828151811061191457611914613ace565b602002602001015189611fc4565b87828151811061193457611934613ace565b602002602001018181525050611987565b61196889828151811061195a5761195a613ace565b602002602001015189612034565b87828151811061197a5761197a613ace565b6020026020010181815250505b86818151811061199957611999613ace565b60200260200101515f036119ab575f94505b600101611879565b505f1985036119d45760405162461bcd60e51b81526004016103c390614068565b5050509250925092565b5f6101c38284614093565b5f805f836001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611a27573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a4e9190810190613b8b565b90505f846001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611a8c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ab39190810190613e1b565b90505f856001600160a01b03166310dd08306040518163ffffffff1660e01b81526004015f60405180830381865afa158015611af1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b189190810190613cbe565b905060605f611b2685611c24565b909750909250905080611b4b5760405162461bcd60e51b81526004016103c390613e9b565b825160208401516040516316a1119f60e21b81525f926001600160a01b031691635a84467c91611b839189918c918991600401613d57565b602060405180830381865afa158015611b9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc29190613d95565b9050848781518110611bd657611bd6613ace565b60200260200101518111611bf2575f9750505050505050915091565b848781518110611c0457611c04613ace565b602002602001015181611c179190613b5e565b9750505050505050915091565b60605f80611c32845f61173e565b9250925092509193909250565b5f805b8251821015611c9057828281518110611c5d57611c5d613ace565b602090810291909101015160018201546001600160a01b03918216911603611c855750919050565b816001019150611c42565b60405162461bcd60e51b81526004016103c390614068565b5f6001611cb4836120a2565b516101c691906140b2565b5f80611cca856120dd565b9050610fd483611cde600b84900b8761219a565b600b0b906121a5565b60605f826001600160a01b031663a1d89d966040518163ffffffff1660e01b81526004015f60405180830381865afa158015611d25573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d4c9190810190613f7c565b90505f815f81518110611d6157611d61613ace565b60200260200101515f01519050806001600160a01b0316636de13cba85845f8151811061139a5761139a613ace565b5f80805f19858709858702925082811083820303915050805f03611dc757838281611dbd57611dbd613ddb565b04925050506101b1565b838110611df157604051631dcf306360e21b815260048101829052602481018590526044016103c3565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f80611e6384610782565b90505f611e6f84610782565b90505f8512158015611e8157505f8412155b80611e9557505f85128015611e9557505f84125b15611ebf5781811015611eb557611eac828261079d565b925050506101c6565b5f925050506101c6565b5090506101c6565b505092915050565b5f8083138015611ede57505f82125b80611ef257505f83128015611ef257505f82135b15611f0757611f0082610782565b90506101c6565b5f8213158015611f1757505f8313155b80611f2d57505f8212158015611f2d57505f8312155b156101c657611f3b82610782565b611f4484610782565b10156101c6576101c3611f5684610782565b61027484610782565b5f805f611f6e61026f896105f5565b6001600160a01b0389165f908152600187016020526040902054909150611f95908861163c565b935080841115611fb657611fb3611fac858361079d565b879061163c565b95505b509396919550909350505050565b5f6101c383846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612005573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120299190614048565b60ff168460016121b0565b5f6101c383846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612075573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120999190614048565b60ff16846127d5565b604080518082019091525f80825260208201526120be826120dd565b600b0b602082018190526120d39083906127e2565b600b0b8152919050565b6001600160a01b0381165f90815260c86020526040812054819061216c906121329061211590600160781b900463ffffffff166127fc565b60d48401546121299063ffffffff166127fc565b600b0b9061219a565b6001600160a01b0385165f90815260c88401602052604090205461216390600160201b900464ffffffffff166127fc565b600b0b9061280e565b6001600160a01b0384165f90815260c8830160205260409020546101b19190600160981b9004600b0b6140df565b5f6101c382846140b2565b5f6101c38284613f3f565b6001600160a01b038481165f908152602260209081526040808320815160808101835281549586168152600160a01b860460e01b6001600160e01b03191693810193909352600160c01b90940460f81b6001600160f81b0319169082015260018301805492938493849392606084019161222990613af6565b80601f016020809104026020016040519081016040528092919081815260200182805461225590613af6565b80156122a05780601f10612277576101008083540402835291602001916122a0565b820191905f5260205f20905b81548152906001019060200180831161228357829003601f168201915b5050509190925250505060408101519091506001600160f81b0319908116016122f3576122ea815f015182606001518060200190518101906122e29190613d95565b888888612819565b92505050610674565b60408101516001600160f81b031916607f60f91b016126bc575f815f01516001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561234c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612370919061410c565b9050876001600160a01b0316816001600160a01b0316036123f157815f01516001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ee919061410c565b90505b61248986156124005786612404565b6103845b83518a848b1561241e576124198c600a6141ff565b61283f565b8c6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247e9190614048565b61241990600a61420a565b6001600160a01b038281165f9081526022860160209081526040808320815160808101835281549586168152600160a01b860460e01b6001600160e01b03191693810193909352600160c01b90940460f81b6001600160f81b031916908201526001830180549498509193909291606084019161250590613af6565b80601f016020809104026020016040519081016040528092919081815260200182805461253190613af6565b801561257c5780601f106125535761010080835404028352916020019161257c565b820191905f5260205f20905b81548152906001019060200180831161255f57829003601f168201915b50505050508152505090505f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e89190614048565b60ff1690505f612622835f0151846060015180602001905181019061260d9190613d95565b8c15612619578461261b565b8c5b8c5f612819565b905089156126ae57871561265c578661263c8b600a6141ff565b61264b9064e8d4a51000613f3f565b6126559190613f56565b9650612682565b866126688b600a6141ff565b61267590620f4240613f3f565b61267f9190613f56565b96505b61268d82600a6141ff565b6126978289613f3f565b6126a19190613f56565b9650505050505050610674565b620f42406126978289613f3f565b80516001600160a01b03166126d5575f92505050610674565b60608101518415612709578160600151856040516020016126f792919061422f565b60405160208183030381529060405290505b5f80835f01516001600160a01b031684602001518a8a866040516024016127329392919061424c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612770919061426a565b5f60405180830381855afa9150503d805f81146127a8576040519150601f19603f3d011682016040523d82523d5f602084013e6127ad565b606091505b5091509150816127c4575f95505050505050610674565b602001519998505050505050505050565b5f6101ae8484845f6121b0565b5f6101c3826127f0856129f1565b64ffffffffff1661219a565b5f6101c661280983612afa565b612b26565b5f6101c38284614275565b5f8083116128325761282d86868685612b55565b6112d2565b6112d28686868686612cdc565b5f805f61284c8789612fd2565b915091508161285f575f92505050610fd4565b61286b81858888613196565b92505f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce9190614048565b60ff1690505f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612910573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129349190614048565b60ff1690505f6129448284614093565b9050805f0361297b5761295883600a6141ff565b612965620f424088613f3f565b61296f9190613f56565b95505050505050610fd4565b5f81131561299f5761298e81600a6141ff565b6129989087613f3f565b95506129c0565b6129a881613b71565b6129b390600a6141ff565b6129bd9087613f56565b95505b6129cb83600a6141ff565b6129d8620f424088613f3f565b6129e29190613f56565b9b9a5050505050505050505050565b60d4546001600160a01b0382165f90815260c860205260408120549091829163ffffffff918216600160781b9091049091161015612a58576001600160a01b0383165f90815260c882016020526040902054600160201b900464ffffffffff169150612af4565b6001600160a01b0383165f90815260c88201602052604081206001015460040b908112612ab9576001600160a01b0384165f90815260c883016020526040902054612ab2908290600160201b900464ffffffffff16614294565b925061141d565b612ac2816142b2565b6001600160a01b0385165f90815260c8840160205260409020546106749190600160201b900464ffffffffff166142d4565b50919050565b5f6001600160ff1b038211156107995760405163123baf0360e11b8152600481018390526024016103c3565b80600b81900b81146115a15760405163327269a760e01b815260606004820152602481018390526044016103c3565b5f808590505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612bb5575060408051601f3d908101601f19168201909252612bb291810190614048565b60015b612bc3575f92505050610674565b9050816001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015612c1f575060408051601f3d908101601f19168201909252612c1c91810190614308565b60015b612c2d575f92505050610674565b846001600160501b03165f03612c4c575f975050505050505050610674565b612c588285428e61329a565b15612c6c575f975050505050505050610674565b8915612caf578815612c8657612c838a6006613f69565b99505b612ca884612c9760ff89168d613f69565b612ca290600a6141ff565b906132e6565b9750612ccd565b612cca612cbd87600a61420a565b612ca286620f42406121a5565b97505b50505050505050949350505050565b5f80866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612d38575060408051601f3d908101601f19168201909252612d3591810190614048565b60015b612d45575f915050610fd4565b9050866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015612da1575060408051601f3d908101601f19168201909252612d9e91810190614308565b60015b612dae575f915050610fd4565b846001600160501b03165f03612dcc575f9650505050505050610fd4565b612dd88285428e61329a565b15612deb575f9650505050505050610fd4565b612e0c60405180606001604052805f81526020015f81526020015f81525090565b612e16428b61079d565b60208201528815612e2f57612e2c8b6006613f69565b9a505b80602001518311612e7a578a15612e5f57612e5185612c9760ff8a168e613f69565b975050505050505050610fd4565b612e51612e6d88600a61420a565b612ca287620f42406121a5565b4260408201525b8060200151831115612f36578a15612eb95784612ea160ff89168d613f69565b612eac90600a6141ff565b612eb69190613f56565b94505b612ee5612edd612ed685846040015161079d90919063ffffffff16565b87906121a5565b82519061163c565b8152612ef2600187614348565b604082018490529550612f058d876132f1565b8094508196505050612f1d838683604001518f61329a565b15612f31575f975050505050505050610fd4565b612e81565b8a15612f625784612f4a60ff89168d613f69565b612f5590600a6141ff565b612f5f9190613f56565b94505b612f83612edd612ed68360200151846040015161079d90919063ffffffff16565b81528a15612f9e578051612f97908b6132e6565b9750612fc2565b612fbf8a612ca2612fb08a600a61420a565b8451612ca290620f42406121a5565b97505b5050505050505095945050505050565b5f808263ffffffff165f0361300e5760405162461bcd60e51b8152602060048201526002602482015261042560f41b60448201526064016103c3565b6040805160028082526060820183525f9260208301908036833701905050905083815f8151811061304157613041613ace565b602002602001019063ffffffff16908163ffffffff16815250505f8160018151811061306f5761306f613ace565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526001600160a01b0386169063883bdbfd906130b0908490600401614368565b5f60405180830381865afa9250505080156130ec57506040513d5f823e601f3d908101601f191682016040526130e99190810190614421565b60015b1561318e575f825f8151811061310457613104613ace565b60200260200101518360018151811061311f5761311f613ace565b602002602001015161313191906144e4565b905061314e61314663ffffffff891683614511565b60060b613383565b94505f8160060b128015613173575061316d63ffffffff88168261454d565b60060b15155b1561318657846131828161456e565b9550505b600195505050505b509250929050565b5f806131a1866133b2565b90506001600160801b036001600160a01b03821611613226575f6131ce6001600160a01b03831680613f3f565b9050836001600160a01b0316856001600160a01b03161061320657613201600160c01b876001600160801b0316836136c2565b61321e565b61321e81876001600160801b0316600160c01b6136c2565b925050611414565b5f61323f6001600160a01b03831680600160401b6136c2565b9050836001600160a01b0316856001600160a01b03161061327757613272600160801b876001600160801b0316836136c2565b61328f565b61328f81876001600160801b0316600160801b6136c2565b979650505050505050565b5f8415806132a757508285115b156132b457506001610674565b816132bf848761079d565b11156132cd57506001610674565b5f84136132dc57506001610674565b505f949350505050565b5f6101c38284613f56565b604051639a6fc8f560e01b81526001600160501b03821660048201525f9081906001600160a01b03851690639a6fc8f59060240160a060405180830381865afa92505050801561335e575060408051601f3d908101601f1916820190925261335b91810190614308565b60015b61336d57505f1990505f61337c565b5091945090925061337c915050565b9250929050565b80600281900b81146115a15760405163327269a760e01b815260186004820152602481018390526044016103c3565b5f805f8360020b126133c7578260020b6133ce565b8260020b5f035b9050620d89e88111156133f4576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f0361340957600160801b61341b565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615613445576ffff97272373d413259a46990580e213a0260801c5b6004821615613464576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613483576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156134a2576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156134c1576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156134e0576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156134ff576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561351f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561353f576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561355f576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561357f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561359f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156135bf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156135df576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156135ff576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613620576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613640576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561365f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561367c576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561369b57805f198161369757613697613ddb565b0490505b600160201b8106156136ae5760016136b0565b5f5b60ff16602082901c0192505050919050565b5f80805f19858709858702925082811083820303915050805f036136f6575f84116136eb575f80fd5b5082900490506101b1565b808411613701575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040518060a0016040528061377f6137ab565b815260200161378c6137ab565b81526020016137996137ab565b81526020015f81526020015f81525090565b60405180606001604052805f81526020015f81526020015f81525090565b5f805f606084860312156137db575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114613806575f80fd5b50565b80356115a1816137f2565b5f8060408385031215613825575f80fd5b8235613830816137f2565b91506020830135613840816137f2565b809150509250929050565b5f805f6060848603121561385d575f80fd5b8335613868816137f2565b92506020840135613878816137f2565b929592945050506040919091013590565b5f805f6060848603121561389b575f80fd5b83356138a6816137f2565b95602085013595506040909401359392505050565b5f602082840312156138cb575f80fd5b81356101b1816137f2565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b038111828210171561390c5761390c6138d6565b60405290565b604080519081016001600160401b038111828210171561390c5761390c6138d6565b604051601f8201601f191681016001600160401b038111828210171561395c5761395c6138d6565b604052919050565b5f805f805f85870361014081121561397a575f80fd5b60c0811215613987575f80fd5b506139906138ea565b863581526020870135602082015260408701356040820152606087013560608201526080870135608082015260a087013560a08201528095505060c0860135935060e086013592506139e56101008701613809565b91506139f46101208701613809565b90509295509295909350565b5f6001600160401b03821115613a1857613a186138d6565b5060051b60200190565b5f805f60608486031215613a34575f80fd5b8335613a3f816137f2565b92506020848101356001600160401b03811115613a5a575f80fd5b8501601f81018713613a6a575f80fd5b8035613a7d613a7882613a00565b613934565b81815260059190911b82018301908381019089831115613a9b575f80fd5b928401925b82841015613ab957833582529284019290840190613aa0565b96999698505050506040949094013593505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b600181811c90821680613b0a57607f821691505b602082108103612af457634e487b7160e01b5f52602260045260245ffd5b5f8060408385031215613b39575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b818103818111156101c6576101c6613b4a565b5f600160ff1b8201613b8557613b85613b4a565b505f0390565b5f6020808385031215613b9c575f80fd5b82516001600160401b03811115613bb1575f80fd5b8301601f81018513613bc1575f80fd5b8051613bcf613a7882613a00565b81815260059190911b82018301908381019087831115613bed575f80fd5b928401925b8284101561328f578351613c05816137f2565b82529284019290840190613bf2565b5f60408284031215613c24575f80fd5b613c2c613912565b90508151613c39816137f2565b81526020828101516001600160401b0380821115613c55575f80fd5b818501915085601f830112613c68575f80fd5b815181811115613c7a57613c7a6138d6565b613c8c601f8201601f19168501613934565b91508082528684828501011115613ca1575f80fd5b808484018584015e5f908201840152918301919091525092915050565b5f60208284031215613cce575f80fd5b81516001600160401b03811115613ce3575f80fd5b61067484828501613c14565b5f815180845260208085019450602084015f5b83811015613d1e57815187529582019590820190600101613d02565b509495945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f613d696080830187613cef565b8560208401528281036040840152613d818186613cef565b9050828103606084015261328f8185613d29565b5f60208284031215613da5575f80fd5b5051919050565b8082025f8212600160ff1b84141615613dc757613dc7613b4a565b81810583148215176101c6576101c6613b4a565b634e487b7160e01b5f52601260045260245ffd5b5f82613dfd57613dfd613ddb565b600160ff1b82145f1984141615613e1657613e16613b4a565b500590565b5f6020808385031215613e2c575f80fd5b82516001600160401b03811115613e41575f80fd5b8301601f81018513613e51575f80fd5b8051613e5f613a7882613a00565b81815260059190911b82018301908381019087831115613e7d575f80fd5b928401925b8284101561328f57835182529284019290840190613e82565b6020808252601a908201527f436f6e766572743a20555344204f7261636c65206661696c6564000000000000604082015260600190565b604081525f613ee46040830185613cef565b8281036020840152610fd48185613d29565b5f60018201613f0757613f07613b4a565b5060010190565b8082018281125f831280158216821582161715611ec757611ec7613b4a565b602081525f6101c36020830184613cef565b80820281158282048414176101c6576101c6613b4a565b5f82613f6457613f64613ddb565b500490565b808201808211156101c6576101c6613b4a565b5f6020808385031215613f8d575f80fd5b82516001600160401b0380821115613fa3575f80fd5b818501915085601f830112613fb6575f80fd5b8151613fc4613a7882613a00565b81815260059190911b83018401908481019088831115613fe2575f80fd5b8585015b8381101561401857805185811115613ffc575f80fd5b61400a8b89838a0101613c14565b845250918601918601613fe6565b5098975050505050505050565b6001600160a01b03831681526040602082018190525f906101ae90830184613d29565b5f60208284031215614058575f80fd5b815160ff811681146101b1575f80fd5b6020808252601190820152702132b0b7103737ba1034b7102bb2b6361760791b604082015260600190565b8181035f831280158383131683831282161715610a5f57610a5f613b4a565b600b82810b9082900b0360016001605f1b0319811260016001605f1b03821317156101c6576101c6613b4a565b600b81810b9083900b0160016001605f1b03811360016001605f1b0319821217156101c6576101c6613b4a565b5f6020828403121561411c575f80fd5b81516101b1816137f2565b600181815b8085111561318e57815f190482111561414757614147613b4a565b8085161561415457918102915b93841c939080029061412c565b5f8261416f575060016101c6565b8161417b57505f6101c6565b8160018114614191576002811461419b576141b7565b60019150506101c6565b60ff8411156141ac576141ac613b4a565b50506001821b6101c6565b5060208310610133831016604e8410600b84101617156141da575081810a6101c6565b6141e48383614127565b805f19048211156141f7576141f7613b4a565b029392505050565b5f6101c38383614161565b5f6101c360ff841683614161565b5f81518060208401855e5f93019283525090919050565b5f61423a8285614218565b92151560f81b83525050600101919050565b838152826020820152606060408201525f610fd46060830184613d29565b5f6101c38284614218565b5f82600b0b82600b0b0280600b0b9150808214610a5f57610a5f613b4a565b64ffffffffff828116828216039080821115610a5f57610a5f613b4a565b5f8160040b647fffffffff1981036142cc576142cc613b4a565b5f0392915050565b64ffffffffff818116838216019080821115610a5f57610a5f613b4a565b80516001600160501b03811681146115a1575f80fd5b5f805f805f60a0868803121561431c575f80fd5b614325866142f2565b94506020860151935060408601519250606086015191506139f4608087016142f2565b6001600160501b03828116828216039080821115610a5f57610a5f613b4a565b602080825282518282018190525f9190848201906040850190845b818110156143a557835163ffffffff1683529284019291840191600101614383565b50909695505050505050565b5f82601f8301126143c0575f80fd5b815160206143d0613a7883613a00565b8083825260208201915060208460051b8701019350868411156143f1575f80fd5b602086015b84811015614416578051614409816137f2565b83529183019183016143f6565b509695505050505050565b5f8060408385031215614432575f80fd5b82516001600160401b0380821115614448575f80fd5b818501915085601f83011261445b575f80fd5b8151602061446b613a7883613a00565b82815260059290921b84018101918181019089841115614489575f80fd5b948201945b838610156144b55785518060060b81146144a6575f80fd5b8252948201949082019061448e565b918801519196509093505050808211156144cd575f80fd5b506144da858286016143b1565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156101c6576101c6613b4a565b5f8160060b8360060b8061452757614527613ddb565b667fffffffffffff1982145f198214161561454457614544613b4a565b90059392505050565b5f8260060b8061455f5761455f613ddb565b808360060b0791505092915050565b5f8160020b627fffff19810361458657614586613b4a565b5f19019291505056fea2646970667358221220f9dbd7df6e0429d35ab7a3cdd2de68725a577557b9d8e294127cde59ecf2ab4364736f6c63430008190033